@ 4castleコメントで指摘mutate()
メソッドは、コピー可能な一定の描画可能状態のドロアブルの同じインスタンスを返します。ドキュメントはプレーできるようにします
が変更可能な描画可能にだから、同じ状態
でドローアブルに影響を与えずに描画可能に変更しても安全である任意の他の描画可能
でその状態を共有しないように保証されていることを述べています黒形状
<!-- shape.xml -->
<shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle">
<solid android:color="@android:color/black" />
</shape>
- この描画可能と
view1.setBackgroundResource(R.drawable.shape); // set black shape as a background
view1.getBackground().mutate().setTint(Color.CYAN); // change black to cyan
view2.setBackgroundResource(R.drawable.shape); // set black shape background to second view
逆の方法はnewDrawable()
です。それは新しい描画可能であるが、同じ一定の状態を作成する。例えば。 BitmapDrawable.BitmapState
を見て:新しい描画可能に
@Override
public Drawable newDrawable() {
return new BitmapDrawable(this, null);
}
変更現在の描画可能に影響を与えませんが、状態を変更します:
view1.setBackgroundResource(R.drawable.shape); // set black shape as background
Drawable drawable = view1.getBackground().getConstantState().newDrawable();
drawable.setTint(Color.CYAN); // view still black
view1.setBackground(drawable); // now view is cyan
view2.setBackgroundResource(R.drawable.shape); // second view is cyan also
あなたは 'クローン== drawable'が'であることをmutate' 'と気づくでしょう本当です。 – 4castle
私は見るので、mutateは全く同じ描画可能ですが、共有状態はありません。およびdrawable.getConstantState()。newDrawable();実際にメモリに入れられた新しいドロアブルです、正しい? – j2emanue
これは間違いない! – 4castle