当前位置: 首页 > 知识库问答 >
问题:

将ColorFilter应用于具有ShaedDrawable的ImageView

高泳
2023-03-14

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

这个怎么解决?还有没有更好的办法有色圈?

共有3个答案

潘翊歌
2023-03-14

您可以在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上测试

薄龙光
2023-03-14

如果要更改图像颜色,请使用

PorterDuff.Mode.SRC_ATOP instead
PorterDuff.Mode.MULTIPLY

在上面的示例中。

翟俊远
2023-03-14

好吧,我用这个快速玩了一下,注意到你的圆圈消失的问题。在没有描述您具体尝试了什么的情况下,我假设您还没有尝试将颜色过滤器设置为< code>Drawable本身?(与< code>ImageView相反,后者似乎只适用于< code>BitmapDrawable。

以下语句对于以白色为初始颜色的xml声明的ShapeDrawable非常有效:

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 );

完整的< code>ShapeDrawable(我在< code>ImageView上设置了大小,见下文)

<shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="oval" >
    <solid android:color="@android:color/white" />
</shape>

其中一个图像视图作为示例:

<ImageView
    android:id="@+id/circle_red_imageview"
    android:layout_width="40dp"
    android:layout_height="40dp"
    android:padding="5dp"
    android:src="@drawable/circle_white" />

视觉结果:

 类似资料:
  • 如何简单地将ColorFilter应用于位图、图像等。在Android上,这是一个一行程序:对于Windows来说,我只在顶部编译的示例中找到了giant来以各种方式操作图像。这对我来说太多了。我不想同时操作每一个像素或类似的,我只是有一个白色图标的图像,我希望它变成绿色或编程方式。

  • 我有一个面具文件(黑白图像)。我只想将亮度变化应用在那个面具的白色部分。在Android中如何做到这一点? 下面是一个蒙版图像和我想要得到的结果。

  • 问题内容: 您可以使用两个不同的列中的值作为参数来制作python pandas函数吗? 我有一个函数,如果两列的值在相同范围内,则返回1。否则返回0: 我希望第一个参数成为数据框中的一列,以使函数将采用该列中每一行的值。例如是,第二个参数是df [‘ResponseCol’]`。我希望结果是数据框中的新列。我遇到了几个 回答了类似问题的线程,但看起来这些参数是变量,而不是数据帧行中的值。 我尝试

  • 我正在尝试为封装在父元素中但具有不同元素名称的元素使用应用模板。在我的示例中,我想将其应用于元素,并选择其中任何一个具有值。此任务是我问的另一个问题的延续。我使用以下XML 我正在使用java应用以下XSLT 1.0。在上面的示例中,我希望模板应用于firstName和lastName,但在firstName中显示值,因为它是第一个有值的。 Java代码是Oracle tuorial页面示例中的S

  • 问题内容: 我是jQuery新手。我有以下代码: 它仅适用于带有的第一个,不适用于其他。如何将其应用于具有相同ID的所有元素? HTML: 问题答案: 元素的ID在中应该是唯一的。两个或多个元素具有相同的ID无效html。要在各个元素之间共享功能,请给它们分配一个公共类,而不要给它们相同的ID。如果您不能为它们分配一个通用类,则下面的解决方法将使您可以选择具有相同id属性的元素: 使用相同的ID