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

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

概述在我构建的应用程序中,我注意到 ImageViews没有在运行新 Android Lollipop的设备上着色.这是以前在旧版 *** 作系统上正常工作的代码: <ImageView android:layout_width="40dp" android:layout_height="40dp" android:layout_grav 在我构建的应用程序中,我注意到 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的默认颜色,也许还有别的东西),但如果你有了这个想法,你可以根据自己的需要使用它 – 案件.

总结

以上是内存溢出为你收集整理的着色ImageView无法在Android 5.0上运行.想法如何让它再次运作?全部内容,希望文章能够帮你解决着色ImageView无法在Android 5.0上运行.想法如何让它再次运作?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://www.outofmemory.cn/web/1136500.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-30
下一篇 2022-05-30

发表评论

登录后才能评论

评论列表(0条)

保存