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

android 自定义ProgressBar 文字跟随进度效果_第1张图片

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

你可能感兴趣的:(android,自定义view,高级UI,android自定义view,高级UI)