Android:フィルターを使用してStateListDrawableを作成するために、Drawableを複製する
私は、任意の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に追加すると、すべてのフィルターが失われるようです。