使用ShapedDrawable将ColorFilter应用于ImageView

时间:2012-04-11 21:42:13

标签: android drawable android-imageview colorfilter shapedrawable

我有一个ImageView android:src设置为ShapedDrawable,即一个白色圆圈。我想要的是在响应某些事件的运行时将此ImageView着色。 imgView.setColorFilter似乎是解决方案,但在使用此(尝试不同的参数)后,图像变得不可见(我在屏幕上看不到它)。

如何解决这个问题?是否有更好的方法来制作彩色圆圈?

4 个答案:

答案 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}}

视觉结果:

Screenshot of colored circles

答案 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();