2018-05-14 10:58:45 623浏览
本文实例为大家分享了Android实现自动转圈效果展示的具体代码,供大家参考,具体内容如下:
<?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>
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);
}
}
<?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开发工程师技术就不要再犹豫了,喜欢就付诸行动吧
【关注微信公众号获取更多学习资料】