广告
返回顶部
首页 > 资讯 > 移动开发 >Android View实现圆形进度条
  • 500
分享到

Android View实现圆形进度条

2024-04-02 19:04:59 500人浏览 独家记忆
摘要

本文实例为大家分享了Android View实现圆形进度条的具体代码,供大家参考,具体内容如下 主要涉及到下面几个方法: // 画圆 canvas.drawCircle // 画

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

主要涉及到下面几个方法:


// 画圆
canvas.drawCircle
// 画圆弧
canvas.drawArc
// 画文本
canvas.drawText
// 抗锯齿
paint.setAntiAlias(true);
// 设置颜色
paint.setColor(getResources().getColor(mFGColor, null));

其次就是对坐标的计算,还有注意就是画圆弧的时候,起始从-90度开始才是垂直上方。
效果图:

自定义View:


public class MyView extends View {
    // 线宽度
    private static final int mStrokeWidth = 50;
    private int mVal = 0;
    private static final int mMaxVal = 200;
    private int mGgColor = R.color.arcbg;
    private int mFgColor = R.color.arcfg;

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

    public MyView(Context context, @Nullable AttributeSet attrs) {
        super(context, attrs);
    }


    // 设置值
    public void setProgressValue(int val){
        this.mVal = val;
        invalidate();
    }


    @Override
    protected void onDraw(Canvas canvas) {
        super.onDraw(canvas);
        int width = getMeasuredWidth();
        int height = getMeasuredHeight();

        drawBGCircle(canvas, width, height);
        drawFGArc(canvas, width, height);
        drawText(canvas, width, height);
    }

    // 文本
    private void drawText(Canvas canvas, int width, int height) {
        Paint paint = new Paint();
        paint.setAntiAlias(true);
        paint.setColor(getResources().getColor(mFgColor, null));
        paint.setTextSize(120);
        int percent = (int) (( mVal / (float) mMaxVal ) * 100);
        canvas.drawText(percent + "%", (width - paint.measureText(percent + "%")) / 2, (height + paint.measureText("%")) / 2, paint);
    }

    // 圆弧
    private void drawFGArc(Canvas canvas, int width, int height) {
        Paint paint = new Paint();
        paint.setColor(getResources().getColor(mFgColor, null));
        paint.setStyle(Paint.Style.STROKE);
        paint.setStrokeWidth(mStrokeWidth);
        paint.setAntiAlias(true);
        RectF mRectF = new RectF(mStrokeWidth, mStrokeWidth, width - mStrokeWidth, height - mStrokeWidth);
        int sweepAngle = (int) (360 * mVal / (float) mMaxVal);
        canvas.drawArc(mRectF, -90, sweepAngle, false, paint);
    }

    // 底部圆形
    private void drawBGCircle(Canvas canvas, int width, int height) {
        int r = (width - 2 * mStrokeWidth) / 2;
        Paint cPaint = new Paint();
        cPaint.setColor(getResources().getColor(mGgColor, null));
        cPaint.setStyle(Paint.Style.STROKE);
        cPaint.setStrokeWidth(mStrokeWidth);
        cPaint.setAntiAlias(true);
        canvas.drawCircle(width / 2, height / 2, r, cPaint);
    }

    @Override
    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
        super.onMeasure(widthMeasureSpec, heightMeasureSpec);
        int width = getSize(widthMeasureSpec, 200);
        int height = getSize(heightMeasureSpec, 200);
        setMeasuredDimension(width, height);
    }

    private int getSize(int widthMeasureSpec, int defultSize) {
        int realSize = defultSize;
        int mode = MeasureSpec.getMode(widthMeasureSpec);
        int size = MeasureSpec.getSize(widthMeasureSpec);
        switch (mode){
            case MeasureSpec.UNSPECIFIED:
                realSize = defultSize;
                break;
            case MeasureSpec.AT_MOST:
                realSize = size;
                break;
            case MeasureSpec.EXACTLY:
                realSize = size;
                break;
        }
        return realSize;
    }
}

然后在布局文件中引用:


<com.weizu.myapplication.view.MyView
        android:id="@+id/myView"
        android:layout_width="150dp"
        android:layout_height="150dp"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent" />

最后,我们设置其点击效果,并开始耗时操作模拟:


MyView view = findViewById(R.id.myView);
view.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        new Thread(new Runnable() {
            @Override
            public void run() {
                int val = 0;
                while(val <= 200){
                    view.setProgressValue(val);
                    val++;
                    try {
                        Thread.sleep(20);
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                }
            }
        }).start();
    }
});

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

--结束END--

本文标题: Android View实现圆形进度条

