请允许我解释一下。我有:
带图片的按钮(位于@ drawable / pic),
线性布局(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,我想用按钮(图片)填充相同的图片。代码如下:
//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);
使用与按钮相同的图像显示imageview时,代码可以正常工作。 但问题是:当我以编程方式将imageview设置为50dp时,按钮内部的图像也发生了变化.. 怎么会发生?我很困惑,因为我是新手..
先谢谢。
答案 0 :(得分:3)
两个视图共享相同的drawable。
将一个视图上的操作发送到底层的drawable是有道理的,影响它在另一个视图中的显示方式 - 坦率地说我不知道。但假设案例如您所述,通过克隆drawable可以很容易地解决这个问题:
Drawable dr = btn1.getDrawable().getConstantState().newDrawable();
img.setImageDrawable(dr);