水平progressbar 带底部指示器和文字

来源:互联网 发布:js字符串去掉换行符 编辑:程序博客网 时间:2024/05/02 00:15

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


列出源码:

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;    }}


阅读全文
0 0