【问题标题】:How to set ImageView's tint under (Expandable)ListAdapter?如何在 (Expandable)ListAdapter 下设置 ImageView 的色调?
【发布时间】:2017-08-13 16:20:20
【问题描述】:

序言

我已经玩了半个小时了,看来我真的错过了一些重要的事情。

注意:我已经尝试过这些问题的解决方案

How to change color of vector drawable path on button click
How to set tint for an image view programmatically in android?
Changing ImageView source

这些解决方案要么重新着色 ALL ImageView src,要么根本不做任何事情(矢量保持黑色)。

我的 drawable 是材质图标目录中的矢量资源:

<vector xmlns:android="http://schemas.android.com/apk/res/android"
    android:width="24dp"
    android:height="24dp"
    android:viewportWidth="24.0"
    android:viewportHeight="24.0">

    <path
        android:fillColor="#FF000000"
        android:pathData="M12,2C6.48,2 2,6.48 2,12s4.48,10 10,10 10,-4.48 10,-10S17.52,2 12,2z" />
</vector>

我的图像视图:

<ImageView
        android:id="@+id/gradeBullet"
        android:layout_width="25dp"
        android:layout_height="25dp"
        android:layout_alignParentStart="true"
        android:layout_alignParentTop="true"
        android:layout_marginStart="25.5dp"
        android:layout_marginTop="25.5dp"
        app:srcCompat="@drawable/importantgrade" />

我想用 *Compat 来做这件事,因为我还想支持早期的 API (API>17)。

我的 ImageView:ImageView gradeBullet = convertView.findViewById(R.id.gradeBullet);

试试我。

MyAmazingAdapter.java - getChildView(...)

gradeBullet.setColorFilter(ContextCompat.getColor(context, gradeObj.colorId), PorterDuff.Mode.MULTIPLY);

结果:什么都不做。

试一试。

MyAmazingAdapter.java - getChildView(...)

DrawableCompat.setTint(gradeBullet.getDrawable(), ContextCompat.getColor(context, R.color.myColor));

结果:重新着色所有内容。

试一试。

MyAmazingAdapter.java - getChildView(...)

VectorDrawableCompat drawable = (VectorDrawableCompat) gradeBullet.getDrawable();
drawable.setTint(ContextCompat.getColor(context, gradeObj.colorId));
gradeBullet.setImageDrawable(drawable);

结果:给出一种奇怪的颜色。 (肯定不是我想要的,更接近原色)

尝试 IV。

以上所有用final 到gradeBullet,得到相同的结果。

其他一些信息

  • gradeObj.colorId 对于每个 childView 都是不同的。
  • 使用形状和 setColor 代替 SVG 不是我想要的。
  • 目前仅使用 API lvl 26 进行测试
  • MyAmazingAdapter.java 扩展 BaseExpandableListAdapter

如果您想了解更多信息,请在评论中提及。

【问题讨论】:

    标签: java android android-vectordrawable


    【解决方案1】:

    您可以尝试使用PorterDuff.Mode.SRC_INPorterDuff.Mode.SRC_ATOP 而不是PorterDuff.Mode.MULTIPLY 的第一种方法。

    PorterDuff.mode

    希望这会有所帮助。

    【讨论】:

    • 不客气,我添加文档链接以获得更多解释:)
    猜你喜欢
    • 2017-10-13
    • 2016-12-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多