扣丁学堂Android培训之自定义View实现自动转圈效果
本文实例为大家分享了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"/>
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持扣丁学堂。