我有一张LinearLayout" card"使用ImageView和TextView。我想要在用户点击它时突出显示该卡。有关示例,请参阅http://www.youtube.com/watch?v=Yx1l9Y7GIk8&feature=share&t=15m17s。
通过设置android:background="@drawable/blue_highlight"
可以轻松地为TextView完成此操作。下面是res / drawable / blue_highlight.xml:
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_selected="true" android:drawable="@color/selected"/>
<item android:state_pressed="true" android:drawable="@color/pressed"/>
<item android:drawable="@color/bg_window"/>
</selector>
但是这对ImageView不起作用,因为图像在前面并且背景不可见。如何为ImageView设置半透明颜色的触摸高光效果?
答案 0 :(得分:12)
令人惊讶的是,FrameLayout具有可用于此的foreground属性。缺点是你必须添加一个额外的FrameLayout元素。实现很简单,所以在你有时间实现花哨的图像处理(对图像去色,然后应用高亮显示)和动态构建状态drawable之前,这似乎已经足够了。
所以在我的情况下,这将是:
<FrameLayout
android:foreground="@drawable/blue_highlight_image"
>
<ImageView ...>
</FrameLayout>
@ drawable / blue_highlight_image使用新的@color / pressed_image值,该值类似于@ color / pressed但具有alpha通道,例如:#81CFEB - &gt; #AA81CFEB。
感谢@Vang的建议。
答案 1 :(得分:1)
你是正确的方式。尝试使用blue_highlight.xml作为drawable,但使用其中的颜色使用您想要显示的图像,并定义第二个drawable,在突出显示时为图像添加颜色过滤器。
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_selected="true" android:drawable="@drawable/yourdrawable_with_colorfilter"/>
<item android:state_pressed="true" android:drawable="@drawable/yourdrawable_with_colorfilter"/>
<item android:drawable="@drawable/your_drawable"/>
</selector>