私は、任意のDrawableが押された/フォーカスされた/選択されたなどのときに強調表示されるようにする一般的なフレームワーク関数を作成しようとしています。
私の関数はDrawableを取り、StateListDrawableを返します。デフォルトの状態はDrawable自体であり、の状態android.R.attr.state_pressed
は同じDrawableですsetColorFilter
。
私の問題は、ドローアブルを複製して、フィルターを適用した状態でドローアブルの個別のインスタンスを作成できないことです。これが私が達成しようとしていることです:
StateListDrawable makeHighlightable(Drawable drawable)
{
StateListDrawable res = new StateListDrawable();
Drawable clone = drawable.clone(); // how do I do this??
clone.setColorFilter(0xFFFF0000, PorterDuff.Mode.MULTIPLY);
res.addState(new int[] {android.R.attr.state_pressed}, clone);
res.addState(new int[] { }, drawable);
return res;
}
クローンを作成しない場合、フィルターは明らかに両方の状態に適用されます。遊んでみましたmutate()
が、役に立ちません。
何か案は?
更新:
受け入れられた答えは確かにドローアブルを複製します。私の一般的な機能が別の問題で失敗するので、それは私を助けませんでした。ドローアブルをStateListに追加すると、すべてのフィルターが失われるようです。