序言
我已经g00gling了半个小时了,看来我真的错过了一些重要的东西。
Note: I've already tried the solutions for these questions
How to change color of vector drawable path on button click
How to set tint for an image view programmatically in android?
Changing ImageView sourceThese solutions either recolor ALL ImageView srcs or they don't do anything at all (vector remains black).
我的绘图是来自 Material 图标目录的 vector 资源:
<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 :
<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);
结果:什么也不做。
尝试 II。
MyAmazingAdapter.java - getChildView(...)
DrawableCompat.setTint(gradeBullet.getDrawable(), ContextCompat.getColor(context, R.color.myColor));
结果:重新着色所有内容。
尝试 III。
MyAmazingAdapter.java - getChildView(...)
VectorDrawableCompat drawable = (VectorDrawableCompat) gradeBullet.getDrawable();
drawable.setTint(ContextCompat.getColor(context, gradeObj.colorId));
gradeBullet.setImageDrawable(drawable);
结果:给出奇怪的颜色。 (绝对不是我想要的,更接近原来的颜色)
尝试 IV。
以上所有内容都带有final
到gradeBullet,得到了相同的结果。
一些其他信息
gradeObj.colorId
对于每个 subview 都是不同的。- 使用形状和
setColor
而不是 SVG 不是我想要的。 - 目前仅使用 API lvl 26 进行测试
- MyAmazingAdapter.java 扩展
BaseExpandableListAdapter
如果您想了解更多信息,请在评论中提及。
最佳答案
您可以尝试使用 PorterDuff.Mode.SRC_IN
或 PorterDuff.Mode.SRC_ATOP
而不是 PorterDuff.Mode.MULTIPLY
来尝试第一种方法。
希望这有帮助。
关于java - 如何在(Expandable)ListAdapter下设置ImageView的色调?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45652954/