Android progressbar实现带底部指示器和文字的进度条

本文实例为大家分享了Android实现带指示器和文字的进度条,供大家参考,具体内容如下

根据项目要求需要实现以下效果:

列出源码:

public class TextProgressBar extends LinearLayout {

String text;

Paint mPaint;

private Rect textRect;

private Bitmap bitmap;

private ProgressBar progressBar;

int progress;

int proWidth, proHeight;

public TextProgressBar(Context context, AttributeSet attrs, int defStyleAttr) {

super(context, attrs, defStyleAttr);

initText(context);

}

public TextProgressBar(Context context) {

super(context);

initText(context);

}

public TextProgressBar(Context context, AttributeSet attrs) {

super(context, attrs);

initText(context);

}

@Override

protected synchronized void onDraw(Canvas canvas) {

super.onDraw(canvas);

progress = progressBar.getProgress();

if (progress == 0 || progress == progressBar.getMax())

return;

this.mPaint.getTextBounds(this.text, 0, this.text.length(), textRect);

proWidth = progressBar.getWidth();

proHeight = progressBar.getHeight();

//画指示器

int bitmapx = (int) (progressBar.getLeft() + proWidth * ((progress * 1f) / progressBar.getMax())) - bitmap.getWidth() / 2;

int bitmapy = proHeight + bitmap.getHeight() / 2;

if (bitmapx < 0)

bitmapx = progressBar.getLeft();

if(bitmapx > progressBar.getRight()-bitmap.getWidth())

bitmapx = progressBar.getRight()-bitmap.getWidth();

canvas.drawBitmap(bitmap, bitmapx, bitmapy, mPaint);

//写字

int tvx = (int) (progressBar.getLeft() + proWidth * ((progress * 1f) / progressBar.getMax())) - textRect.centerX();

int tvy = proHeight + bitmap.getHeight() * 2 + 4;

if (tvx < 0)

tvx = progressBar.getLeft();

if(tvx >= progressBar.getRight()-textRect.width())

tvx = progressBar.getRight()-textRect.width();

canvas.drawText(this.text, tvx, tvy + bitmap.getHeight(), this.mPaint);

}

//初始化,画笔

private void initText(Context context) {

View inflate = View.inflate(context, R.layout.textprogressbar, this);

progressBar = (ProgressBar) inflate.findViewById(R.id.progressbar1);

progressBar.setProgress(50);

setWillNotDraw(false);

this.mPaint = new Paint();

this.mPaint.setColor(getResources().getColor(R.color.red));

this.mPaint.setTextSize(20);

textRect = new Rect();

text = "0";

bitmap = BitmapFactory.decodeResource(context.getResources(), R.mipmap.progress_top);

}

public void setProgress(int progress) {

progressBar.setProgress(progress);

}

public void setText(String str) {

text = str;

}

}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。

以上是 Android progressbar实现带底部指示器和文字的进度条 的全部内容, 来源链接: utcz.com/p/241514.html

回到顶部