Android自定义之圆形进度条

先来看看效果图,有图才有真相:

bar

arc

Usage

Android Studio 使用Gradle构建

dependencies {
    compile 'com.github.ws.circleprogress:circleprogress:2.1.5'
}

Maven

<dependency>
  <groupId>com.github.ws.circleprogress</groupId>
  <artifactId>circleprogress</artifactId>
  <version>2.1.5</version>
  <type>pom</type>
</dependency>

eclipse

请下载https://github.com/HpWens/ProgressDemo,依赖circleprogress

完成上面的依赖后,在布局文件中声明控件:

            <com.example.circleprogress.app.BarCircleProgress
             xmlns:app="http://schemas.android.com/apk/res-auto"
                android:id="@+id/bcp"
                app:backgroundColor="#0ff000" 
                android:layout_width="200dp"
                android:layout_height="200dp" />

Activity文件中:

         bcp= (BarCircleProgress) findViewById(R.id.bcp);

这样一个简单的进度条就出现在我们的眼前了:

progress

静止的进度条:

    <com.example.circleprogress.app.BarCircleProgress
        android:id="@+id/bcp"
        android:layout_width="200dp"
        android:layout_height="200dp"
        app:backgroundColor="#0ff000"
        app:currentProgress="20"
        app:isMove="false" />

Attribute

进度条的基础属性:

    /**
     * 设备背景颜色
     *
     * @param color
     */
    public void setBackgroundColor(int color) {
        backgroundPaint.setColor(color);
    }

    /**
     * 设置背景风格
     *
     * @param style
     * @param width
     */
    public void setBackgroundStyle(Paint.Style style, float width) {
        backgroundPaint.setStyle(style);
        if (style == Paint.Style.STROKE) {
            backgroundPaint.setStrokeWidth(DensityUtil.dip2px(ctx, width));
        }
    }

    /**
     * 设置背景空心 宽度
     *
     * @param width
     */
    public void setBackgroundStrokeWidth(float width) {
        backgroundPaint.setStyle(Paint.Style.STROKE);
        backgroundPaint.setStrokeWidth(DensityUtil.dip2px(ctx, width));
    }

    /**
     * 设置背景 的笔触类型
     *
     * @param cap
     */
    public void setBackgroundStrokeCap(Paint.Cap cap) {
        backgroundPaint.setStrokeCap(cap);
    }

    /**
     * 设置进度条 的笔触类型
     *
     * @param cap
     */
    public void setProgressStrokeCap(Paint.Cap cap) {
        progressPaint.setStrokeCap(cap);
    }

    /**
     * 设置进度条颜色
     *
     * @param color
     */
    public void setProgressColor(int color) {
        progressPaint.setColor(color);
    }

    /**
     * 设置进度条风格
     *
     * @param style
     * @param width
     */
    public void setProgressStyle(Paint.Style style, float width) {
        progressPaint.setStyle(style);
        if (style == Paint.Style.STROKE) {
            progressPaint.setStrokeWidth(DensityUtil.dip2px(ctx, width));
        }
    }

    /**
     * 设置文字颜色
     *
     * @param color
     */
    public void setTextColor(int color) {
        textPaint.setColor(color);
    }

    /**
     * 设置文字大小
     *
     * @param size
     */
    public void setTextSize(float size) {
        textPaint.setTextSize(DensityUtil.dip2px(ctx, size));
    }

    /**
     * 设置最大进度
     *
     * @param maxProgress
     */
    public void setMaxProgress(int maxProgress) {
        this.maxProgress = maxProgress;
    }

    /**
     * 设置当前进度
     *
     * @param currentProgress
     */
    public void setCurrentProgress(int currentProgress) {
        this.currentProgress = currentProgress;
    }

    /**
     * 设置开始角度
     *
     * @param angle
     */
    public void setStartAngle(float angle) {
        this.startAngle = angle;
    }


    /**
     * 是否是静止界面  还是动态界面
     *
     * @param isMove
     */
    public void setIsMove(boolean isMove) {
        this.isMove = isMove;
    }

    /**
     * 设置文本单位符号
     */
    public void setTextUnit(Unit mUnit) {
        switch (mUnit) {
            case TEMP:
                this.textUnit = TEMP_UNIT;
                break;
            case PERCENT:
                this.textUnit = PERCENT_UNIT;
                break;
        }
    }

    /**
     * @param size 0.0f~1.0f
     */
    public void setCircleSize(float size) {
        this.circleSize = size;
    }

