自定义样式及带数字ProgressBar

   Android系统自带的ProgressBar样式简单,很多时候不能满足项目需求。最近因项目需要,下了一番功夫研究了一下并自定义了一个ProgressBar,特此记录,并希望能帮助到有需要的朋友们~~~

先上效果图:

    其中第一个为系统样式,不多说。

    第二个为自定义样式的ProgressBar。具体实现方式:

1.在drawable目录下新建一个xml文件,本例中为progress_drawable.xml,具体代码如下:

<layer-list xmlns:android="http://schemas.android.com/apk/res/android"> 

<!-- 设置背景资源 --> <item android:id="@android:id/background"> 

<nine-patch android:src="@drawable/img_39e3c5"/> </item> 

<!-- 设置进度条资源 --> <item android:id="@android:id/progress"> 

<clip> <nine-patch android:src="@drawable/img_94fbdf"/> </clip> </item></layer-list>定义了一个layer-list标签的图层样式,其中包含的两个标签分别表示ProgressBar的背景样式及进度样式。

2.在布局文件中将步骤1中的样式指定给ProgressBar的progressDrawable属性,具体代码如下:

   <ProgressBar
        android:id="@+id/custom_pb"
        android:layout_marginTop="5dp"
        android:progressDrawable="@drawable/progress_drawable"
        style="?android:attr/progressBarStyleHorizontal"
        android:layout_width="200dp"
        android:layout_height="35dp"/>

    第三个样式为带文字的ProgressBar,先上代码
package com.bruce.customprogressbardemo.view;

import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Paint;
import android.graphics.Rect;
import android.util.AttributeSet;
import android.widget.ProgressBar;

/**
 * Created by Bruce on 2015/9/23.
 */
public class DigitProgressBar extends ProgressBar {

    private float textSize = 45.0f;
    private Paint mPaint;
    private String mText, mSecondText;
    private Rect mRect;
    private int textColor = 0xFF2A2A2A;
    private boolean drawSecondTxt = false;

    public DigitProgressBar(Context context, AttributeSet attrs, int defStyle) {
        super(context, attrs, defStyle);
        init();
    }

    public DigitProgressBar(Context context, AttributeSet attrs) {
        super(context, attrs);
        init();
    }

    public DigitProgressBar(Context context) {
        super(context);
        init();
    }

    private void init() {
        mPaint = new Paint(Paint.FAKE_BOLD_TEXT_FLAG);//设置文字粗体
        mPaint.setAntiAlias(true); // 设置画笔的锯齿效果
        mPaint.setColor(textColor);
        mPaint.setTextSize(textSize);
        mRect = new Rect();
    }

    @Override
    public synchronized void setProgress(int progress) {
        setProgressText(progress);
        super.setProgress(progress);
    }

    private void setProgressText(int progress) {
        mText = formatDecim2Per(progress * 1.0 / getMax() * 100);
        mSecondText = formatDecim2Per((1 - (progress * 1.0 / getMax())) * 100);
    }

    @Override
    protected synchronized void onDraw(Canvas canvas) {
        super.onDraw(canvas);
        //绘制第一个百分比
        mPaint.getTextBounds(mText, 0, mText.length(), mRect);
        int x = 25;
        int y = (getHeight() / 2) - mRect.centerY();
        canvas.drawText(mText, x, y, mPaint);

        //绘制第二个百分比
        if (drawSecondTxt) {
            mPaint.getTextBounds(mSecondText, 0, mSecondText.length(), mRect);
            int secondx = getWidth() - 25 - mRect.width();
            int secondy = (getHeight() / 2) - mRect.centerY();
            canvas.drawText(mSecondText, secondx, secondy, mPaint);
        }
    }

    public float getTextSize() {
        return textSize;
    }

    public void setTextSize(float textSize) {
        this.textSize = textSize;
    }

    public int getTextColor() {
        return textColor;
    }

    public void setTextColor(int textColor) {
        this.textColor = textColor;
    }

    public boolean isDrawSecondTxt() {
        return drawSecondTxt;
    }

    public void setDrawSecondTxt(boolean drawSecondTxt) {
        this.drawSecondTxt = drawSecondTxt;
    }

	public static String formatDecim2Per(double decim) {
		String result = String.format("%.2f", decim);
		return result + "%";
	}

}


在这个自定义View中,核心代码为onDraw()方法,其中设置了绘制区域,并通过修改文字绘制的起始点坐标,最后调用drawText方法绘制。

是否显示右端的文字是通过setDrawSecondTxt()方法设置的,另外还提供了设置文字大小和文字颜色的API,可根据需求定制文字样式。


如文章有错漏或demo有BUG,欢迎指正,求教育,求教导~~~

源码下载地址

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
ProgressBar 是 Android 开发中常用的控件之一,它用于展示进度条。ProgressBar 的样式可以通过修改其属性或使用自定义样式来进行自定义。 下面是一个简单的 ProgressBar 自定义样式的示例: 1. 首先,在 `res/drawable` 目录下创建一个 XML 文件,例如 `custom_progress_bar.xml`。 ```xml <?xml version="1.0" encoding="utf-8"?> <layer-list xmlns:android="http://schemas.android.com/apk/res/android"> <item android:id="@android:id/background"> <shape> <corners android:radius="8dp"/> <solid android:color="#e0e0e0"/> </shape> </item> <item android:id="@android:id/progress"> <clip> <shape> <corners android:radius="8dp"/> <solid android:color="#00FF00"/> </shape> </clip> </item> </layer-list> ``` 2. 在布局文件中使用自定义ProgressBar 样式。 ```xml <ProgressBar android:id="@+id/progressBar" style="@android:style/Widget.ProgressBar.Horizontal" android:layout_width="match_parent" android:layout_height="wrap_content" android:progressDrawable="@drawable/custom_progress_bar" android:indeterminate="false" android:max="100" android:progress="50"/> ``` 在这个示例中,我们定义了一个自定义ProgressBar 样式 `custom_progress_bar.xml`,并在布局文件中使用了这个样式。通过设置 `android:progressDrawable` 属性为自定义样式,我们可以实现自定义 ProgressBar 样式的效果。 这个示例中的自定义 ProgressBar 样式是一个分层列表,其中包含了两个项目: * `android:id="@android:id/background"`:用于设置 ProgressBar 的背景样式。 * `android:id="@android:id/progress"`:用于设置 ProgressBar 的进度样式。 在这个示例中,我们使用了圆角矩形来设置 ProgressBar 的形状,并使用了绿色的颜色来表示 ProgressBar 的进度。你可以根据自己的需要修改这些属性来实现自定义ProgressBar 样式

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值