5

我有一个带有 ImageView 和 TextView 的 LinearLayout“卡片”。我希望在用户点击卡片时突出显示卡片。有关示例,请参见http://www.youtube.com/watch?v=Yx1l9Y7GIk8&feature=share&t=15m17s 。

这可以通过设置为 TextView 轻松完成android:background="@drawable/blue_highlight"。下面是 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 具有半透明颜色的触摸高亮效果?

4

2 回答 2

12

令人惊讶的是,FrameLayout 具有可用于此目的的前景属性。缺点是您必须添加一个额外的 FrameLayout 元素。实现很简单,所以在您有时间实现花哨的图像处理(对图像进行一点去色,然后应用高光)和动态构建状态可绘制对象之前,这似乎已经足够好了。

所以在我的情况下,这将是:

<FrameLayout
    android:foreground="@drawable/blue_highlight_image"
    >
  <ImageView ...>
</FrameLayout>

@drawable/blue_highlight_image 使用一个新的@color/pressed_image 值,它与@color/pressed 类似,但有一个alpha 通道,例如:#81CFEB -> #AA81CFEB。

感谢@Vang 的建议。

于 2013-11-27T22:59:48.430 回答
1

你走对了。尝试使用 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="@drawable/yourdrawable_with_colorfilter"/>
  <item android:state_pressed="true" android:drawable="@drawable/yourdrawable_with_colorfilter"/>
  <item android:drawable="@drawable/your_drawable"/>
</selector>
于 2013-11-06T08:39:50.513 回答