两个一套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" />
在我的活动,我这样做:
@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/