Android自定义View:另一种实现手表指针转动的方法

自定义View之模仿AppleWatch手表 转载请注明地址: 最近想自定义View写个手表,然后在网上看到AppleWatch的一个手表界面很简洁漂亮,那就用自定义View来模仿实现它吧。 文章目录一、自定义属性二、构造方法三、解析自定义属性四、初始化画笔五、测量大小六、获取最终的尺寸七、绘制八、绘制表盘九、绘制刻度十、绘制外圈数字十一、绘制内圈数字十二、绘制指针十三、绘制时针十四、绘制分针十五、绘制秒针十六、源码地址 先来看看我们要实... 阅读详情

By Long Luo

在上一篇Android自定义View:如何实现一个模拟时钟?中我们实现了一款模拟时钟。在上一篇中,我们使用了Canvas中的canvas.rotate()方法让坐标系旋转从而绘制出指针。

但是,其实我们也可以使用另外一种方法去实现指针绘制,这种更直观,更容易理解。

一. 绘制指针

要绘制指针,需要知道指针的起点和终点,而起点就是圆心,终点就需要根据指针的sin及cos值及圆心进行对应的计算。

1. 弧度

要计算指针对应的sin及cos值,区别于上一篇的角度,这一篇我们使用弧度。具体弧度是什么以及角度弧度换算关系可自行Google。

下面我们给出对应指针弧度如何计算的,如下所示:

        float secRot = mCalendar.get(Calendar.SECOND) / 30f * (float) Math.PI;
        float minRot = mCalendar.get(Calendar.MINUTE) / 30f * (float) Math.PI;
        float hrRot = (((mCalendar.get(Calendar.HOUR_OF_DAY) + (mCalendar.get(Calendar.MINUTE) / 60f))) / 6f) * (float) Math.PI;

2. 绘制

知道对应指针的弧度之后,我们就很容易计算出对应的指针坐标了,那么绘制也变得简单了,如下所示:

        float secLength = centerX - 60;
        float minLength = centerX - 80;
        float hrLength = centerX - 100;

        float hrX = (float) Math.sin(hrRot) * hrLength;
        float hrY = (float) -Math.cos(hrRot) * hrLength;
        canvas.drawLine(centerX, centerY, centerX + hrX, centerY + hrY, paintHour);

        float minX = (float) Math.sin(minRot) * minLength;
        float minY = (float) -Math.cos(minRot) * minLength;
        canvas.drawLine(centerX, centerY, centerX + minX, centerY + minY, paintMinute);

        float secX = (float) Math.sin(secRot) * secLength;
        float secY = (float) -Math.cos(secRot) * secLength;
        canvas.drawLine(centerX, centerY, centerX + secX, centerY + secY, paintSecond);

3. 小插曲

开发完成之后,发现了一个Bug,指针一直不动,打印Log发现对应的弧度一直不变,那么很明显就是时间没有刷新,在计算弧度前,设置为当前时间即可。

        mCalendar.setTimeInMillis(System.currentTimeMillis());

二. 界面刷新

界面刷新也可以不使用Activity中使用Handler去实现,而直接在自定义View中void onDraw(Canvas canvas)方法中调用postInvalidateDelayed()实现界面自动刷新,更简洁,更优雅。

        //刷新
        postInvalidateDelayed(1000);

通过上述方法,我们就成功的让时钟转起来了。

下一次,你就把TA用在你的一些项目中去吧!

By Long Luo 2016-08-24 10:39 at Shenzhen.

android 自定义view实现表盘效果 阅读详情

相关推荐

Android圆盘旋转指针

模拟网络测试器写的一款Android旋转指针,带有动画效果,希望能有所帮助

安卓自定义View实现钟表

之前实现过html5版的钟表,html5也有一个画板属性Canvas,相对于安卓的Canvas来说html5的功能要强大的多,就拿钟表的实现,html5要方便简单的多,而安卓实现起来则非常复杂,像指针转动,html5可以画一条线,然后可以用这条线旋转一个弧度即可,而安卓必须是已知起点坐标和终点坐标,这就需要精确计算起始坐标了。先看下效果图,因为是图静态的,动态图也懒得做,所以看个大致效果即可,具体

白玉梁的专栏 2630

android实现指针偏转仿汽车速度转盘效果

android实现图片的偏转,点击相应按钮,可以相应偏转,不点击时候,会平滑复原。

android 指针动画转动

类似码表指针转动动画

lizhong 842

android转盘抽奖指针转动

对android转盘抽奖。实现指针转动抽奖!

html5 canvas 3D手表旋转展示动画特效

这是一款html5 canvas制作的3D手表旋转展示动画特效,获取的是本地时间,可以鼠标拖动控制旋转。

Android-自定义幸运抽奖转盘

