Android自定义控件Android开发经验谈Android开发

扣丁学堂Android培训之自定义View实现自动转圈效果

2018-05-14  本文已影响73人  994d14631d16

  本文实例为大家分享了Android实现自动转圈效果展示的具体代码,供大家参考,具体内容如下

​  写一个类继承view

  packagewidget;

  importandroid.content.Context;

  importandroid.content.res.TypedArray;

  importandroid.graphics.Canvas;

  importandroid.graphics.Color;

  importandroid.graphics.Paint;

  importandroid.graphics.RectF;

  importandroid.support.annotation.Nullable;

  importandroid.util.AttributeSet;

  importandroid.view.View;

  importcom.bwie.zdycircle.R;

  importjava.util.Timer;

  importjava.util.TimerTask;

  /**

  *CreatedbyAdministratoron2017/12/7.

  */

  publicclassMyPbextendsView{

  privatefloatradius,cx,cy;

  privatePaintpaint;

  privatefloatsweepAngle;//旋转角度

  publicMyPb(Contextcontext){

  super(context,null);

  }

  publicMyPb(Contextcontext,@NullableAttributeSetattrs){

  super(context,attrs);

  //获取自定义的属性

  TypedArraya=context.obtainStyledAttributes(attrs,R.styleable.MyPb);

  //获取颜色

  intcolor=a.getColor(R.styleable.MyPb_circle_color,Color.BLACK);//获取不到给默认值

  radius=a.getDimension(R.styleable.MyPb_circle_radius,20);

  cx=a.getDimension(R.styleable.MyPb_circle_x,100);

  cy=a.getDimension(R.styleable.MyPb_circle_y,100);

  //需要回收

  a.recycle();

  paint=newPaint();

  paint.setAntiAlias(true);//抗锯齿

  paint.setColor(color);

  paint.setStyle(Paint.Style.STROKE);//空心

  Timertimer=newTimer();

  timer.schedule(newTimerTask(){

  @Override

  publicvoidrun(){

  if(sweepAngle>360){

  return;

  }

  sweepAngle+=1;

  postInvalidate();

  }

  },1000,20);//每隔20毫秒执行一次

  }

  @Override

  protectedvoidonDraw(Canvascanvas){

  paint.setColor(Color.BLUE);

  paint.setStrokeWidth(10);

  canvas.drawCircle(cx,cy,radius,paint);//画圆

  paint.setStrokeWidth(20);//粗细

  //画运动的轨迹

  paint.setColor(Color.RED);

  //上下左右与圆重合,左边为圆心的横坐标减去半径,上边为纵坐标减去半径,以此类推

  RectFrectF=newRectF(cx-radius,cy-radius,cx+radius,cy+radius);

  //起始角度,旋转角度,第三个属性为是否填充,画笔

  canvas.drawArc(rectF,-90,sweepAngle,false,paint);

  //绘制文字

  intprogress=(int)(sweepAngle/360f*100);

  paint.setTextSize(50);

  paint.setStrokeWidth(0);

  paint.setColor(Color.BLACK);

  canvas.drawText(progress+"%",cx-20,cy,paint);

  }

  }

  在主页面布局中引入自定义view类

  xmlns:app="http://schemas.android.com/apk/res-auto"

  xmlns:tools="http://schemas.android.com/tools"

  android:layout_width="match_parent"

  android:layout_height="match_parent"

  tools:context="com.bwie.zdycircle.MainActivity">

  android:layout_width="wrap_content"

  android:layout_height="wrap_content"

  app:circle_color="#0000ff"

  app:circle_radius="70dp"

  app:circle_x="200dp"

  app:circle_y="200dp"/>

  以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持扣丁学堂。

上一篇 下一篇

猜你喜欢

热点阅读