一起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中"让时钟走起来"的例子咱们就介绍到这里,欲知后面还有什么例子,且听下回分解!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

talk_8

真诚赞赏,手有余香

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值