当然你可能有更好的建议和方案,可以给我留言。学习很多时候就是在积累经验。源码地址请关注https://github.com/HpWens/ProgressDemo

  • 3
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
### 回答1: 要在Android自定义圆形进度条,可以按照以下步骤进行: 1. 首先,在XML布局文件中添加一个半圆形的View。可以使用自定义的View继承自View类,或者使用现有的绘图类如Canvas和Path来绘制半圆形。 2. 在自定义的View中,重写onDraw方法,通过Canvas对象绘制半圆形。可以使用drawArc方法来画出一个弧线,指定起点、终点和角度,来绘制半圆形。 3. 在自定义的View中添加一个属性来表示当前进度。可以使用属性动画或者定时器来不断更新进度,并调用invalidate方法来重绘View。 4. 在自定义的View中添加一些自定义属性,如颜色、宽度等,来实现进度条的样式定制。 5. 在Activity中使用这个自定义的View,可以通过findViewById找到它,并设置进度条的属性和监听器等。 通过以上步骤,就可以实现一个自定义的半圆形进度条。根据具体需求和设计,可以进行更多的样式和功能定制,如添加文本显示、动画效果等。 ### 回答2: 要实现Android自定义圆形进度条,可以采用以下步骤: 1. 首先,在布局文件中创建一个自定义View,用于绘制半圆形进度条。可以使用Canvas来进行绘制。在View的构造函数中初始化一些必要的参数,如进度条的颜色、背景颜色等。 2. 在自定义View的onDraw()方法中,使用Canvas绘制一个半圆形的背景,可以使用drawArc()方法,并设置起始角度和扫描角度。 3. 接着,绘制进度条的一段弧线。根据进度的值计算出起始和结束的角度,并使用drawArc()方法进行绘制。 4. 在Activity中,实例化自定义View,并将其添加到布局中。可以使用setProgress()方法来设置进度条的进度值。 5. 如果需要实现动画效果,可以使用ValueAnimator来改变进度值,并在动画过程中不断调用invalidate()方法来刷新视图。 总结:自定义圆形进度条的关键是使用Canvas的drawArc()方法进行绘制,根据进度值来计算起始和结束的角度,并使用invalidate()方法来进行视图的刷新。通过这些步骤,即可实现Android自定义圆形进度条的效果。 ### 回答3: 要实现Android自定义圆形进度条,可以通过自定义View来实现。 首先,创建一个继承自View的自定义View类,并重写其中的三个方法:onMeasure()、onDraw()和onSizeChanged()。 在onMeasure()方法中,设置View的宽度和高度,可以根据需求来设置,比如设置为200dp,然后将测量的结果保存。 在onSizeChanged()方法中,获取View的宽度和高度,用于后续计算绘制进度条的位置。 在onDraw()方法中,绘制半圆形进度条的背景和进度。首先,使用Paint类创建两个画笔,一个用于绘制背景,一个用于绘制进度。然后,通过Path类创建一个半圆形的路径,使用drawPath()方法绘制出半圆形。接着,根据进度计算出进度条的结束位置,使用drawArc()方法绘制出进度条。最后,使用drawText()方法绘制出进度的文字。 在Activity或Fragment中使用自定义View,可以通过布局文件或代码的方式进行添加。如果使用布局文件,可以在XML文件中使用自定义的命名空间,并设置View的属性。如果使用代码,可以在onCreate()方法中使用addView()方法添加。 以上就是实现Android自定义圆形进度条的大致步骤。根据具体需求,还可以添加其他功能,比如添加动画效果,改变进度条的颜色等。
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值