您的位置:

Android自定义进度条实现步骤

Android自定义进度条实现步骤

更新:

一、了解自定义进度条

Android提供了ProgressBar控件,可以用于显示进度条,在进行长时间操作或加载资源时,可以通过进度条让用户感知到操作的进展。但是ProgressBar本身的样式有限,不能满足特殊的设计需求,此时可以考虑自定义进度条。

自定义进度条可以灵活控制进度的样式、颜色、大小等,同时也可以进行动态的渲染和交互。自定义进度条一般使用Canvas和Paint来绘制进度效果,通过实现自定义View或继承ProgressBar来实现。

二、自定义View实现进度条

1、新建一个自定义View,继承View类,并实现onDraw()方法。onDraw()方法是用来绘制自定义View的主要方法。这里我们使用Canvas和Paint来进行绘制,绘制的内容是一个矩形,矩形的长度和宽度都是根据当前进度值来计算得出。

public class CustomProgressBar extends View {

    private Paint mPaint;
    private RectF mRectF;
    private int mProgressBarColor;
    private int mProgressBarHeight;
    private int mMaxValue;
    private int mCurrentValue;

    public CustomProgressBar(Context context) {
        super(context);
        initView();
    }

    public CustomProgressBar(Context context, AttributeSet attrs) {
        super(context, attrs);
        initView();
        parseAttrs(attrs);
    }

    public CustomProgressBar(Context context, AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);
        initView();
        parseAttrs(attrs);
    }

    private void initView() {
        mProgressBarColor = Color.BLUE;
        mProgressBarHeight = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 5, getResources().getDisplayMetrics());
        mMaxValue = 100;
        mCurrentValue = 0;

        mPaint = new Paint();
        mPaint.setStyle(Paint.Style.FILL);
        mPaint.setAntiAlias(true);

        mRectF = new RectF();
    }

    private void parseAttrs(AttributeSet attrs) {
        TypedArray typedArray = getContext().obtainStyledAttributes(attrs, R.styleable.CustomProgressBar);
        mProgressBarColor = typedArray.getColor(R.styleable.CustomProgressBar_progressBarColor, Color.BLUE);
        mProgressBarHeight = typedArray.getDimensionPixelSize(R.styleable.CustomProgressBar_progressBarHeight, (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 5, getResources().getDisplayMetrics()));
        mMaxValue = typedArray.getInt(R.styleable.CustomProgressBar_maxValue, 100);
        mCurrentValue = typedArray.getInt(R.styleable.CustomProgressBar_currentValue, 0);
        typedArray.recycle();
    }

    @Override
    protected void onDraw(Canvas canvas) {
        super.onDraw(canvas);

        mPaint.setColor(mProgressBarColor);
        mRectF.set(0, 0, getWidth() * mCurrentValue / mMaxValue, mProgressBarHeight);
        canvas.drawRect(mRectF, mPaint);
    }

    public void setMaxValue(int maxValue) {
        this.mMaxValue = maxValue;
    }

    public void setCurrentValue(int currentValue) {
        this.mCurrentValue = currentValue;
        invalidate();
    }
}

2、在attrs.xml文件中定义自定义属性,这些属性将用于在XML布局文件中设置进度条的样式和属性。

    
    
     
        
      
        
      
        
      
        
      
    
     

    

3、在XML布局文件中使用自定义进度条。

    

4、在Activity中设置自定义进度条的最大值和当前值,调用setCurrentValue()方法更新进度条的进度。

CustomProgressBar progressBar = findViewById(R.id.progress_bar);
progressBar.setMaxValue(100);
progressBar.setCurrentValue(50);

三、继承ProgressBar实现进度条

1、新建一个自定义ProgressBar,继承ProgressBar类,重写onDraw()方法。onDraw()方法是用来绘制进度条的主要方法。这里我们使用Canvas和Paint来进行绘制,绘制的内容是一个矩形。

public class CustomProgressBar extends ProgressBar {

