您的位置:首页 > 其它

自定义progressBar(进度条)

2015-12-28 10:31 363 查看
首先在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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: