android 闪屏动态界面,Android开发 关于避免切换主题时闪屏的几种方式

本文介绍了如何在Android应用中避免切换主题时出现的闪屏现象。方法一是通过属性动画配合ArgbEvaluator渐变颜色,但代码量较大且对特殊控件支持有限。方法二是利用startActivity创建新Activity并加上动画,通过Intent传递数据以还原界面状态,实现平滑过渡,代码量较少,效果更佳。
摘要由CSDN通过智能技术生成

在activity中调用setTheme来切换夜间模式的方法可能大家有看过相关的文章了,但是调用setTheme设置的主题后界面并没有变化,这时需要调用activity的recreate方法另设置的主题生效,但是试过的朋友们都知道,activity调用recreate方法以后会有一瞬间的闪屏今天写这篇文章的主题主要是关于如何避免setTheme切换主题后调用recreate的闪屏

关于如何通过改变theme更换主题的文章如果您还没有看过的话可以看一下这篇文章或者自行搜索一下recreateAAffA0nNPuCLAAAAAElFTkSuQmCC

recreate.gif

效果实现

1.属性动画 实现

使用属性动画配合ArgbEvaluator这个类来对所有需要变换颜色的View设置一个渐变动画属性动画

AAffA0nNPuCLAAAAAElFTkSuQmCC

anim.gif

|

这个方法的缺点有一下几个:只要是需要有颜色变化的View要设置id并通过findViewById获取其对象,增加代码量,大家都知道设置id写findViewById有多蛋疼吧(笔者最讨厌设置控件的id了)

每一个设置的attr的color就需要写一个属性动画,代码量又增多了

RecyclerView或ListView还有某些特殊控件如何进行颜色改变(如MD风格的Button RadioButton Switch 等不能通过设置background改变颜色的控件)

接下来来看一下代码中如何实现吧

通过以下方法获取主题中设置的attrs对应颜色/**

* @param theme 需要获取attrs颜色的theme

* @param id 需要获取的attrs颜色id

* @return color

*/public static int getColorFromTheme(Resources.Theme theme, @AttrRes int id)

{

TypedValue ty

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值