Android 夜间模式切换,颜色渐变效果实现

本文介绍如何实现在Android应用中平滑切换夜间模式,通过颜色渐变效果,提供了一种使用Fragment动态加载和恢复状态的实现方式,详细讲解了样式文件、主题设置、截图和动画等方面的技术细节。
摘要由CSDN通过智能技术生成

转载请标明出处:
http://blog.csdn.net/tyzlmjj/article/details/49255019
本文出自:【M家杰的博客】

概述
做安卓开发有一段时间了,夜间模式的切换在各种APP中见多了,大部分都是点一下切换然后马上改变配色,很是生硬,从来都没去注意过!然后有一天我点了下知乎日报的夜间模式切换,直接被亮瞎狗眼!什么?这还能渐变过去?不行了,得去研究研究……然后就有了这篇博客,主要讲解下我自己如何实现这个切换时渐变的效果。


Demo

先来看看最后实现的效果
这是5.0及以上版本的效果,主要是状态栏也实现了渐变,5.0以下状态栏是不修改的
5.0及以上的效果


如何实现

开发程序代码不是重点,关键是知道可以做到什么,如何做到。
SO,现在来讲解下这个效果的大体实现思路。
首先,改变主题比较简单的方法是直接用setTheme()。其它的方法呢我不知道!请恕在下才疏学浅
用setTheme()之前需要先写好样式文件xml,attr、style等,这些后面再讲。
然后写完样式文件,你在Activity中兴匆匆的调用setTheme()也是没用的同学!(如果在setContentView()方法之前调用是可以改变主题的,因为布局还没生成)
setTheme()不起作用的原因是Activity需要重新生成才能自动刷新UI,这个完全重新生成的过程用户体验肯定坑爹。
网上比较常见的处理方法是自己遍历一下目前界面上需要改变颜色的控件,然后手动设置一遍颜色。感觉这样很LOW

我最后想到的让seTheme()生效的方法是:
在Activity中动态加载1个fragment,需要的布局都放在fragment中,然后切换模式的时候销毁现有的fragment ,在动态加载一个新的fragment,用Activity中自己存储的数据去恢复Fragment状态(恢复状态按布局复杂度难易不同),并且在恢复的过程中,用一个ImageView覆盖在上面等恢复完了再渐变透明度(达到渐变效果)。

理一下思路,总共需要的步骤:
1.写好样式和布局文件。
2.切换时调用setTheme()
3.截取当前屏幕的图片放到ImageView中并覆盖在fragment上面
4.销毁fragment,扭一个fragment
5.恢复fragment的状态
6.ImageView透明度渐变达到视觉上的切换效果
7.收工回家


样式文件

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值