«

android 水平progressBar动态加载

时间:2024-3-2 17:16     作者:韩俊     分类: Android


当你需要动态显示一个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);

标签: android

热门推荐