在《自带天气APP太臃肿?手写一个换掉它》中,打造了一个基本可以用的天气APP,实现了实时位置天气查询,搜索添加指定区域等功能。当然也实现了亮色和暗色两种主题,可以根据手机的主题自动切换(这里被获取darkMode坑的不行,不能在每个页面都获取,只有一个页面的回调函数被调用,最终只能塞全局变量里面了),但是我对这个颜色其实是不太满意的。虽然本意是想打造一个轻量,简约的天气APP,但是现在的感觉太单调了,尤其是实时天气那里。于是我想着给这个实时天气加个背景颜色,一种天气对应一种颜色,让这个天气APP更好看一些。
经过一番思考后,我决定开始动手修改。
首先,我想一进来看到的就是实时天气,不想看到下面的那些24小时天气,7日天气什么的,第一眼印象就是要简单,简约,如果有需要看下面那些信息,就往上滑动就行了,这个实现起来比较简单,将实时天气的高度设置成100%就行了。
嗯,看着简单了许多。接下来就是设置背景色了,背景需要根据不同天气显示不同颜色,我加了一个枚举类,里面设置了大致的几种天气场景和颜色,只要在查询天气的时候根据天气情况去找到对应的场景枚举返回给页面显示就行了,还有把状态栏和导航栏的颜色换掉,和背景色一致,让整体更加沉浸,查阅资料,harmonyos提供了这样的API可以直接用,不过状态栏和导航栏的前景色API6就不能设置了,得API8才行,状态栏和导航栏的前景色就先放着。
看起来好一些了,然后需要设置其他场景的背景色,但是这个调色比较麻烦,因为电脑上预览的颜色和手机上显示的颜色有一点色差,每次改一个颜色编译一下很费劲,于是乎我想做一个颜色配置的页面,可以直接在手机上实时预览调整,这样效率会高很多,预览页面需要满足以下几点:
- 可以选择不同的天气场景,包含晴天,多云,阴天,雨天,雪天,雾天,冰雹,扬尘这几类
- 可以选择白天还是夜晚,白天和夜晚可以设置不同的背景色
- 可以针对红,绿,蓝三基色配置
- 可以保存配置好的颜色,优先使用自定义的颜色,如果没有自定义,则使用默认的背景色
- 上半部分实时预览配置效果
上半部分的实时预览只要把天气页面的组件拿过来用就可以了,下半部分就是几个按钮和三基色的slider,也比较简单,实现效果如下:
到这,背景色配置功能就好了。
接下来,就是给各个场景加上动画,设想了这几种场景的动画
- 晴天:白天一个发光的太阳,夜晚一个发光的月亮和一些随机的星星
- 多云:白天几个随机的云彩缓慢移动,夜晚几个随机的云彩缓慢移动和一些随机的星星
- 阴天:没有什么东西,就纯背景色
- 雨天:下落的雨水,矩形,速度比较快
- 雪天:下落的雪花,圆形,速度比较慢
- 雾天:没有什么东西,就纯背景色
- 冰雹:下落的冰块,菱形,速度中等
- 扬尘:没有什么东西,就纯背景色
还有就是让布局撑到状态栏和导航栏,不然下雨下雪这种不是从屏幕最上方开始的,就很怪,做好后就是这样
应用到天气页面后,就是这样
天气背景这块大致就这么多了,后面主要就是小修小补的了,修复BUG,还有解决性能的问题。本来就是要做一个轻量的APP,所以功能上变动不会太大了。