效果图:好久没有写博客了,在帮朋友修改项目的时候偶然发现了抽奖转盘,觉得挺好玩儿,就自己写了一个,为此我还特意贡献出了自己的女神们,哈哈。。。 项目参考了鸿洋的博客,在此特别感谢鸿洋大神的帮助,参考博客:http://blog.youkuaiyun.com/lmj623565791/article/details/41722441这个自定义控件与鸿洋所写的不同点在于: 鸿洋牌抽奖转盘实现方式: 1.鸿洋采

qq_23286245的博客 2529

论文解读--Phase Noise in FMCW Radar Systems

相位噪声是现代雷达、通信、光谱和计量系统的基本性能参数之一。本文提出了一种适用于FMCW雷达系统的相位噪声理论。导出了一个新的设计方程,用于确定雷达系统中允许的源相位噪声电平的最大界。分析了在传输延迟小于参考振荡器相干时间时,相干混频引起的非线性相位噪声去相关函数;讨论了在传输延迟大于参考振荡器相干时间时,目标响应的频谱展宽。提出了收发链中各子系统的影响,并讨论了一种新的ADC相位噪声模型。介绍了相位噪声建模技术,然后将锁相环频率合成器与低噪声频率合成器进行比较,以演示减少相位噪声边带以改善检测和跟踪性能。

奔袭的算法工程师 3763

自定义View 手表表盘

最近想好好熟悉下自定义View的相关知识。Android应用开发少了自定义View真是一个缺口,关键使用而且有趣。 下面是参考别人的代码自己改装写下来的一个表盘,不说多了,从模仿开始。具体代码如下: package com.example.xxiang1x.teststudio; import android.annotation.TargetApi; import android.

哈喽沃德 1584

Ubuntu下全面解析硬盘健康:从基础检测到性能优化

本文详细介绍了在Ubuntu系统中如何全面监测硬盘健康状态。从安装smartmontools工具、解读SMART关键属性(如重新分配扇区计数、通电时间),到进行性能基准测试(使用dd和fio),最后根据检测结果提供针对性的优化与预警方案,帮助用户有效预防数据丢失并提升硬盘可靠性。

weixin_29223603的博客 287

Edge主页被2345劫持?手动清理注册表与组策略的完整方案

浏览器主页劫持是Windows系统中常见的恶意篡改行为,其原理是通过修改注册表、快捷方式、组策略等多处系统配置,强制锁定浏览器启动页。这类劫持不仅影响上网体验,还可能带来隐私泄露和恶意软件感染风险。在安全防护与系统优化场景中,掌握手动清理主页劫持的技能至关重要。本文针对Edge主页被2345导航劫持的问题,深入解析劫持入口,提供从快捷方式、注册表到组策略的逐层清理步骤,并给出防复发策略,帮助用户彻底摆脱顽固劫持。

weixin_30582943的博客 380

安卓自定义View画钟实现转动

1.自定义View画钟实现转动 这个和画圆差不多,不过只是价格分针,并实现其转动,要加一个线程。代码如下: Java类中的代码 package com.example.ll.canvas; import android.content.Context; import android.graphics.Canvas; import android.graphics.Color; import...

qq_41451851的博客 452

Vscode远程免密连接Linux虚拟机,并配置C/C++运行环境

目前想要深入学习在Linux,也为了方便编写C/C++程序。Linux的环境里一般自带有c++的编译环境,如果没有安装gcc和g++等编译器也比较便利。但是在虚拟机里用vim编写C++程序又不得劲,因此打算使用vscode远程连接Linux虚拟机进行学习。为了防止自己以后还要再配置,重复踩坑,因此写下这篇博客用做记录。环境:windows11、VMware17、rocky linux9.1 ( 开源的CentOS9 )

m0_56779872的博客 8676

博客第一篇:自定义view之手表

