Android中Paint.setBlendMode崩溃问题求助
问题原因
这个崩溃的根源很直接:BlendMode类是**Android 10(API Level 29)**才新增的系统API,你的LG V10系统版本应该低于API29(比如Android 7.0/7.1,对应API24/25),运行时系统找不到这个类,就触发了NoClassDefFoundError。而OnePlus 6T的系统版本至少是Android 10,所以能正常识别这个类。
解决方案
我给你两个可行的处理方案,按需选择:
方案一:兼容低版本的替代实现(推荐)
在API29之前,Android是用PorterDuff.Mode来设置Paint的混合模式的,和BlendMode中的对应模式效果一致。你只需要做个系统版本判断,分别调用对应API即可:
Paint paint = new Paint(); paint.setColor(Color.YELLOW); if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) { // Q对应API29 paint.setBlendMode(BlendMode.MULTIPLY); } else { // 低版本用旧的Xfermode实现,效果和Multiply一致 paint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.MULTIPLY)); }
这样修改后,低版本设备会走旧API,高版本走新API,既能保留高亮效果,又不会崩溃。
方案二:升级最低兼容版本(不推荐,除非你放弃低版本用户)
如果你的应用不需要兼容API29以下的设备,可以直接把build.gradle里的minSdkVersion改成29:
defaultConfig { // ...其他配置 minSdkVersion 29 // ...其他配置 }
但这个方案会让你的应用无法安装到API28及以下的设备上,所以一般不推荐。
补充说明
PorterDuff.Mode.MULTIPLY和BlendMode.MULTIPLY的混合效果是完全一致的,只是API版本不同,替换后你的文本高亮效果不会有任何变化。
内容的提问来源于stack exchange,提问作者Herman Hansson Söderlund
相关产品推荐
相关产品推荐

