如何修复此imageview错误?

时间:2014-03-01 08:34:28

标签: android imageview

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

  1. 带图片的按钮(位于@ drawable / pic),

  2. 线性布局(id = linear1)

  3. 按钮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时,按钮内部的图像也发生了变化.. 怎么会发生?我很困惑,因为我是新手..

    先谢谢。

1 个答案:

答案 0 :(得分:3)

两个视图共享相同的drawable。

将一个视图上的操作发送到底层的drawable是有道理的,影响它在另一个视图中的显示方式 - 坦率地说我不知道​​。但假设案例如您所述,通过克隆drawable可以很容易地解决这个问题:

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