【发布时间】: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