android 自定义view实现时钟
发布日期:2021-11-21 04:41:09
浏览次数:26
分类:技术文章
本文共 4173 字,大约阅读时间需要 13 分钟。
package com.domain.zjl.androidhero;import android.content.Context;import android.graphics.Canvas;import android.graphics.Color;import android.graphics.Paint;import android.graphics.Rect;import android.os.Handler;import android.util.AttributeSet;import android.util.Log;import android.view.View;import java.util.Calendar;/** * Created by xiaoji94shen on 2016/9/1. */public class MyClockView extends View { private Handler mHandler; private Runnable mRunnable; private Paint mPaint; public MyClockView(Context context) { super(context); init(); } public MyClockView(Context context, AttributeSet attrs) { super(context, attrs); init(); } private void init() { mHandler = new Handler(); initPaint(); mRunnable = new Runnable() { @Override public void run() { postInvalidate(); mHandler.postDelayed(this, 1000); } }; mHandler.postDelayed(mRunnable, 1000); } @Override protected void onDraw(Canvas canvas) { super.onDraw(canvas); drawBigCircle(canvas); drawLinesAndNumbers(canvas); drawPoint(canvas); drawLines(canvas); } private void initPaint() { mPaint = new Paint(); mPaint.setAntiAlias(true); mPaint.setColor(Color.BLACK); } private void drawLines(Canvas canvas) { Calendar calendar = Calendar.getInstance(); float hour = calendar.get(Calendar.HOUR); float min = calendar.get(Calendar.MINUTE); float secode = calendar.get(Calendar.SECOND); mPaint.setStyle(Paint.Style.FILL); float startX = getWidth() / 2; float endX = startX; float startY = getHeight() / 2; float endY = startY - 80; canvas.save(); float hourDegree = (hour + min / 60) * (360 / 12); canvas.rotate(hourDegree, getWidth() / 2, getHeight() / 2); canvas.drawLine(startX, startY, endX, endY, mPaint); canvas.restore(); canvas.save(); float minDegree = (min + secode / 60) * 360 / 60; canvas.rotate(minDegree, getWidth() / 2, getHeight() / 2); canvas.drawLine(startX, startY, endX, endY - 20, mPaint); canvas.restore(); canvas.save(); float secondeDegree = secode * 360 / 60; canvas.rotate(secondeDegree, getWidth() / 2, getHeight() / 2); canvas.drawLine(startX, startY, endX, endY - 40, mPaint); canvas.restore(); } private void drawPoint(Canvas canvas) { mPaint.setStyle(Paint.Style.FILL); canvas.drawCircle(getWidth() / 2, getHeight() / 2, 6, mPaint); } private void drawBigCircle(Canvas canvas) { mPaint.setStyle(Paint.Style.STROKE); canvas.drawCircle(getWidth() / 2, getHeight() / 2, getWidth() / 2 - 4, mPaint); } private void drawLinesAndNumbers(Canvas canvas) { canvas.save(); int logHeight = 16; int shortHeight = 8; int startX = getWidth() / 2; int stopX = startX; int radius = getWidth() / 2 - 4; int startY = getHeight() / 2 - radius; int stopY = 0; int degree = 360 / 60; mPaint.setStyle(Paint.Style.FILL); mPaint.setTextSize(25); String[] numbers = new String[]{"12", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11"}; int j = 0; for (int i = 0; i < 60; i++) { if (i % 5 == 0) { stopY = startY + logHeight; j++; } else { stopY = startY + shortHeight; } canvas.drawLine(startX, startY, stopX, stopY, mPaint); if (i % 5 == 0) { String num = numbers[j - 1]; Rect textBounds = new Rect(); mPaint.getTextBounds(num, 0, num.length(), textBounds); int textStartX = (int) (startX - mPaint.measureText(num) / 2); int textStartY = (int) (stopY + textBounds.height()) + 2; canvas.drawText(numbers[j - 1], textStartX, textStartY, mPaint); } canvas.rotate(degree, getWidth() / 2, getHeight() / 2); } canvas.restore(); }}
转载地址:https://blog.csdn.net/xiaoji94shen/article/details/52399178 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!
发表评论
最新留言
能坚持,总会有不一样的收获!
[***.219.124.196]2024年04月12日 00时55分45秒
关于作者
喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
nginx 反向代理,动静态请求分离,proxy_cache缓存及缓存清除
2019-04-27
nginx 的proxy_cache才是王道
2019-04-27
Nginx proxy_cache 使用示例
2019-04-27
Nginx源代码分析 - 日志处理
2019-04-27
使Apache实现gzip压缩
2019-04-27
Memcached在大型网站中应用
2019-04-27
Hadoop简要介绍
2019-04-27
squid中的X-Cache和X-Cache-Lookup的意义
2019-04-27
squid 优化指南
2019-04-27
centos vnc配置笔记
2019-04-27
让Squid 显示本地时间
2019-04-27
linux mysql 命令 大全
2019-04-27
清除Squid缓存的小工具
2019-04-27
Varnish Cache 3.0.0安装
2019-04-27
2011年6月编程语言关注度排行
2019-04-27
Varnish使用小结
2019-04-27
千万级并发HAproxy均衡负载系统介绍
2019-04-27
什么是A记录、MX记录、CNAME记录
2019-04-27
MongoDB简介
2019-04-27
Varnish purges 缓存清除
2019-04-27