Android怎么实现简单时钟观点的方法

  介绍

这篇文章给大家分享的是有关Android怎么实现简单时钟观点的方法的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。

通过画布的平移与旋转简化绘图逻辑是一个非常有用的技巧,下面的时钟观点就是利用这个方法完成的,省去了使用三角函数计算坐标的麻烦。

 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   null

Android怎么实现简单时钟观点的方法