canvas绘制时钟刻度表
canvas绘制时钟刻度表
1.首先看一下效果图
2.基本知识点
canvas.drawText:绘制文字,注意基线的位置为文字的左下角y轴所在的线
canvas.drawLine:绘制线段,指定起始位置就好
canvas.save:保存canvas的状态,比如translate平移之前或者rotate(单位为°,正为顺时针)旋转之前的状态
canvas.restore:恢复到保存时候的canvas状态,这么理解:translate平移了坐标,从初始位置屏幕左上角(0,0)到屏幕中间(mWidth/2,mHeight/2),这时候如果我们在平移之前保存了canvas的状态,要想恢复到平移之前的状态就可以使用canvas.restore,rotate旋转类似
3.分析
1.首先绘制一个屏幕正中心得描边的空心圆
2.绘制刻度线和几点,首先绘制0点的刻度线和0,然后canvas绕着中心点顺时针旋转15°,然后绘制1点,2点。。。
3.绘制两根指针,起始点为(0,0),那么我们可以把坐标通过translate平移到中心点位置,然后绘制两根指针就很容易了
4.实战
import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.support.annotation.Nullable;
import android.util.AttributeSet;
import android.view.View;
import android.view.WindowManager;/*** Created by m1312 on 2018/5/5.* 绘制时钟*/public class ClockView extends View {private Paint mCirclePaint;private Paint mDegreePaint;private Paint mHourPaint;private Paint mMinutePaint;private int mWidth;private int mHeight;public ClockView(Context context) {super(context);init();}public ClockView(Context context, @Nullable AttributeSet attrs) {super(context, attrs);init();}public ClockView(Context context, @Nullable AttributeSet attrs, int defStyleAttr) {super(context, attrs, defStyleAttr);init();}private void init() {mCirclePaint = new Paint();mCirclePaint.setStyle(Paint.Style.STROKE);mCirclePaint.setAntiAlias(true);mCirclePaint.setStrokeWidth(5);mDegreePaint = new Paint();mDegreePaint.setStrokeWidth(3);mDegreePaint.setColor(Color.BLACK);mHourPaint = new Paint();mHourPaint.setStrokeWidth(20);mMinutePaint = new Paint();mMinutePaint.setStrokeWidth(10);WindowManager windowManager = (WindowManager) getContext().getSystemService(Context.WINDOW_SERVICE);mWidth = windowManager.getDefaultDisplay().getWidth();mHeight = windowManager.getDefaultDisplay().getHeight();}@Overrideprotected void onDraw(Canvas canvas) {canvas.drawCircle(mWidth/2,mHeight/2,mWidth/2,mCirclePaint);for(int i = 0;i<24;i++){if(i == 0 || i == 6 || i == 12 || i == 18){mDegreePaint.setStrokeWidth(5);mDegreePaint.setTextSize(30);canvas.drawLine(mWidth/2,mHeight/2-mWidth/2,mWidth/2,mHeight/2-mWidth/2+60,mDegreePaint);String degree = String.valueOf(i);canvas.drawText(degree,mWidth/2-mDegreePaint.measureText(degree)/2,mHeight/2-mWidth/2+90,mDegreePaint);}else{mDegreePaint.setStrokeWidth(3);mDegreePaint.setTextSize(15);canvas.drawLine(mWidth/2,mHeight/2-mWidth/2,mWidth/2,mHeight/2-mWidth/2+30,mDegreePaint);String degree = String.valueOf(i);canvas.drawText(degree,mWidth/2-mDegreePaint.measureText(degree)/2,mHeight/2-mWidth/2+60,mDegreePaint);}canvas.rotate(15,mWidth/2,mHeight/2);}canvas.save();canvas.translate(mWidth/2,mHeight/2);canvas.drawLine(0,0,100,100,mHourPaint);canvas.drawLine(0,0,100,200,mMinutePaint);canvas.restore();//测试save和restore的作用mDegreePaint.setTextSize(50);canvas.drawText("hahah",100,100,mDegreePaint);}}
canvas绘制时钟刻度表相关推荐
- canvas绘制时钟
听了慕课网Sliav Zhou 的课程canvas绘制时钟,记录下来的代码,每句做了注解便于以后学习,原先每次边听别的课边敲码,错误百出,明明原封不动复制的代码,就会出错,还找不到原因,今天可能运气好 ...
- html5时间画布走动,javascript+HTML5 canvas绘制时钟功能示例
本文实例讲述了javascript+HTML5 canvas绘制时钟功能.分享给大家供大家参考,具体如下: 效果如下: 代码: www.jb51.net canvas绘制时钟 div{text-ali ...
- 使用canvas绘制时钟
使用canvas绘制时钟 什么使canvas呢?HTML5 <canvas> 元素用于图形的绘制,通过脚本 (通常是JavaScript)来完成.<canvas> 标签只是图 ...
- html5canvas绘制时钟,JavaScript html5 canvas绘制时钟效果
本文实例讲述了JavaScript+html5 canvas绘制时钟效果.分享给大家供大家参考,具体如下: HTML部分: canvas绘图 JavaScript部分: function init() ...
- html5的canvas绘制时钟
为什么80%的码农都做不了架构师?>>> 最近一直在学习html5,学到了html5的canvas标签,这个画布真的是很强大,它有对应的javascript的api的支持,你可 ...
- canvas绘制时钟表盘
关于canvas的API操作详情请阅读文档https://www.runoob.com/html/html5-canvas.html 先来看下效果图: 首先,需要绘制两个圆形作为表盘 var draw ...
- Canvas绘制一个时钟
Canvas绘制一个时钟 Canvas:一个可以使用脚本(通常为JavaScript)在其中绘制图像的 HTML 元素.它可以用来制作照片集或者制作简单(也不是那么简单)的动画,甚至可以进行实时视频处 ...
- Canvas之绘制时钟
使用canvas绘制时钟效果 创建一个canvas之后拥有三要素: id--画布的唯一标识 width--画布的宽 height--画布的高 **强烈建议不要使用css修改画布的宽高,因为画布的宽高表 ...
- canvas 画布绘制时钟
利用canvas绘制时钟的一个小demo <!--* @Author: 164591357@qq.com 164591357@qq.com* @Date: 2022-08-06 11:04:07 ...
最新文章
- Rails字符集问题
- DayDayUp:那些属于程序猿江湖的鄙视链(看完别笑^~^,哈哈,haha)
- linux fedora35设置双系统开机启动顺序
- thinkphp curd的事务回滚 一看就会
- 电为啥要分交流、直流?
- UVA485 Pascal‘s Triangle of Death【大数】
- obs 推流编码在哪设置_斗鱼用obs直播的串流码填什么呀 新手 不懂
- Machine Learning - Coursera 吴恩达机器学习教程 Week4 学习笔记
- 基于Vue的俄罗斯方块游戏设计与实现
- 无线鼠标vs蓝牙鼠标
- 评论中发emoji表情 iOS
- Android 控制屏幕唤醒常亮或熄灭
- 企业高管跳槽区块链,跳的是“坑”还是“槽”?
- java 小工 到_测试小工——从0到1搭建最简单的Linux网站
- 基于Web的图书管理系统设计与实现(附源码地址)
- 平面/空间杆系结构有限元编程计算(MATLAB)
- 【2018国赛线上初赛】知识问答题真题演练第三波
- “/wechat”应用程序中的服务器错误。
- Adobe flash plugin插件的安装
- 深度学习与视频编解码算法一
热门文章
- python无法加载文件系统代码_致命的Python错误:initfsencoding:无法加载文件系统cod...
- linux将tick变成日期,Linux时间子系统之:Tick Device layer综述
- 专访 | 数据库厂商都怕低价竞争?阿里云说并不可惧
- USB等高速差分信号是否需要包地?
- 如何通过java股票数据接口实现股票的自动化交易?
- Elasticsearch整合Springboot实现基本的全文检索
- 【Cascade FPD】《Deep Convolutional Network Cascade for Facial Point Detection》
- Invalid use of argument matchers
- 常见的 CSRF、XSS、sql注入、DDOS流量攻击
- 疾风电竞显示器,让你享受快人一步的游戏体验