frameworks关于系统Android-R和Android-S不一样导致Ripple标签实现水波纹(涟漪)效果发生改变

147 阅读1分钟

项目场景:

突然有一天测试小MM跑过来跟我说为什么APP上的水波纹效果变成这样了,之前在Android11版本机器上跑还好好的,说得我一脸懵,同一个APP也就是同一套代码在不同版本上跑咋会成这样效果呢,忽然灵光一闪,可能是谷歌升级版本改了源码,这是bug呀。心里暗暗自喜,自己也能发现谷歌那帮大牛写的代码bug了,但是压力却给到我这边了,因为很多项目都使用了Ripple标签实现涟漪效果,如果重新构造,工作量是巨大的,那到底该怎么解决呢?

问题描述:

Android11效果图

25527_1.gif

Android12效果图

25527_2.gif

代码展示

    <selector>
        <item android:state_focused="true" android:drawable="@drawable/audi_mib3_icon_bt_d2"/>
        <item android:state_selected="true" android:drawable="@drawable/audi_mib3_main_icon_bt_sel"/>
        <item android:state_pressed="true" android:drawable="@drawable/audi_mib3_main_icon_bt_n"/>
        <item android:drawable="@drawable/audi_mib3_main_icon_bt_n"/>
    </selector>
</item>

原因分析:

通过Android11跟Android12源码比对,发现只有这个文件有较大差异–RippleDrawable.java 通过外网搜索也有人反应过此问题,但是没有提供解决方法,只能靠自己了。

解决方案:

目前已确定只要比对Android11跟Android12源码这个RippleDrawable.java文件的差异,不要覆盖,否则编译不过去,要看着哪些可以保存下来,就能解决此问题了。

最后,感谢大家阅读完这篇文章,希望能对你们有所助益。如有任何疑问,欢迎在下方评论区留言,我们一起交流学习,共同成长!