着色ImageView无法在Android 5.0上运行.想法如何让它再次运作?

在我构建的应用程序中,我注意到 ImageViews没有在运行新 Android Lollipop的设备上着色.这是以前在旧版操作系统上正常工作的代码
<ImageView
            android:layout_width="40dp"
            android:layout_height="40dp"
            android:layout_gravity="bottom|right"
            android:contentDescription="@string/descr_background_image"
            android:src="@drawable/circle_shape_white_color"
            android:tint="@color/intent_circle_green_grey" />

这是在ImageView中加载的drawable:

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="oval" >
    <gradient android:startColor="@color/white" android:endColor="@color/white"
        android:angle="270"/>
</shape>

再次,这在运行JellyBean / Kitkat的设备上正常工作,但色调对运行Lollipop的设备没有影响.任何想法如何解决它?这是操作系统中的错误,还是应该以不同的方式开始对图像进行着色?

解决方法

根据@alanv评论,这里有针对这个bug的hacky修复.基本思路是扩展ImageView并在通胀后立即应用ColorFilter:
public class TintimageView extends ImageView {

    public TintimageView(Context context,AttributeSet attrs) {
        super(context,attrs);

        initView();
    }

    private void initView() {
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
            ColorStateList imageTintList = getimageTintList();
            if (imageTintList == null) {
                return;
            }

            setColorFilter(imageTintList.getDefaultColor(),PorterDuff.Mode.SRC_IN);
        }
    }
}

正如你可能猜到的那样,这个例子有些限制(在通胀色调不会更新之后的Drawable设置,只使用ColorStateList的认颜色,也许还有别的东西),但如果你有了这个想法,你可以根据自己的需要使用它 – 案件.

相关文章

这篇“android轻量级无侵入式管理数据库自动升级组件怎么实现...
今天小编给大家分享一下Android实现自定义圆形进度条的常用方...
这篇文章主要讲解了“Android如何解决字符对齐问题”,文中的...
这篇文章主要介绍“Android岛屿数量算法怎么使用”的相关知识...
本篇内容主要讲解“Android如何开发MQTT协议的模型及通信”,...
本文小编为大家详细介绍“Android数据压缩的方法是什么”,内...