【发布时间】:2013-02-27 20:15:19
【问题描述】:
我正在创建一些日历视图,我想做的是为可点击的 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
- ...
如果您有任何线索我做错了什么或我可以做些什么来解决我的问题,请告诉我! :-)
氪,
德克
【问题讨论】:
-
AFAIK 状态列表会删除所有附加到可绘制对象的颜色过滤器。所以问题可能不在于 9patch 部分,而可能是状态列表。能否请您测试以删除状态列表,将颜色过滤器应用于可绘制对象并提供反馈?
标签: android nine-patch android-drawable porter-duff statelistdrawable