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

苍穹外卖项目面试总结话术

美食速递这个项目最初是我参与制作的大创项目,是一款为中南学生提供校园外卖送至宿舍服务的软件,包含系统管理后台和小程序端两部分。其中系统管理后台主要提供给食堂内部员工使用,可以对食堂各个窗口、员工、订单、菜品等进行维护管理;小程序端可以在线浏览菜品、添加购物车、下单等,由学生兼职做跑腿送餐上门服务。这是个前后端分离的项目,我主要是负责后端的用户登录、员工管理,菜品管理,订单管理模块的编码实现。

qq_45195447的博客 1万+

自定义View 手表表盘

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

哈喽沃德 1584

AG16K MCU ARM Cortex M3

其中,Input文件为Keil生成的mcu程序文件,输出为合成后的存储格式Bin文件,Program address 为上方表格中“程序运行 RAM 地址(4bytes)”,即 Keil 中设置的程序运行地址。其中 MCU 程序的地址,根据 mcu.ip 中设置的 FLASH_BIAS 进行设置。AG16K MCU 的 FPGA 工程中,需调用 alta_mcu_m3 的硬核 IP,包含在 alta_sim.v 的库文。Quartus II。//MCU 程序在 FLASH 中存放的首地址。

Embeded_FPGA的博客 1804

PythonWeb开发框架—Django之工程创建和models的定义和增删改查

文章介绍了Django工程的创建、models的定义和增删改查

weixin_42476668的博客 990

安卓自定义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

360加固DEX解密与ELF修复技术解析

本文深入解析了360加固APK的逆向分析技术,重点探讨了其DEX解密与ELF文件修复的核心流程。通过动态调试与Frida脚本,详细拆解了壳的启动机制、反调试绕过、自实现Linker技术,并还原了基于RC4和自定义算法的多层DEX解密过程,为移动安全研究人员提供了实用的实战分析思路。

alice7model的博客 701

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

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

惜雨犹竹的博客 354

从SVF文件到高效验证:Formality中set_svf命令的隐藏技巧与实战解析

本文深入解析Formality中set_svf命令的高级应用技巧,涵盖SVF文件生成策略、多文件加载优化及验证效率提升方法。通过-append和-ordered选项的实战应用,帮助工程师解决芯片验证中的常见问题,实现验证通过率与运行效率的双重提升。

mqtt6iot的博客 818

AIGC时代的必备技能:提示词工程(Prompt Engineering)全面指南

本文主要介绍了AIGC时代的重要技能——提示词工程(Prompt Engineering)。文章首先定义了提示词的概念,强调其作为人类与AI沟通桥梁的重要性,并详细阐述了提示词的功能特性,包括输入、大模型处理和输出三个环节。接着,文章探讨了提示工程的重要性,如提高输出质量、节省资源和时间等。随后,文章深入分析了提示词的基本构成要素,包括指令、上下文、输入数据和输出指示符,并提出了提示词的五大基本原则:清晰性与具体性、提供充足的上下文、明确任务与目标、考虑受众和迭代思维。最后,文章介绍了提示词的七大常见技巧

weixin_43178406的博客 27万+

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

浏览器主页被2345劫持简单处理方法

本人比较常用的浏览器是IE和Chrome IE: 将网址修改为https://www.baidu.com 应用-确定-重新打开IE浏览器 或者win+r运行regedit打开注册表找到这个值   HKEY_CURRENT_USER\Software\Microsoft\Internet Explorer\Main下  和HKEY_CURRENT_USER\Software\Policies\Microsoft\Internet Explorer\Main这个下面的StartPage ...

A soul tortured by desire 2万+

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

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

TCP/IP协议栈学习ing 2876

老款 NUC 复活计划:装 Ubuntu 部署 OpenClaw 本地 AI

老款 NUC 变身本地 AI 服务器指南 本文详细介绍了如何将老旧华硕 NUC 设备改造为本地 AI 服务器。主要内容包括: 硬件评估:列出老款 NUC 的最低配置要求(i3 6代/8GB内存/256GB SSD),并提供兼容性检查命令和性能预期表 系统准备:指导备份数据、下载 Ubuntu 22.04 LTS 和制作启动盘的方法(Windows/Linux双平台) 安装流程:从 BIOS 设置到 Ubuntu 安装的完整步骤,包括推荐的分区方案 系统优化:禁用不必要的服务、内核参数调优、Swap 配置和

博客 7606

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

Android 自定义View——表盘实例

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

猿小侯的博客 2358

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

Android 自定义View 实现表盘效果

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

LRC的专栏 595

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

计算机控制技术及应用

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

简单的实现自定义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、付费专栏及课程。

余额充值