本文实例为大家分享了AndroID实现自动转圈效果展示的具体代码,供大家参考,具体内容如下
在values文件夹下创建attrs.xml
<?xml version="1.0" enCoding="utf-8"?><resources> <declare-styleable name="MyPb"> <attr name="circle_color" format="color" /> <attr name="circle_radius" format="dimension" /><!-- 尺寸 --> <attr name="circle_x" format="dimension" /> <attr name="circle_y" format="dimension" /> </declare-styleable></resources>
写一个类继承vIEw
package Widget;import androID.content.Context;import androID.content.res.TypedArray;import androID.graphics.Canvas;import androID.graphics.color;import androID.graphics.Paint;import androID.graphics.RectF;import androID.support.annotation.Nullable;import androID.util.AttributeSet;import androID.vIEw.VIEw;import com.bwIE.zdycircle.R;import java.util.Timer;import java.util.TimerTask;/** * Created by administrator on 2017/12/7. */public class MyPb extends VIEw { private float radius,cx,cy; private Paint paint; private float sweepAngle;// 旋转角度 public MyPb(Context context) { super(context,null); } public MyPb(Context context,@Nullable AttributeSet attrs) { super(context,attrs); // 获取自定义的属性 TypedArray a = context.obtainStyledAttributes(attrs,R.styleable.MyPb); // 获取颜色 int color = 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 = new Paint(); paint.setAntiAlias(true);// 抗锯齿 paint.setcolor(color); paint.setStyle(Paint.Style.stroke);// 空心 Timer timer = new Timer(); timer.schedule(new TimerTask() { @OverrIDe public voID run() { if (sweepAngle > 360) { return; } sweepAngle += 1; postInvalIDate(); } },1000,20);// 每隔20毫秒执行一次 } @OverrIDe protected voID onDraw(Canvas canvas) { paint.setcolor(color.BLUE); paint.setstrokeWIDth(10); canvas.drawCircle(cx,cy,radius,paint);// 画圆 paint.setstrokeWIDth(20);// 粗细 // 画运动的轨迹 paint.setcolor(color.RED); // 上下左右与圆重合,左边为圆心的横坐标减去半径,上边为纵坐标减去半径,以此类推 RectF rectF = new RectF(cx - radius,cy - radius,cx + radius,cy + radius); // 起始角度,旋转角度,第三个属性为是否填充,画笔 canvas.drawArc(rectF,-90,sweepAngle,false,paint); // 绘制文字 int progress = (int) (sweepAngle / 360f * 100); paint.setTextSize(50); paint.setstrokeWIDth(0); paint.setcolor(color.BLACK); canvas.drawText(progress + "%",cx - 20,paint); }}
在主页面布局中引入自定义view类
<?xml version="1.0" enCoding="utf-8"?><linearLayout xmlns: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画圆弧canvas.drawArc()实例详解Android自定view画圆效果Android自定义View画圆功能Android自定义组件跟随自己手指主动画圆Android项目实战手把手教你画圆形水波纹loadingview 总结以上是内存溢出为你收集整理的Android自定义View实现自动转圈效果全部内容,希望文章能够帮你解决Android自定义View实现自动转圈效果所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)