直播系统开发,实现在进度条中显示文字显示进度
直播系统开发,实现在进度条中显示文字显示进度的相关代码
public class MyProgressBar extends ProgressBar {
private String mText;
private Paint mPaint;
private int remain;
public MyProgressBar(Context context) {
super(context);
initText();
}
public MyProgressBar(Context context, AttributeSet attrs) {
super(context, attrs);
initText();
}
public MyProgressBar(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
initText();
}
@Override
public synchronized void setProgress(int progress) {
setText(progress);
super.setProgress(progress);
}
@Override
protected synchronized void onDraw(Canvas canvas) {
super.onDraw(canvas);
Rect rect = new Rect();
this.mPaint.getTextBounds(this.mText, 0, this.mText.length(), rect);
int x = (getWidth() / 2) - rect.centerX();
int y = (getHeight() / 2) - rect.centerY();
canvas.drawText(this.mText, x, y, this.mPaint);
}
private void initText(){
this.mPaint = new Paint();
this.mPaint.setColor(Color.WHITE);
this.mPaint.setAntiAlias(true);
this.mPaint.setTextSize(34.f);
}
private void setText(int progress){
int i = (progress * 100)/this.getMax();
this.mText = String.valueOf(i) + "%("+getRemain()+" remaining)";
}
public int getRemain() {
return remain;
}
public void setRemain(int remain) {
this.remain = remain;
}
}
首先讲讲Android的Rect类的使用:
构造方法:
Public Constructors
Rect ()
Create a new empty Rect.
Rect(int left, int top, int right, int bottom)
Create a new rectangle with the specified coordinates.
Rect ( Rect r)
Create a new rectangle, initialized with the values in the specified rectangle (which is left unmodified).
常用方法:
final int centerX () //获取矩阵中心点(x,y)
Paint对象在开发过程中经常会用到,先看下Paint的常用Api
mPaint = new Paint();//初始化
mPaint.setColor(Color.RED);//设置颜色
mPaint.setARGB(255,255,255,0);//设置paint对象颜色,范围0~255
mPaint.setAlpha(200);//设置透明度 范围0~255
mPaint.setAntiAlias(true);//设置抗锯齿
mPaint.setStyle(Paint.Style.STROKE);//设置描边效果STROKE(描边) FILL(填充) 和FILL_AND_STROKE(同时作用)
mPaint.setStrokeWidth(4);//设置描边宽度
mPaint.setStrokeCap(Paint.Cap.ROUND);//设置圆角效果 BUTT(默认) ROUND(圆角) SQUARE(方形)
mPaint.setStrokeJoin(Paint.Join.MITER);//设置拐角风格 MITER(默认) ROUND(圆角填充) BEVEL(切除)
mPaint.setShader(new SweepGradient(200,200,Color.BLUE,Color.RED));//设置环形渲染器(着色器)
mPaint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.DARKEN));//设置图层混合模式
mPaint.setColorFilter(new LightingColorFilter(0x00ffff,0x000000));//设置颜色过滤器
mPaint.setFilterBitmap(true);//设置双线性过滤
mPaint.setMaskFilter(new BlurMaskFilter(10,BlurMaskFilter.Blur.NORMAL));//设置画笔遮罩滤镜,传入度数和样式
mPaint.setTextScaleX(2);//设置文本缩放倍数 默认是1
mPaint.setTextSize(38);//设置字体大小
mPaint.setTextAlign(Paint.Align.LEFT);//设置对其方式
mPaint.setUnderlineText(true);//设置下划线
String str="Paint测试效果";
Rect rect = new Rect();
mPaint.getTextBounds(str,0,str.length(),rect);//测量文本大小,将文本大小信息存放在rect中
mPaint.measureText(str);//获取文本的宽
mPaint.getFontMetrics();//获取字体度量对象
以上就是直播系统开发,实现在进度条中显示文字显示进度的相关代码, 更多内容欢迎关注之后的文章