您的位置:首页 > 移动开发 > Android开发

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

2017-11-24 10:05 811 查看


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


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 ProgressBa