Android自定义View实现圆形进度条

 更新时间:2022年06月29日 16:28:10   作者:360度旋转的猫  
这篇文章主要为大家详细介绍了Android自定义View实现圆形进度条,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

本文实例为大家分享了Android自定义View实现圆形进度条的具体代码,供大家参考,具体内容如下

原理非常简单,在自定义View的基础上使用Canvas的drawCircle画两个圆,一个圆代表总体,一个圆代表现有进度,在主线程中使用set方法在Handler中传递进度,进度和总体都可以添加set、get方法进行自定义

//主线程代码如下

public class MainActivity extends Activity {
private Button mBtn_start;
private MyProgresscircle myProgresscircle;
private int progress;
private Handler handler=new Handler(){
@Override
public void handleMessage(Message msg) {
super.handleMessage(msg);
switch (msg.what){
case 0:
progress++;
if(progress<=100){//形成循环
myProgresscircle.setCurrentProgress(progress);//传递进度
handler.sendEmptyMessageDelayed(0,200);//模拟下载延迟
                    }
break;
            }
        }
    };

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
myProgresscircle= (MyProgresscircle) findViewById(R.id.myprogress);
mBtn_start= (Button) findViewById(R.id.button_start);
mBtn_start.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
handler.sendEmptyMessage(0);//启动下载发送一个空消息开始
            }
        });
    }
}

//自定义View代码:

public class MyProgresscircle extends View {
private int width;
private int height;
private Paint mPaintText;
private Paint mPaintCircle;
private Paint mPaintCircleCurrent;
private int CurrentProgress;
private int MaxProgress=100;

public void setCurrentProgress(int currentProgress) {

CurrentProgress = currentProgress;
        invalidate();
    }

public int getMaxProgress() {
return MaxProgress;
    }

public void setMaxProgress(int maxProgress) {
MaxProgress = maxProgress;
    }

public MyProgresscircle(Context context) {
super(context);
    }

public MyProgresscircle(Context context, AttributeSet attrs) {
super(context, attrs);
mPaintText=new Paint();//字体进度画笔
mPaintText.setTextSize(80);
mPaintText.setColor(Color.WHITE);
mPaintText.setStrokeWidth(10);
mPaintText.setTextAlign(Paint.Align.CENTER);//偏移

mPaintCircle=new Paint();//外圆画笔
mPaintCircle.setColor(Color.GRAY);
mPaintCircle.setAntiAlias(true);
mPaintCircle.setStrokeWidth(10);

mPaintCircleCurrent=new Paint();//进度圆画笔
mPaintCircleCurrent.setColor(Color.YELLOW);
mPaintCircleCurrent.setAntiAlias(true);
mPaintCircleCurrent.setStrokeWidth(10);
    }

@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {//这个复写方法用来得到宽和高
super.onMeasure(widthMeasureSpec, heightMeasureSpec);
width = getDefaultSize(getSuggestedMinimumWidth(), widthMeasureSpec);
height = getDefaultSize(getSuggestedMinimumHeight(), heightMeasureSpec);
        setMeasuredDimension(width, height);
    }

@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
        canvas.drawCircle(width / 2, height / 2, 200, mPaintCircle);
        canvas.drawCircle(width/2,height/2,CurrentProgress/100f*200,mPaintCircleCurrent);
        canvas.drawText(CurrentProgress*100f/MaxProgress+"%",width/2,height/2,mPaintText);//把进度转化为百分比
    }
}

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

相关文章

  • Android界面数据懒加载实现代码

    Android界面数据懒加载实现代码

    这篇文章主要为大家分享了Android界面数据懒加载实现代码,告诉大家怎样实现界面即Fragment的懒加载,感兴趣的小伙伴们可以参考一下
    2016-09-09
  • Flutter 仿微信支付界面

    Flutter 仿微信支付界面

    网传微信支付页面的第三方链接一个格子需要广告费1一个亿,微信支付页非常适合做功能导航,本篇使用 ListView和 GridView 模仿了微信支付的页面,同时介绍了如何装饰一个组件的背景和边缘样式。
    2021-05-05
  • Android Studio实现进度条效果

    Android Studio实现进度条效果

    这篇文章主要为大家详细介绍了Android Studio实现进度条效果,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-04-04
  • Android普通应用升级为系统应用并获取系统权限的操作

    Android普通应用升级为系统应用并获取系统权限的操作

    这篇文章主要介绍了Android普通应用升级为系统应用并获取系统权限的操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-03-03
  • android okhttp的基础使用【入门推荐】

    android okhttp的基础使用【入门推荐】

    本文主要总结了Android著名网络框架-okhttp的基础使用。具有一定的参考价值,下面跟着小编一起来看下吧
    2017-01-01
  • android支付宝客户端html5网页无法自动关闭问题的解决方法

    android支付宝客户端html5网页无法自动关闭问题的解决方法

    这篇文章主要为大家详细介绍了android支付宝客户端html5网页无法自动关闭问题的解决方法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-04-04
  • Android如何快速适配暗黑模式详解

    Android如何快速适配暗黑模式详解

    微信在前段时间的更新中也实现了暗黑模式,而苹果系统也早就支持暗黑模式,Android也一样可以实现,下面这篇文章主要给大家介绍了关于Android如何快速适配暗黑模式的相关资料,需要的朋友可以参考下
    2021-08-08
  • android实现双日期选择控件(可隐藏日,只显示年月)

    android实现双日期选择控件(可隐藏日,只显示年月)

    本篇文章主要介绍了android实现双日期选择控件(可隐藏日,只显示年月) ,非常具有实用价值,需要的朋友可以参考下。
    2017-01-01
  • Android 应用适配 Android 7.0 权限要求详解

    Android 应用适配 Android 7.0 权限要求详解

    今天小编就为大家分享一篇Android 应用适配 Android 7.0 权限要求详解,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-08-08
  • Flutter实现矩形取色器的封装

    Flutter实现矩形取色器的封装

    这篇文章主要为大家详细介绍了Flutter实现矩形取色器的封装,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-10-10

最新评论