2016-11-24 14 views
1

私は2つの場所でこのxmlを使用し、2つのプログラムの1つの色をプログラムで変更しましたが、もう一方の色も変更されています。shapedrawableの色を変更する際の問題

<shape xmlns:android="http://schemas.android.com/apk/res/android"> 
    <solid android:color="@color/blue" /> 
    <corners android:radius="2dp" /> 
</shape> 

答えて

0

Drawable.mutate()を使用してください。

リソースからDrawableをロードするたびに、パフォーマンス上の理由から新しいインスタンスが受信されても​​、それらはすべてConstantStateを共有します。このConstantStateには、通常、Drawableで宣言できるすべてのプロパティがあり、その例の色があります。

Drawablesのいずれかの色を変更した場合、変更内容はConstantStateに反映され、変更内容は同じConstantStateを持つ他のすべてのインスタンスで表示されます。 Drawable.mutate()状態のドキュメントとして

は、この描画可能に変更可能にします。この操作は元に戻すことはできません。変更可能なドロウアブルは、他のドロウアブルと状態を共有しないことが保証されています。これは、リソースからロードされたドロウアブルのプロパティを変更する必要がある場合に特に便利です。デフォルトでは、同じリソースからロードされたすべてのドロウアブルインスタンスは共通の状態を共有します。あるインスタンスの状態を変更すると、他のすべてのインスタンスは同じ変更を受け取ります。

この素晴らしいpost by Romain Guy for more detailsを確認できます。

+0

それは、thxの作品! – tysheng

関連する問題