自定义progressBar(进度条)

首先在drawable文件夹下画出progressBar的形状

shape_progressbar.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="20dp" />

            <gradient
                android:angle="270"
                android:centerY="0.75"
                android:endColor="#F5F5F5"
                android:startColor="#BEBEBE" />
        </shape>
    </item>
    <item android:id="@android:id/secondaryProgress">
        <clip>
            <shape>
                <corners android:radius="20dip" />

                <gradient
                    android:angle="270"
                    android:centerY="0.75"
                    android:endColor="#165CBC"
                    android:startColor="#85B0E9" />
            </shape>
        </clip>
    </item>
    <item android:id="@android:id/progress">
        <clip>
            <shape>
                <corners android:radius="20dip" />

                <gradient
                    android:angle="270"
                    android:centerY="0.75"
                    android:endColor="#165CBC"
                    android:startColor="#85B0E9" />
            </shape>
        </clip>
    </item>

</layer-list>

在styles.xml中引用这个画出的progressBar,shape_progressbar.xml

在styles.xml中加入

    <style name="ota_progressbar" parent="@android:style/Widget.ProgressBar.Horizontal">
        <item name="android:maxHeight">50dp</item>
        <item name="android:minHeight">8dp</item>
        <item name="android:indeterminateOnly">false</item>
        <item name="android:indeterminateDrawable">@android:drawable/progress_indeterminate_horizontal</item>
        <item name="android:progressDrawable">@drawable/shape_progressbar</item>
    </style>
写Java类来继承ProgressBar,自定义一个ProgressBar,起名叫OtaProgressBar

package com.hipad.fota.activity;

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

public class OtaProgressBar extends ProgressBar {

    private String mTextProgress;
    private Paint mPaint;

    public OtaProgressBar(Context context) {
        super(context);
        initPaint();
    }

    public OtaProgressBar(Context context, AttributeSet attrs) {
        super(context, attrs);
        initPaint();
    }

    public OtaProgressBar(Context context, AttributeSet attrs, int defStyle) {
        super(context, attrs, defStyle);
        initPaint();
    }

    @Override
    public synchronized void setProgress(int progress) {
        super.setProgress(progress);
        setTextProgress(progress);
    }
    
    private void initPaint() {
        mPaint = new Paint();
        mPaint.setAntiAlias(true);
        mPaint.setColor(Color.WHITE);
        mPaint.setTextSize(30);
    }
    
    private void setTextProgress(int progress){
       int i = (int)((progress * 1.0f / getMax()) * 100);
       mTextProgress = String.valueOf(i) + "%";
    }

    @Override
    protected synchronized void onDraw(Canvas canvas) {
        super.onDraw(canvas);
        Rect rect = new Rect();
        mPaint.getTextBounds(mTextProgress, 0, mTextProgress.length(), rect);
        int x = (getWidth() / 2) - rect.centerX();
        int y = (getHeight() / 2) - rect.centerY();
        canvas.drawText(mTextProgress, x, y, mPaint);
    }

}

在需要加入该进度条的布局文件中加入我们自定义的ProgressBar

                <com.hipad.fota.activity.OtaProgressBar
                    android:id="@+id/ota_progressbar"
                    style="@style/ota_progressbar"
                    android:layout_width="match_parent"
                    android:layout_height="50dp"
                    android:layout_centerHorizontal="true"
                    android:layout_centerVertical="true" >
                </com.hipad.fota.activity.OtaProgressBar>

这样便成功自定义了一个ProgressBar
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值