    private Paint mPaint;
    private RectF mRectF;
    private int mProgressBarColor;
    private int mProgressBarHeight;

    public CustomProgressBar(Context context) {
        super(context);
        initView();
    }

    public CustomProgressBar(Context context, AttributeSet attrs) {
        super(context, attrs);
        initView();
        parseAttrs(attrs);
    }

    public CustomProgressBar(Context context, AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);
        initView();
        parseAttrs(attrs);
    }

    private void initView() {
        mProgressBarColor = Color.BLUE;
        mProgressBarHeight = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 5, getResources().getDisplayMetrics());

        mPaint = new Paint();
        mPaint.setStyle(Paint.Style.FILL);
        mPaint.setAntiAlias(true);

        mRectF = new RectF();
    }

    private void parseAttrs(AttributeSet attrs) {
        TypedArray typedArray = getContext().obtainStyledAttributes(attrs, R.styleable.CustomProgressBar);
        mProgressBarColor = typedArray.getColor(R.styleable.CustomProgressBar_progressBarColor, Color.BLUE);
        mProgressBarHeight = typedArray.getDimensionPixelSize(R.styleable.CustomProgressBar_progressBarHeight, (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 5, getResources().getDisplayMetrics()));
        typedArray.recycle();
    }

    @Override
    protected synchronized void onDraw(Canvas canvas) {
        super.onDraw(canvas);

        mPaint.setColor(mProgressBarColor);
        mRectF.set(getPaddingLeft(), getHeight() - mProgressBarHeight - getPaddingBottom(),
                getWidth() * getProgress() / getMax() - getPaddingRight(),
                getHeight() - getPaddingBottom());
        canvas.drawRect(mRectF, mPaint);
    }
}

2、在attrs.xml文件中定义自定义属性,这些属性将用于在XML布局文件中设置进度条的样式和属性。

    
    
     
        
      
        
      
    
     

    

3、在XML布局文件中使用自定义进度条。

    

4、在Activity中设置自定义进度条的最大值和当前值,调用setProgress()方法更新进度条的进度。

CustomProgressBar progressBar = findViewById(R.id.progress_bar);
progressBar.setMax(100);
progressBar.setProgress(50);

综上所述,通过自定义View或继承ProgressBar可以实现自定义进度条,可以根据需求来选择实现方式,并进行样式和属性的自定义。

Android自定义进度条实现步骤

一、了解自定义进度条 Android提供了ProgressBar控件,可以用于显示进度条,在进行长时间操作或加载资源时,可以通过进度条让用户感知到操作的进展。但是ProgressBar本身的样式有限,

2023-12-08
Android自定义View实现圆形进度条

2023-05-14
android自定义控件

2023-05-17
Android自定义View:掌握Canvas和Paint实

2023-05-14
Android自定义注解指南

2023-05-17
Joplin Server安装及配置教程 | 实现跨平台笔记

2023-05-16
Android进度条详解

2023-05-20
在Android Studio 1中创建自定义主题

2023-05-14
Android自定义View实现导航栏

导航栏是Android应用的一个重要组成部分,它可以帮助用户快速切换应用内的页面,提高用户体验。在实际开发中,我们经常会遇到导航栏的定制需求,而自定义View就成了一个很好的选择。本文将介绍如何使用自

2023-12-08
Android自定义广播详解

2023-05-20
Android进度对话框:展示异步任务执行进度

2023-05-14
Android RecyclerView自定义分割线样式实现

2023-05-14
提升电脑运行速度的办法——安装Android系统

2023-05-14
Android应用自定义URI,实现应用间跳转

2023-05-14
打造精美的Android进度条样式

2023-05-14
Android设置:如何自定义应用程序的图标和名称?

2023-05-17
Android自定义SeekBar控件实现

2023-05-14
让你的Android App更加专业:实现状态栏颜色自定义

2023-05-14
Android进度条控件的完整实现教程

2023-05-21
Android 自定义属性详解

2023-05-23