3

カレンダービューを作成しています。やりたいのは、ClickabeであるLineairLayoutの背景を作成することです。

したがって、2つの画像を使用してStateListDrawableを作成します。

  1. 背景の画像
  2. アイテムが押されたときの画像

これまでのところ、これはこのコードで機能します。

    NinePatchDrawable background = (NinePatchDrawable) context.getResources().getDrawable(R.drawable.calendar_item);
    Drawable backgroundFocus = context.getResources().getDrawable(R.drawable.calendar_focus);

    int stateFocused = android.R.attr.state_focused;
    int statePressed = android.R.attr.state_pressed;

    StateListDrawable sld = new StateListDrawable();
    sld.addState(new int[]{ stateFocused,  statePressed}, backgroundFocus);
    sld.addState(new int[]{-stateFocused,  statePressed}, backgroundFocus);
    sld.addState(new int[]{-stateFocused}, background);
    return sld;

しかし、私は何か特別なことをしたいと思います。ユーザーが背景を表示するために使用したい色を渡すことができるようにしたいと思います。したがって、背景変数は可変である必要がありますが、9パッチのドローアブルに基づいている必要があります。

だから私はこのようなことをすることができると思いました:

background.setColorFilter(Color.RED, PorterDuff.Mode.DST_IN);

Color.REDは、ユーザーが選択した色に置き換える必要があります。

しかし、それはうまくいかないようです。9パッチは完全に作成されますが、カラーフィルターは適用されません。

他のPoterDuff.Modeも試しました。

  • SRC
  • SRC_ATOP
  • DST_IN
  • ..。

私が間違っていること、または私の問題を解決するために他に何ができるかについての手がかりがあれば、私に知らせてください!:-)

Kr、

ダーク

4

1 に答える 1