一起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概述)

一起Talk Android吧(第四百一十回:绘制曲线)

一起Talk Android吧(第四百一十八回:制作时钟)

一起Talk Android吧(第四百一十一回:绘制文字)

一起Talk Android吧(第四百一十六回:绘制正弦波总结)

一起Talk Android吧(第四百一十二回:Math类常用方法介绍)