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

请允许我解释一下。我有:

  • 带有图片的按钮(位于@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" />
    
    //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”,那么程序就可以按我所希望的那样工作。