本文链接: https://www.lsjlt.com/news/131608.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Android View实现圆形进度条
    本文实例为大家分享了Android View实现圆形进度条的具体代码,供大家参考,具体内容如下 主要涉及到下面几个方法: // 画圆 canvas.drawCircle // 画...
    99+
    2022-11-12
  • Android自定义View实现圆形进度条
    本文实例为大家分享了Android自定义View实现圆形进度条的具体代码,供大家参考,具体内容如下 原理非常简单,在自定义View的基础上使用Canvas的drawCircle画两个...
    99+
    2022-11-13
  • 怎么用Android View实现圆形进度条
    本篇内容主要讲解“怎么用Android View实现圆形进度条”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“怎么用Android View实现圆形进度条”吧!主要涉及到下面几个方法://&nbs...
    99+
    2023-06-20
  • Android自定义view实现圆形进度条效果
    Android中实现进度条有很多种方式,自定义进度条一般是继承progressBar或继承view来实现,本篇中讲解的是第二种方式。 先上效果图: 实现圆形进度条总体来说并不难,还...
    99+
    2022-11-13
  • Android自定义View实现圆形加载进度条
    本文实例为大家分享了Android自定义View实现圆形加载进度条的具体代码,供大家参考,具体内容如下 效果图 话不多说,咱们直接看代码 首先第一种: 1、创建自定义View类 p...
    99+
    2022-11-13
  • Android怎么自定义View实现圆形进度条
    本文小编为大家详细介绍“Android怎么自定义View实现圆形进度条”,内容详细,步骤清晰,细节处理妥当,希望这篇“Android怎么自定义View实现圆形进度条”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。原...
    99+
    2023-07-02
  • 详解Android如何自定义view实现圆形进度条
    Android中实现进度条有很多种方式,自定义进度条一般是继承progressBar或继承view来实现,本篇中讲解的是第二种方式。 先上效果图: 实现圆形进度条总体来说并不难,还...
    99+
    2022-11-13
  • android圆形进度条怎么实现
    要实现一个圆形进度条,你可以使用`ProgressBar`控件来实现,并将其样式设置为圆形。首先,在布局文件中添加以下代码:```x...
    99+
    2023-08-30
    android
  • android如何实现圆形进度条
    要实现圆形进度条,可以使用Android的自定义控件来实现。首先,在layout文件中定义一个圆形进度条的布局,例如circle_p...
    99+
    2023-08-20
    android
  • Android自定义View圆形进度条控件(三)
    继续练习自定义View,这次带来的圆形进度条控件与之前的圆形百分比控件大同小异,这次涉及到了渐变渲染以及画布旋转等知识点,效果如下: 虽然步骤类似,但是我还是要写,毕竟基础的...
    99+
    2022-06-06
    view 进度条 Android
  • Android实现自定义圆形进度条
    今天无意中发现一个圆形进度,想想自己实现一个,如下图: 基本思路是这样的: 1.首先绘制一个实心圆 2.绘制一个白色实心的正方形,遮住实心圆 3.在圆的中心动态绘制当前进度的...
    99+
    2022-06-06
    自定义 进度条 Android
  • android自定义view制作圆形进度条效果
    还是我们自定View的那几个步骤: 1、自定义View的属性 2、在View的构造方法中获得我们自定义的属性 [ 3、重写onMesure ] 4、重写onDraw 1、自定...
    99+
    2022-06-06
    view 进度条 Android
  • Android自定义View之圆形进度条式按钮
    介绍 今天上班的时候有个哥们问我怎么去实现一个按钮式的进度条,先来看看他需要实现的效果图。 和普通的圆形进度条类似,只是中间的地方有两个状态表示,未开始,暂停状态。而且他说圆...
    99+
    2022-06-06
    view 进度条 按钮 Android
  • Android自定义View圆形进度条控件的方法
    这篇文章主要讲解了Android自定义View圆形进度条控件的方法,内容清晰明了,对此有兴趣的小伙伴可以学习一下,相信大家阅读完之后会有帮助。继续练习自定义View,这次带来的圆形进度条控件与之前的圆形百分比控件大同小异,这次涉及到了渐变渲...
    99+
    2023-05-31
    android roi %d
  • Android中实现圆形进度条的方法
    本篇文章为大家展示了Android中实现圆形进度条的方法,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。主要思路是写一个继承ProgressBar的自定义View代码:package com.fun....
    99+
    2023-05-31
    android roi %d
  • Android自定义View实现圆形加载进度条效果的方法
    这篇文章将为大家详细讲解有关Android自定义View实现圆形加载进度条效果的方法,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。View仿华为圆形加载进度条效果图实现思路可以看出该View可分为三个部分...
    99+
    2023-05-30
    android view 进度条
  • Android自定义view实现圆环进度条效果
    本文实例为大家分享了Android自定义view实现圆环进度条效果的具体代码,供大家参考,具体内容如下 一、实现效果图 二、核心代码 自定义view的属性 <xml vers...
    99+
    2022-11-13
  • Android实现带数字的圆形进度条(自定义进度条)
    开发 设计搞了一个带圆形进度的进度条,在GitHub上逛了一圈,发现没有,自己撸吧。 先看界面效果: 主要思路是写一个继承ProgressBar的自定义View,不废话,直接...
    99+
    2022-06-06
    自定义 进度条 Android
  • Android自定义控件实现圆形进度条
    项目中常用到的圆形进度条有好多个,从网上搜到的自定义进度条多是封装的比较好的代码,但是不利于初学者,现在本博客就教给大家如何一步步实现自定义进度条的效果: 先看效果如图… ...
    99+
    2022-06-06
    进度条 Android
  • 在Android开发中通过自定义View实现一个圆形进度条
    这期内容当中小编将会给大家带来有关在Android开发中通过自定义View实现一个圆形进度条,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。首先来看看自己定义的Viewpackage cn.easymobi...
    99+
    2023-05-31
    android view roi
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作