作者热门文章
- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我使用以下行来更改 VectorDrawable 的颜色:
mydrawable.getBackground().setColorFilter(颜色, PorterDuff.Mode.SRC_ATOP)
虽然现在已弃用,但效果很好。文档建议我使用:
mydrawable.getBackground().setColorFilter(new BlendModeColorFilter(color, PorterDuff.Mode.SRC_ATOP))
不过,BlendModeColorFilter
仅在 API29 上可用。在检查了已弃用方法的来源后,我意识到它调用了:
新的 PorterDuffColorFilter()
所以,我继续使用:
mydrawable.getBackground().setColorFilter(new PorterDuffColorFilter(color, PorterDuff.Mode.SRC_ATOP))
着色成功了。这是已弃用方法的正确替代方法,还是我必须在 API29 上使用 BlendModeColorFilter?
谢谢。
最佳答案
试试这个:
public class MyDrawableCompat {
public static void setColorFilter(@NonNull Drawable drawable, @ColorInt int color) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) {
drawable.setColorFilter(new BlendModeColorFilter(color, BlendMode.SRC_ATOP));
} else {
drawable.setColorFilter(color, PorterDuff.Mode.SRC_ATOP);
}
}
}
还有这个:
MyDrawableCompat.setColorFilter(mydrawable.getBackground(), color);
更新:只需使用最新版本的 core androidx library和这段代码:
mydrawable.colorFilter = BlendModeColorFilterCompat.createBlendModeColorFilterCompat(color, BlendModeCompat.SRC_ATOP)
关于android - setColorFilter 在 API29 上被弃用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56716093/
我是一名优秀的程序员,十分优秀!