我有一个ImageView
android:src
设置为ShapedDrawable
,即一个白色圆圈。我想要的是在响应某些事件的运行时将此ImageView
着色。 imgView.setColorFilter
似乎是解决方案,但在使用此(尝试不同的参数)后,图像变得不可见(我在屏幕上看不到它)。
如何解决这个问题?是否有更好的方法来制作彩色圆圈?
答案 0 :(得分:101)
好吧,我快速玩了一下,注意到你的圆圈问题消失了。如果你没有描述你尝试过什么,我认为你还没有尝试将滤色器设置为Drawable
本身吗? (与ImageView
相对,BitmapDrawable
似乎只适用于ShapeDrawable
s。
以下语句对于xml声明的ImageView redCircle = (ImageView) findViewById(R.id.circle_red_imageview);
ImageView greenCircle = (ImageView) findViewById(R.id.circle_green_imageview);
ImageView blueCircle = (ImageView) findViewById(R.id.circle_blue_imageview);
// we can create the color values in different ways:
redCircle.getDrawable().setColorFilter(Color.RED, PorterDuff.Mode.MULTIPLY );
greenCircle.getDrawable().setColorFilter(0xff00ff00, PorterDuff.Mode.MULTIPLY );
blueCircle.getDrawable().setColorFilter(getResources().getColor(R.color.blue), PorterDuff.Mode.MULTIPLY );
非常合适,白色为初始颜色:
ShapeDrawable
完整性ImageView
:(我在<shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="oval" >
<solid android:color="@android:color/white" />
</shape>
上设置尺寸,见下文)
ImageView
其中一个<ImageView
android:id="@+id/circle_red_imageview"
android:layout_width="40dp"
android:layout_height="40dp"
android:padding="5dp"
android:src="@drawable/circle_white" />
例如:
{{1}}
视觉结果:
答案 1 :(得分:13)
如果要更改图像颜色,请使用
PorterDuff.Mode.SRC_ATOP instead
PorterDuff.Mode.MULTIPLY
在上面的例子中。
答案 2 :(得分:6)
您可以在xml中的ImageView中使用属性android:tint
。
示例:
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/your_drawable"
android:tint="@color/your_color" />
在Android 4.1.2和6.0.1上测试
答案 3 :(得分:0)
使用此库可以非常简单地完成: https://github.com/jrvansuita/IconHandler
它会像这样工作:
Icon.on(yourImageView).color(R.color.your_color).icon(R.mipmap.your_icon).put();