没有合适的资源?快使用搜索试试~ 我知道了~
对于一个安卓开发者而言,在学习自定义View的过程中,肯定有尝试去实现一个时钟控件,本文就看看如何快速的实现一个靠谱的时钟控件。 准备工作 在开始编码之前,我们需要明确实现时钟控件过程中,涉及到一些要点和可能遇到的阻碍。这里从几个方面来说: 表盘,表盘由圆形和刻度组成,两者均需绘制 指针,主要是时针、分针、秒针。其中时针随着时间推移,会产生细微的位移;分针每分钟移动一格;秒针每秒钟移动一格。 时间的同步 设计 首先我们需要设计刻度的格式,主要包括当为整点时刻时,对应位置的刻度线最好长一点。 其次三个指针的长度也应该不一样,要保持时针最短,秒针最长。 最后,我们需要实现秒针每秒钟移动一格的动画效
资源推荐
资源详情
资源评论
如何实现一个时钟控件如何实现一个时钟控件
对于一个安卓开发者而言,在学习自定义View的过程中,肯定有尝试去实现一个时钟控件,本文就看看如何快速的实现一个
靠谱的时钟控件。
准备工作准备工作
在开始编码之前,我们需要明确实现时钟控件过程中,涉及到一些要点和可能遇到的阻碍。这里从几个方面来说:
表盘,表盘由圆形和刻度组成,两者均需绘制
指针,主要是时针、分针、秒针。其中时针随着时间推移,会产生细微的位移;分针每分钟移动一格;秒针每秒钟移动一格。
时间的同步
设计设计
首先我们需要设计刻度的格式,主要包括当为整点时刻时,对应位置的刻度线最好长一点。
其次三个指针的长度也应该不一样,要保持时针最短,秒针最长。
最后,我们需要实现秒针每秒钟移动一格的动画效果
就以上要点中,我们需要关注的是如何将圆等分60份;如何在圆弧上向圆心方向画出刻度;如何实现秒针移动的动画效果。
接下来,我们就这些问题,来看下具体如何实现
实现实现
控件的实现其实很简单,采用继承View,实现onDraw方法的方式。先绘制表盘,再绘制指针。
表盘主要就是由一个圆组成,然后我们需要在圆弧上画出刻度。在获取圆弧上的刻度位置时,我们需要用到三角函数的知识,
通过正余弦来计算每个刻度的起始坐标和结束坐标。确定了每个刻度在圆弧上的起始坐标和圆内的结束坐标,我们就可以绘制
一条直线来代表指针
在计算起止坐标时,我们主要通过下面的公式来获取,其中mRadius是圆的半径,moveDegree是基于12点钟位置顺时针移动的角
度
float offY = (float) (mRadius - mRadius * Math.cos(Math.toRadians(moveDegree)));
当确定刻度线的起始位置后,我们就可以根据刻度线预设的长度来计算它的结束位置了(HOUR_SCALE_LENGTH是默认时针长
度)。
float endY = (float) (offY + HOUR_SCALE_LENGTH * Math.cos(Math.toRadians(moveDegree)));
当获取刻度位置逻辑确定后,我们就可以来循环绘制60个刻度了,绘制代码可以参考如下片段:
/**
* 绘制刻度盘,主要包括:
* 1、表盘圆形
* 2、60个刻度
*/
private void drawPanel(Canvas canvas) {
if (!isPanelDraw) {
// 获取对应的参数属性:控件宽高,矩形内切圆半径,内切圆圆心位置,三个指针轨迹圆的半径等。
int measuredHeight = getMeasuredHeight();
int measuredWidth = getMeasuredWidth();
// 表盘内切圆半径
mRadius = Math.min(measuredHeight, measuredWidth) / 2;
// 表盘圆心x y 坐标
mCenterX = measuredWidth / 2;
mCenterY = measuredHeight / 2;
// 时针轨迹圆半径:内切圆的一半
mHourHandRadius = (int) (mRadius * 0.50);
// 分针轨迹圆半径:内切圆的6/10
mMinuteHandRadius = (int) (mRadius * 0.60);
// 秒针轨迹圆半径:内切圆的8/10
mSecondHandRadius = (int) (mRadius * 0.80);
}
// 画笔设置
mPanelPaint.setStyle(Paint.Style.STROKE);
mPanelPaint.setStrokeWidth(2);
// 绘制表盘内切圆
canvas.drawCircle(mCenterX, mCenterY, mRadius, mPanelPaint);
// 绘制圆心位置
mPanelPaint.setStyle(Paint.Style.FILL);
资源评论
weixin_38531788
- 粉丝: 4
- 资源: 913
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功