我正在创建一些日历视图,我想做的是为可点击的 LineairLayout 创建一个背景。
因此,我创建了一个包含两个图像的 StateListDrawable:
- 背景图像
- 按下项目时的图像
到目前为止,这适用于这段代码:
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;
但我想做一些额外的事情。我希望用户能够传递他想要用来显示背景的颜色。所以背景var必须是可变的,但必须是基于九个补丁的drawable。
所以我想我可以做这样的事情:
background.setColorFilter(Color.RED, PorterDuff.Mode.DST_IN);
其中 Color.RED 必须替换为用户选择的颜色。
但这似乎不起作用。九个补丁创建完美,但没有应用颜色过滤器。
我还尝试了其他 PoterDuff.Mode 的:
- SRC
- SRC_ATOP
- DST_IN
- ...
如果您有任何线索我做错了什么或者我可以做些什么来解决我的问题,请告诉我!:-)
氪,
短剑