2014-03-01 116 views
0

請允許我解釋一下。我有:如何解決這個imageview錯誤?

  1. 與畫面中的按鈕(位於@繪製/ PIC),

  2. 線性佈局(ID = linear1)

按鈕XML如下:

 <ImageButton 
      android:id="@+id/imageButton1" 
      android:layout_width="80dp" 
      android:layout_height="80dp" 
      android:layout_marginRight="10dp" 
      android:scaleType="fitXY" 
      android:src="@drawable/pic" 
      android:maxWidth="80dp" 
      android:maxHeight="80dp" 
      tools:ignore="ContentDescription" /> 

線性佈局xml如下:

 <LinearLayout 
     android:id="@+id/layout1" 
     android:layout_width="match_parent" 
     android:layout_height="80dp" 
     android:gravity="center" 
     android:orientation="horizontal" 
     tools:ignore="UselessLeaf" > 

我想要的是,當我點擊按鈕,我想要在linearlayout內編程創建/生成imageview,並且我想用按鈕(pic)的相同圖片填充它。代碼如下:

//initiate imageview 
    ImageView img=new ImageView(this); 
    //get drawable from button 
    Drawable blabla=btn1.getDrawable(); 

    //set drawable to imageview 
    img.setImageDrawable(blabla); 

    //set height and width of imageview to 50dp 
    LinearLayout.LayoutParams parms = new LinearLayout.LayoutParams(50,50); 
    img.setLayoutParams(parms); 
    img.setScaleType(ScaleType.FIT_XY); 

    //place imageview to linearlayout 
    layoutTempat.addView(img); 

該代碼可以正常顯示與按鈕所具有的圖像相同的圖像。 然而,問題是:當我設置圖像視圖爲50dp編程,圖像裏面的按鈕也改變了..它怎麼會發生?我很困惑,因爲我是一個新手..

以前感謝。

+0

我之前encourted同樣的問題一段時間,並決定,ImageView的+按鍵組合要堅持,因爲提供了更多的靈活性。我認爲你所發現的東西就是他們想要展示的方式。 – Dejan

+0

按鈕如何變化! ? –

+0

如果你有視覺上的東西來描述你想要的效果,它可能會有所幫助。此外,'新的LinearLayout.LayoutParams(50,50);'這是50個像素,*不* dp。如果要以這種方式編程創建LayoutParams,則需要將其乘以屏幕的密度比例因子。 – Karakuri

回答

3

這兩個視圖共享相同的drawable。

這是合理的,你對一個視圖的操作被髮送到底層drawable,影響它如何顯示在另一個視圖 - 坦率地說,我不知道。不過,假設的情況是,你所描述的,這個問題很容易被克隆提拉固定如下:

Drawable dr = btn1.getDrawable().getConstantState().newDrawable(); 
img.setImageDrawable(dr); 
+0

Hy謝謝!,,這顯然是最終的答案。 。但我發現了一種新的方式: **它似乎,如果我改變按鈕屬性'scaletype'爲'cropcenter',而不是'fitxy'該程序工作,因爲我想。** – studentknight