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

2018-05-14 10:58:45 576浏览

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


在values文件夹下创建attrs.xml

<?xmlversion="1.0"encoding="utf-8"?>
<resources>
<declare-styleablename="MyPb">
<attrname="circle_color"format="color"/>
<attrname="circle_radius"format="dimension"/><!--尺寸-->
<attrname="circle_x"format="dimension"/>
<attrname="circle_y"format="dimension"/>
</declare-styleable>
</resources>

写一个类继承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类

  <?xmlversion="1.0"encoding="utf-8"?>
  <LinearLayoutxmlns:android="http://schemas.android.com/apk/res/android"
  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">
  <widget.MyPb
  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"/>
  </LinearLayout>

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持扣丁学堂。最后想要了解更多请关注扣丁学堂Android培训官网、微信公众号平台,扣丁学堂Android视频教程从零基础到精通免费试听试学,就业终端服务系统随时监控学员的学习情况和效果,顺利毕业后根据学员自身风格和学习效果推荐就业。如果你想要学习Android开发工程师技术就不要再犹豫了,喜欢就付诸行动吧



扣丁学堂微信公众号



【关注微信公众号获取更多学习资料】



查看更多关于“Android开发技术的相关资讯>>


标签: Android开发从入门到精通 Android学习路线图 Android培训 Android开发工程师 Android视频教程

热门专区

暂无热门资讯

课程推荐

微信
微博
15311698296

全国免费咨询热线

邮箱:codingke@1000phone.com

官方群:148715490

北京千锋互联科技有限公司版权所有   北京市海淀区宝盛北里西区28号中关村智诚科创大厦4层
京ICP备12003911号-6   Copyright © 2013 - 2019

京公网安备 11010802030908号