android 水平progressBar动态加载

当你需要动态显示一个progressBar时,动态显示进度,并在右侧显示加载进度,请参考下面代码:
重写写布局


public class LineProgressBar extends View {

private Paint paint;
private int lineColor;
private int lineProgressColor;
private int textColor;
private float textSize;
private float textWidth;
private float textMargin;
private float lineHeight;
private int max;
private int progress = 0;
private RectF pLine, bLine;
private int progressOne;

public LineProgressBar(Context context) {
this(context, null);
}


public LineProgressBar(Context context, AttributeSet attrs) {
this(context, attrs, 0);
}


public LineProgressBar(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);


progressOne = 0;
paint = new Paint();


TypedArray mTypedArray = context.obtainStyledAttributes(attrs,
R.styleable.LineProgressBar);


// 获取自定义属性和默认值
lineColor = mTypedArray.getColor(
R.styleable.RoundProgressBar_lineColor, Color.RED);
lineHeight = mTypedArray.getDimension(
R.styleable.RoundProgressBar_lineHeight, 10);
lineProgressColor = mTypedArray.getColor(
R.styleable.RoundProgressBar_lineProgressColor, Color.GREEN);
textColor = mTypedArray.getColor(
R.styleable.RoundProgressBar_textColor, Color.GREEN);
textSize = mTypedArray.getDimension(
R.styleable.RoundProgressBar_textSize, 15);
textWidth = mTypedArray.getDimension(
R.styleable.RoundProgressBar_textWidth, 30);
textMargin = mTypedArray.getDimension(
R.styleable.RoundProgressBar_textMargin, 5);
max = mTypedArray.getInteger(R.styleable.RoundProgressBar_max, 100);


mTypedArray.recycle();
pLine = new RectF();
}


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

float width = getWidth();
float height = getHeight();
float margin = (height - lineHeight)/2;
float drawHeight = lineHeight + margin;

if(bLine == null) bLine = new RectF(0, margin, width-textWidth-textMargin, drawHeight);

paint.setColor(lineColor); // 设置背景颜色
paint.setStyle(Paint.Style.FILL); // 设置填充
paint.setAntiAlias(true); // 消除锯齿
canvas.drawRoundRect(bLine, 5, 5, paint); //画进度背景


paint.setStrokeWidth(0);
paint.setColor(textColor);//设置字体颜色
paint.setTextSize(textSize);//设置字体大小
paint.setTypeface(Typeface.DEFAULT); // 设置字体
int percent = (int) (((float) progressOne / (float) max) * 100); 

canvas.drawText(percent + "%", width - textWidth - textMargin, height, paint); // 画出进度百分比

paint.setColor(lineProgressColor);//设置进度颜色
pLine.set(0, margin, progressOne*(width-textWidth-textMargin)/max, drawHeight);
canvas.drawRoundRect(pLine, 5, 5, paint);//画进度

if (progressOne < progress) {//循环画
invalidate();
progressOne++;
}
}


public synchronized int getMax() {
return max;
}


public synchronized void setMax(int max) {
if (max < 0) {
throw new IllegalArgumentException("max not less than 0");
}
this.max = max;
}


public synchronized int getProgress() {
return progress;
}


public synchronized void setProgress(int progress) {
if (progress < 0) {
throw new IllegalArgumentException("progress not less than 0");
}
if (progress > max) {
progress = max;
}
if (progress <= max) {
this.progress = progress;
progressOne = 0;
postInvalidate();
}
}


public int getTextColor() {
return textColor;
}


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


public float getTextSize() {
return textSize;
}


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

用到的其他代码:

<declare-styleable name="LineProgressBar">
        <attr name="textColor" format="color" />
        <attr name="textSize" format="dimension" />
        <attr name="max" format="integer"></attr>
        <attr name="textIsDisplayable" format="boolean"></attr>
        <attr name="lineColor" format="color" />
        <attr name="lineHeight" format="dimension" />
        <attr name="lineProgressColor" format="color" />
        <attr name="textWidth" format="dimension" />
        <attr name="textMargin" format="dimension" />
    </declare-styleable>

使用方式:xml

<....LineProgressBar
    android:id="@+id/details_line_progress"
    android:layout_width="match_parent"
    android:layout_height="10dp"
    android:layout_marginLeft="5dp"
    android:layout_marginRight="5dp"
    android_custom:lineColor="@color/whitebl"
    android_custom:lineHeight="5dp"
    android_custom:lineProgressColor="@color/title_color"
    android_custom:max="100"
    android_custom:textColor="@color/title_color"
    android_custom:textMargin="5dp"
    android_custom:textSize="14sp"
    android_custom:textWidth="30dp" >
</....LineProgressBar>

使用方式:代码

LineProgressBar progress;
....//初始化
progress.setProgress(80);
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值