介绍
这篇文章给大家分享的是有关Android怎么实现简单时钟观点的方法的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。
通过画布的平移与旋转简化绘图逻辑是一个非常有用的技巧,下面的时钟观点就是利用这个方法完成的,省去了使用三角函数计算坐标的麻烦。
package com.example.swt369.simpleclock; import android.content.Context; import android.graphics.Canvas; import android.graphics.Paint; import android.support.annotation.Nullable; import android.util.AttributeSet; import android.view.View; import android.view.ViewTreeObserver; import android.widget.Toast; import java.util.Calendar;/* * ,* Created by  swt369 提醒2017/8/20。 ,*/public class  ClockView extends View  { ,//时钟各个部件的长度 ,private float  mScaleLengthLong; ,private float  mScaleLengthShort; ,private float  mTickLengthHour; ,private float  mTickLengthMinute; ,private float  mTickLengthSecond; ,//视图的宽和高 ,private float  mWidth; ,private float  mHeight; ,//时钟半径 ,private float  mRadius; ,//绘制各部件时用的油漆 ,private Paint  mPaintScaleLong; ,private Paint  mPaintScaleShort; ,private Paint  mPaintOutline; ,private Paint  mPaintNum; ,private Paint  mPaintTickHour; ,private Paint  mPaintTickMinute; ,private Paint  mPaintTickSecond; ,private ViewTreeObserver.OnPreDrawListener  onPreDrawListener; ,public ClockView (final Context 上下文,@Nullable AttributeSet attrs), { 超级才能(上下文,attrs); 时间=onPreDrawListener 才能;new ViewTreeObserver.OnPreDrawListener (), { ,,//获取视图宽高并计算各个部件的长度 @Override。才能 ,,public boolean  onPreDraw (), { ,,,mWidth =, getMeasuredWidth (); ,,,mHeight =, getMeasuredHeight (); ,,,mRadius =, Math.min (mWidth mHeight),/, 2, *, 0.95 f; ,,,mScaleLengthLong =, mRadius *, 0.1 f; ,,,mScaleLengthShort =, mRadius *, 0.05 f; ,,,mTickLengthHour =, mRadius *, 0.3 f; ,,,mTickLengthMinute =, mRadius *, 0.45 f; ,,,mTickLengthSecond =, mRadius *, 0.6 f; ,,,return 真实; ,,} ,,}; getViewTreeObserver才能().addOnPreDrawListener (onPreDrawListener);//点才能击显示具体时间 OnClickListener setOnClickListener才能(new (), { @Override。才能 ,,public void  onClick (View v), { ,,,Calendar Calendar =, Calendar.getInstance (); ,,,String time =, String.format(“当前时间:% 2 d: % 2 d: % 02 d", ,,,,,calendar.get (Calendar.HOUR_OF_DAY) calendar.get (Calendar.MINUTE) calendar.get (Calendar.SECOND)); ,,,Toast.makeText(上下文、时间,Toast.LENGTH_SHORT),告诉(); ,,} ,,});//才能初始化所有油漆对象 initializePaints才能(); ,} ,@Override ,protected void  onDraw (Canvas 画布),{ 如果才能(mWidth ==, 0, | |, mHeight ==, 0) { ,才能回报; ,,} 如果才能(onPreDrawListener !=, null) { ,,getViewTreeObserver () .removeOnPreDrawListener (onPreDrawListener); ,,onPreDrawListener =,空; ,,}//才能绘制时钟 drawClock才能(画布);//才能一秒后重绘 postInvalidateDelayed才能(1000); ,} ,private void  drawClock (Canvas 画布),{//才能保存原始状态 canvas.save才能();//将才能坐标系原点移到中心,并逆时针旋转90度,完成后x轴朝上。 canvas.translate才能(时间/mWidth 2、mHeight /, 2); canvas.rotate才能(-90);//画才能外围轮廓 canvas.drawCircle才能(0,0 mRadius, mPaintOutline);//画才能刻度 ,,(int 小姐:=,0,,,小姐:& lt;, 12,,,我+ +){ ,,String num =, String.valueOf(小姐:==,0,?,12,:,i); ,,如果小姐:%,3,==,0){ ,,,canvas.drawLine (mRadius 0 mRadius 作用;mScaleLengthLong, 0,, mPaintScaleLong); ,,}else { ,,,canvas.drawLine (mRadius 0 mRadius 作用;mScaleLengthShort, 0,, mPaintScaleShort); ,,} ,,canvas.drawText (num mRadius 作用;mScaleLengthLong 作用;mPaintNum.measureText (num), *, 2 0,, mPaintNum); null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null nullAndroid怎么实现简单时钟观点的方法