首页 文章

如何在(可扩展)ListAdapter下设置ImageView的色调?

提问于
浏览
0

序言

我现在已经玩了半个小时了,似乎我真的错过了一些重要的东西 .

注意:我已经尝试过这些问题的解决方案如何在按钮上更改矢量可绘制路径的颜色单击如何在android中以编程方式为图像视图设置色调?更改ImageView源这些解决方案要么重新着色所有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> 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 对于每个childView都不同 .

  • 使用形状和 setColor 而不是SVG是 not 我想要的 .

  • 目前仅使用API lvl 26进行测试

  • MyAmazingAdapter.java扩展 BaseExpandableListAdapter

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

1 回答

  • 1

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

    PorterDuff.mode

    希望这可以帮助 .

相关问题