一起Talk Android吧(第四百一十九回:让时钟走起来)
Posted talk_8
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了一起Talk Android吧(第四百一十九回:让时钟走起来)相关的知识,希望对你有一定的参考价值。
文章目录
各位看官们,大家好,上一回中咱们说的例子是"制作时钟",这一回咱们介绍的例子是"让时钟走起来"。闲话休提,言归正转,让我们一起Talk android吧!
看官们,我们在上一章回中制作了一个时钟,不过时钟只能显示当前的时间,不能随时间变化而变化。本章回中将让时钟走起来,也就是随着时间变化而变化。
整体思路
我们把时钟当作自定义的控件,可以使用View的invalidate
()方法来刷新控件,刷新的频率为1秒,此时就会回调控件的onDraw()方法,进而更新时钟指针。在刷新控件时需要在子线程中操作,因此使用Handler机制来实现。
具体步骤
- 1.把时钟控件添加到布局中,这里使用的是完成的包名;
<com.android..ui.ClockView
android:id="@+id/id_clock_view"
android:background="@color/teal_200"
android:layout_width="400dp"
android:layout_height="800dp">
-
2.在主程序中绑定布局中的时钟控件;
//使用数据绑定来绑定布局中的控件
mClockView = mBinding.idClockView;
- 3.使用Handler机制来刷新控件;
private void initHandle()
mHandler = new UpdateTimeHandle();
mMessage = new Message();
mMessage.what = 100;
mHandler.sendMessage(mMessage);
mHandler.sendMessage(new Message());
private class UpdateTimeHandle extends Handler
@Override
public void handleMessage(@NonNull Message msg)
super.handleMessage(msg);
mClockView.invalidate();
mMessage = mHandler.obtainMessage(100);
//刷新时间为1秒
mHandler.sendMessageDelayed(mMessage,1000);
我们需要在onCreate
()方法中初始化Handler,并且在onPause
方法中remvoe Handler中的消息,以免引起内存泄漏。
分析总结
我们把时钟做成了一个控件,在其他程序中可以像使用普通控件一样去使用。因此整体上来看使用很方便。不过该控件也有一些缺点,后续我们会持续改进。
- 没有重新计算控件的长度和宽度,影响长度和宽度属性。后续我们在介绍自定义View时会修改此问题。
- 部分长度写成了固定数值,比如表盘的半径,这样会影响控件兼容,有可能换一个布局后控件显示不美观。
- 在绘制显示时间的数字时没有计算数字的宽度和高度,导致部分数字显示的位置不准确。
- 从性能角度看,我们是整体刷新控件的,这个在性能上表现不太好,比如表盘绘制完成后就不需要刷新了,只需要刷新指示时间的指针就可以,后续也会对此做性能上的优化。
以上内容是我对时钟控件的分析和总结,大家也可以发表自己的观点,欢迎大家在评论区交流与讨论。
看官们,关于Android中"让时钟走起来"的例子咱们就介绍到这里,欲知后面还有什么例子,且听下回分解!
以上是关于一起Talk Android吧(第四百一十九回:让时钟走起来)的主要内容,如果未能解决你的问题,请参考以下文章
一起Talk Android吧(第三百一十九回:Android中网络通信之TCP概述)