我现在已经玩了半个小时了,似乎我真的错过了一些重要的事情。
注意:我已经尝试过针对这些问题的解决方案
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这些解决方案要么重新着色所有 ImageView srcs,要么根本不做任何事情(矢量仍为黑色)。
我的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:
<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&gt; 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);
结果:给出一种奇怪的颜色。 (绝对不是我想要的,它更接近原始颜色)
所有以上{Grade}的final
得到了相同的结果。
gradeObj.colorId
都不同。setColor
代替SVG是不我想要的。BaseExpandableListAdapter
如果您想了解更多信息,请在评论中提及。
答案 0 :(得分:1)
您可以使用PorterDuff.Mode.SRC_IN
或PorterDuff.Mode.SRC_ATOP
代替PorterDuff.Mode.MULTIPLY
来尝试第一种方法。
希望这有帮助。