两个一套ImageView的背景Alpha只有一种成功

两个一套ImageView的背景Alpha只有一种成功

问题描述:

我有两个ImageView和一个Button以xml:两个一套ImageView的背景Alpha只有一种成功

<ImageView 
    android:id="@+id/image1" 
    android:layout_width="40dp" 
    android:layout_height="40dp" 
    android:background="@drawable/backgroud_msg_notify" 
    android:src="@mipmap/ic_launcher" 
    app:layout_constraintRight_toLeftOf="@+id/guideline" 
    android:layout_marginRight="8dp" 
    android:layout_marginLeft="8dp" 
    app:layout_constraintLeft_toLeftOf="parent" 
    app:layout_constraintTop_toTopOf="parent" 
    android:layout_marginTop="8dp" /> 

<ImageView 
    android:id="@+id/image2" 
    android:layout_width="40dp" 
    android:layout_height="40dp" 
    android:background="@drawable/backgroud_msg_notify" 
    android:src="@mipmap/ic_launcher" 
    android:layout_marginRight="8dp" 
    app:layout_constraintRight_toRightOf="parent" 
    app:layout_constraintTop_toTopOf="parent" 
    android:layout_marginTop="8dp" 
    android:layout_marginLeft="8dp" 
    app:layout_constraintLeft_toLeftOf="@+id/guideline" /> 

design

在我的活动,我这样做:

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_test_image_view); 
    final ImageView imageView1 = (ImageView) findViewById(R.id.image1); 
    final ImageView imageView2 = (ImageView) findViewById(R.id.image2); 
    Button btn = (Button) findViewById(R.id.button); 
    btn.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      imageView1.getBackground().setAlpha(100); 
      imageView2.getBackground().setAlpha(100); 
     } 
    }); 
} 

但只有imageView1背景alpha发生了变化,当第一次设置imageview2时,只有imageview2背景发生了变化。所以我复制背景文件并分别设置两个imageview。两个imageview都改变了,为什么?

原因是他们为每个背景共享相同的Drawable。调用可绘制的mutate方法会帮助你在这里:

//Affects only the first one because mutate was called first. 
imageView1.getBackground().mutate().setAlpha(100); 

阅读本用于了解变异可绘: http://www.curious-creature.com/2009/05/02/drawable-mutations/