android 自定义ProgressBar 文字跟随进度效果

来源:互联网 发布:淘宝自动下架之后 编辑:程序博客网 时间:2024/05/08 08:10

mark

1 字体适配

    private void textSizeAdaptive() {        //1.获取当前设备的屏幕大小        DisplayMetrics displayMetrics = getResources().getDisplayMetrics();        //2.计算与你开发时设定的屏幕大小的纵横比(这里假设你开发时定的屏幕大小是480*800)        int screenWidth = displayMetrics.widthPixels;        int screenHeight = displayMetrics.heightPixels;        float ratioWidth = (float) screenWidth / 1080;        float ratioHeight = (float) screenHeight / 1920;        ratio = Math.min(ratioWidth, ratioHeight);        if (ratioWidth != ratioHeight) {            if (ratio == ratioWidth) {                offsetLeft = 0;                offsetTop = Math.round((screenHeight - 1920 * ratio) / 2);            } else {                offsetLeft = Math.round((screenWidth - 1080 * ratio) / 2);                offsetTop = 0;            }        }        //3.根据上一步计算出来的最小纵横比来确定字体的大小(假定在1080*1920屏幕下字体大小设定为35)        TEXT_SIZE = Math.round(textsize * ratio);    }
  1. onDraw
@Override    protected synchronized void onDraw(Canvas canvas) {        // TODO Auto-generated method stub        super.onDraw(canvas);        canvas.save();        mText = (getProgress() * 100 / getMax()) + "%";        Rect rect = new Rect();        mPaint.getTextBounds(leftText, 0, leftText.length(), rect);        int y = (getHeight() / 2) - rect.centerY();        //在进度条上画上自定义文本        canvas.drawText(leftText, 5, y, mPaint);        int width = rect.width();        //进度        float radio = getProgress() * 1.0f / getMax();        float progressPosX = (int) (mRealWidth * radio);        //起始点        int beginX = 10 + width;        //结束点        float textWidth = mPaint.measureText(mText);        float endX = mRealWidth - textWidth;        if (beginX > progressPosX- textWidth) {            canvas.drawText(mText, beginX, y, mPaint);        } else if (progressPosX- textWidth > endX) {            canvas.drawText(mText, endX, y, mPaint);        } else {            canvas.drawText(mText, progressPosX - textWidth, y, mPaint);        }        canvas.restore();    }

下载地址 http://download.csdn.net/download/liudao7994/10130885

阅读全文
0 0