Android 如何修复此imageview错误?
请允许我解释一下。我有:Android 如何修复此imageview错误?,android,imageview,Android,Imageview,请允许我解释一下。我有: 带有图片的按钮(位于@drawable/pic) 线性布局(id=linear1) 按钮xml如下所示: <ImageButton android:id="@+id/imageButton1" android:layout_width="80dp" android:layout_height="80dp" android:layout_marginRig
<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" />
//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时,图像内部按钮也发生了变化。这是怎么发生的?我很困惑,因为我是个新手
谢谢你 这两个视图共享同一个可绘制视图 你在一个视图上的操作可能会被发送到底层的drawable,从而影响它在另一个视图中的显示方式——坦白地说,我不知道。但是,假设情况如您所述,通过如下方式克隆可绘制图形,可以很容易地解决此问题:
Drawable dr = btn1.getDrawable().getConstantState().newDrawable();
img.setImageDrawable(dr);
这两个视图共享同一个可绘制视图 你在一个视图上的操作可能会被发送到底层的drawable,从而影响它在另一个视图中的显示方式——坦白地说,我不知道。但是,假设情况如您所述,通过如下方式克隆可绘制图形,可以很容易地解决此问题:
Drawable dr = btn1.getDrawable().getConstantState().newDrawable();
img.setImageDrawable(dr);
这两个视图共享同一个可绘制视图 你在一个视图上的操作可能会被发送到底层的drawable,从而影响它在另一个视图中的显示方式——坦白地说,我不知道。但是,假设情况如您所述,通过如下方式克隆可绘制图形,可以很容易地解决此问题:
Drawable dr = btn1.getDrawable().getConstantState().newDrawable();
img.setImageDrawable(dr);
这两个视图共享同一个可绘制视图 你在一个视图上的操作可能会被发送到底层的drawable,从而影响它在另一个视图中的显示方式——坦白地说,我不知道。但是,假设情况如您所述,通过如下方式克隆可绘制图形,可以很容易地解决此问题:
Drawable dr = btn1.getDrawable().getConstantState().newDrawable();
img.setImageDrawable(dr);
我以前也遇到过同样的问题,决定坚持使用ImageView+按钮组合,因为它提供了更多的灵活性。我认为你遇到的事情是他们希望它显示的方式。按钮是如何改变的?如果你有视觉效果来描述你想要的效果,这可能会有所帮助。另外,
新的LinearLayout.LayoutParams(50,50)代码>这是50像素,不是dp。如果您要像这样以编程方式创建LayoutParams,则需要将其乘以屏幕的密度比例因子。请输入布局的初始化代码和按钮imageguys,谢谢。。下面有人完美地回答了这个问题。我之前遇到过同样的问题,决定坚持使用ImageView+按钮组合,因为它提供了更大的灵活性。我认为你遇到的事情是他们希望它显示的方式。按钮是如何改变的?如果你有视觉效果来描述你想要的效果,这可能会有所帮助。另外,新的LinearLayout.LayoutParams(50,50)代码>这是50像素,不是dp。如果您要像这样以编程方式创建LayoutParams,则需要将其乘以屏幕的密度比例因子。请输入布局的初始化代码和按钮imageguys,谢谢。。下面有人完美地回答了这个问题。我之前遇到过同样的问题,决定坚持使用ImageView+按钮组合,因为它提供了更大的灵活性。我认为你遇到的事情是他们希望它显示的方式。按钮是如何改变的?如果你有视觉效果来描述你想要的效果,这可能会有所帮助。另外,新的LinearLayout.LayoutParams(50,50)代码>这是50像素,不是dp。如果您要像这样以编程方式创建LayoutParams,则需要将其乘以屏幕的密度比例因子。请输入布局的初始化代码和按钮imageguys,谢谢。。下面有人完美地回答了这个问题。我之前遇到过同样的问题,决定坚持使用ImageView+按钮组合,因为它提供了更大的灵活性。我认为你遇到的事情是他们希望它显示的方式。按钮是如何改变的?如果你有视觉效果来描述你想要的效果,这可能会有所帮助。另外,新的LinearLayout.LayoutParams(50,50)代码>这是50像素,不是dp。如果您要像这样以编程方式创建LayoutParams,则需要将其乘以屏幕的密度比例因子。请输入布局的初始化代码和按钮imageguys,谢谢。。下面有人已经很好地回答了这个问题..谢谢!,,这显然是最终的答案。但我也发现了一种新的方法:如果我将按钮属性“scaletype”改为“cropcenter”,而不是“fitxy”,那么程序就可以按我的要求运行了。谢谢!,,这显然是最终的答案。但我也发现了一种新的方法:如果我将按钮属性“scaletype”改为“cropcenter”,而不是“fitxy”,那么程序就可以按我的要求运行了。谢谢!,,这显然是最终的答案。但我也发现了一种新的方法:如果我将按钮属性“scaletype”改为“cropcenter”,而不是“fitxy”,那么程序就可以按我的要求运行了。谢谢!,,这显然是最终的答案。但我也发现了一种新的方法:如果我将按钮属性“scaletype”更改为“cropcenter”,而不是“fitxy”,那么程序就可以按我所希望的那样工作。