之前一直把遇到的内容自己记录下来,现在决定将东西分享出来,希望对大家能够有用!这篇文章是一个自定义view的手表,不同的是这个自定义view根据当前的时间自己转动,同时对时针和分针做了一些优化(时针和分针的转动不是一直指向精准的刻度,他会随着时针和秒针来在所在的区间内转动),废话不多说,先看效果图然后再上代码!代码:(此代码只是简单的自定义view,没有按严格的格式书写)/** * Create...

惜雨犹竹的博客 354

手把手教你修改miniwiggler配置信息,解决UDE连接问题(附FT_PROG工具下载)

本文详细介绍了如何使用FT_PROG工具修改miniwiggler配置信息,解决UDE连接问题。通过分析FT2232芯片的EEPROM结构,提供从驱动安装到配置烧写的完整流程,帮助开发者实现无缝连接英飞凌TriBoard开发板。文章还包含常见错误解决方案和高级批量配置技巧。

weixin_30919429的博客 373

蓝牙攻防实战指南:低功耗蓝牙

Bluetooth Low Energy(也称Bluetooth Smart)是经典蓝牙(Bluetooth Classic)的演进版本,设计目标是实现极低功耗,适用于无需频繁更换电池的设备,如智能手环、健康监测器、蓝牙标签等。Bluetooth Low Energy 是一项极具前景的无线通信技术,它以极低的功耗实现了短距离高效通信,广泛应用于智能设备和物联网领域。然而,其简化的协议结构和配对机制也带来了不小的安全挑战。

idlecloud0105的博客 682

android自定义手表控件,android自定义手表

1.效果图: 2.布局.3.自定义view,显示package com.example.administrator.testz;import android.graphics.Bitmap;import android.graphics.Canvas;import android.graphics.Color;import android.graphics.Paint;import android...

weixin_36209848的博客 271

大学生作业:80C51存储器数据传输实验:基本指令和数据传送

大学生作业:80C51存储器数据传输实验,报价 200 文章目录实验一、80C51存储器数据传输实验实验目的:实验内容一:基本指令实验内容二:数据传送 实验一、80C51存储器数据传输实验 实验目的: 熟悉软件的集成开发环境 掌握单片机软件设计流程,掌握存储器结构及各窗口之间的联系 掌握内部数据存储器、外部数据存储器的数据传送特点和应用; 实验内容一:基本指令 用三种方法实现将累加器A内容改为20H ORG 0000H LJMP MAIN ORG 0030H MAIN: ;方法一使用寄

weixin_54707168的博客 5099

Android自定义View: 如何实现类钟摆的动画效果?

By Long Luo继第一篇Android自定义View:如何实现一个模拟时钟?,我们使用Android自定义View实现了一款模拟表盘,第二篇Android自定义View:另一种实现手表指针转动的方法我们又通过另外一种方法实现了手表指针的另外一种转动实现。在日程生活中,我们常见的挂钟实际都是有个钟摆的,那么,如果我们想在我们所作的模拟时钟实现这种钟摆动画呢?那么具体应该如何实现呢?一、钟摆遇到问

TCP/IP协议栈学习ing 2876

Vue3 - 手机移动端H5网页强力解决弹起软键盘后页面被挤压变形或页面整体上移问题,点击input输入框键盘弹出底部被上推往上顶遮挡及各种问题(兼容安卓苹果ios手机,微信公众号网页微信内置浏览器)

vue3,h5网页,input输入框组件,vue3 h5软键盘弹出,vue3输入框,键盘弹起时页面整体上移问题,uni,H5页面,解决软键盘弹起页面被挤压、被往顶的问题,解决vue3输入框,键盘弹起时页面整体上移问题,vue3调用手机系统软键盘,页面窗口被顶起,布局定位失效,解决VUE3软键盘弹起导致页面fixed定位元素被顶上去,输入法软键盘弹起,窗口顶起,变形解决办法,Vue中input组件在IOS设备上弹出软键盘时页面整体上移问题的解决方案,以及input组件聚焦后弹出软键盘固定在,Vue3软键盘把界

🏆 前端领域优质创作者 1万+

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

Android 自定义View——表盘实例

早之前就准备写一些自定义的玩意儿玩玩,苦于一直忙于其他的就把这事搁置起来了。最近又把这些东西翻出来了,就想着记录下来,温故而知新。         本篇文章就说一下如何一步步的实现一个时钟表盘,根据这个实例说一下实例中主要用到的Canvas这个类。在网上有好的这种表盘的例子,我也大概的翻了翻,

猿小侯的博客 2358

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

Android 自定义View 实现表盘效果

看一哥们做了这个效果,我也来凑下热闹 我的实现: [java] view plain copy print? package com.stone.clock.view;    import android.content.Context;  import android.graphics.Canvas;  import android.

LRC的专栏 595

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

简单的实现自定义View画一个钟表

自定义View画一个钟表      第一次看到别人的程序上面一个钟表自动走动感觉好神奇,好厉害的样子,然后就很感兴趣,自己鼓捣了一通,也明白了,理清思路其实很简单,下面来和大家一起分享一下我的思路.        首先确定一个圆心点和半径画一个圆,这个应该难不住聪明的你们吧,接下来要考虑的是圆上面钟表的刻度数字,这个想来发现挺的,怎么画?难道要知道每个小刻度线的横纵坐标?后来当我知道画布可

偷偷看你的博客 1062

自定义view————Android上的劳力士

来来来,先看看效果。 记得在学校学习的时候也写过一个C语言的手表,不过指针好像一直转不准,想想还是当年太年轻~囧~~ 最近在研究canvas,看到某人写的例子里面也有只手表,今天便花了点时间自己重新写了一个,当是练手了。 例子本身没什么难的,初学者应该都看得懂。 首先拆分这个view: 手表的刻度和整点时刻是不变的,可以通过view的宽高直接画在中心 指针单独拿出来画,因为要计算角度 所

金克丝的美好初衷 1142

android自定义View-HopPicker腕表

前一阵子看到了一块概念腕表,感觉非常有意思,就想能不能写一个在android手机上运行一下。 Hop Picker 的创意腕表

jiahaodong的博客 2568
上一篇: Android自定义View:如何实现一个模拟时钟?
下一篇: Android自定义View: 如何实现类钟摆的动画效果?
tcpipstack
博客等级 码龄14年 329粉丝 89原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值