android 自定义view实现时钟
来源:互联网 发布:淘宝城 编辑:程序博客网 时间:2024/05/18 02:25
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(); }}
0 0
- android 自定义view实现时钟
- Android自定义View实现时钟效果ClockView
- android自定义view(实现时钟显示)
- 自定义View实现米老鼠时钟
- Android 自定义View 时钟效果
- Android自定义View---秒表/时钟
- Android自定义View时钟效果
- android 自定义View模拟时钟
- Android自定义View:如何实现一个模拟时钟?
- Android自定义View----时钟/仪表盘的简单实现
- Android自定义View——实现时钟效果
- android自定义view之自定义时钟wacthview
- 自定义View+Handle 实现模拟时钟效果
- Android自定义View之数字时钟
- Android 自定义View(四) 时钟clockView
- Android 自定义View之: 时钟控件
- Android自定义控件实现时钟
- Android自定义View实现
- BeginPaint和EndPaint函数
- luvcview分析--1.环境搭建
- ASN.1笔记——标准编码规则BER
- 什么是Cookie?
- Android Service演义(android 5.1)
- android 自定义view实现时钟
- luvcview分析--2.将图像写到文件中
- application使用,生命周期
- 数据库基础知识(一) 页和B树
- jquery的图片效果和内容滑动及弹出插件
- luvcview分析--3.用SDL显示camera的图像
- Scala之旅-class和object详解
- 分布式应用保证事务原子性方案
- 最长回文字符串--manacher算法