我有一个ListView,其中每个项目都包含一个ImageView和一个TextView,当选择一个项目时,我有一个选择器,将整个项目的背景设置为强蓝色。
我想要的是,当选择列表项时,我想将ImageView的前景色设置为白色。
这是我想要实现的目标
这是设备上的当前状态
选择器的代码
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item
android:state_selected="true"
android:drawable="@color/strong_blue" />
<item android:drawable="@android:color/transparent" />
</selector>
这是OnItemClickListener的代码
void onItemClick(AdapterView<?> parent, View view, int position, long arg3) {
view.setSelected(true);
ImageView imageView = (ImageView) view.findViewById(R.id.wishListDrawerImageView);
imageView.setColorFilter(Color.WHITE, android.graphics.PorterDuff.Mode.MULTIPLY );
}
先谢谢。
更新
谢谢大家的好答案,但我已经考虑过第二个版本的图像是白色的,但不幸的是这些图标是动态分配的,我无法预测哪个图像将在ListView中显示,因此我无法设置图像的白色版本。
答案 0 :(得分:1)
您无法设置图像的“前景色”,因为没有这样的东西。你必须切换图像。您可以更改图像的颜色,如here所述。我更喜欢第一种解决方案。
然而,在我看来,一个更简单的解决方案是在资源文件夹中保留两个不同的图像 - 一个为灰色,另一个为白色,并在两者之间切换。
答案 1 :(得分:0)
你可以使用layer-list drawable from this
答案 2 :(得分:0)
将listSelector设置为您想要的蓝色类型选择器,并在图像视图中设置具有白色图像的选择器并将其设置为imageview的背景。
imageview选择器的编写方式与listselector的编写方式相同,只是drawables会有所不同。
希望有所帮助!
编辑:
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item
android:state_pressed="true"
android:drawable="@drawable/white_image" />
<item android:drawable="@drawable/regular_image" />
</selector>
答案 3 :(得分:0)
您应该使用 PorterDuff.Mode.MULTIPLY 的 PorterDuff.Mode.SRC_ATOP