给ProgressBar设置进度标识
自定义MyProgress继承ProgressBar,复写
@Override
public synchronized void setProgress(int progress) {
// TODO Auto-generated method stub
setText(progress);
super.setProgress(progress);
}
在setText(int progress)中设置回调
/**
* 设置文字进度
* @param progress 当前进度
*/
private void setText(int progress){
//callBackI 是自定义的一个接口,用于当前进度的回调
if(callBackI!=null){
callBackI.onCallBack(progress);
}
}
然后在回调实现的地方 设置当前的进度数字显示,包括位置和数值
主要是设置位置:通过设置左边距离leftMargin的原理,假设现在布局文件tips位于myProgress左上方,现在只是设置tips的水平左间距,做到上图所示
/**
*
* @param myProgress 自定义进度条
* @param tips 显示数字进度的tips
* @param progress 当前进度
*/
private void setTipsText(MyProgress myProgress,TextView tips,int progress){
int marginLeftInt=0;//初始化tips的左间距
if(myProgress.getMax()!=0){
/*
* ViewUtil.getViewWidth(tips)自定义的 丈量 view的宽度
* myProgress的宽度*当前进度的百分比-tips宽度的一半,既是左边的间距,
* 这样tips就会在当前进度的地方显示,并且以当前进度的地方居中显示
*/
marginLeftInt=myProgress.getmWidth()*progress/myProgress.getMax()- ViewUtil.getViewWidth(tips)/2;
}
tips.setText(String.valueOf(progress));//设置tips的数值
/*
*重设tips的左间距
*/
ConstraintLayout.LayoutParams lp=( ConstraintLayout.LayoutParams)(tips.getLayoutParams());
lp.leftMargin=marginLeftInt>=0?marginLeftInt:0;
tips.setLayoutParams(lp);
}
public class ViewUtil {
public static int getViewWidth(View view){
int widthSpec = View.MeasureSpec.makeMeasureSpec(0, View.MeasureSpec.UNSPECIFIED);
int heightSpec = View.MeasureSpec.makeMeasureSpec(0, View.MeasureSpec.UNSPECIFIED);
View.MeasureSpec.makeMeasureSpec(0, View.MeasureSpec.UNSPECIFIED);
view.measure(widthSpec, heightSpec);
int measuredWidth = view.getMeasuredWidth();//测量得到的宽
return measuredWidth;
}
public static int getViewHeight(View view){
int widthSpec = View.MeasureSpec.makeMeasureSpec(0, View.MeasureSpec.UNSPECIFIED);
int heightSpec = View.MeasureSpec.makeMeasureSpec(0, View.MeasureSpec.UNSPECIFIED);
View.MeasureSpec.makeMeasureSpec(0, View.MeasureSpec.UNSPECIFIED);
view.measure(widthSpec, heightSpec);
int measuredHeight = view.getMeasuredHeight();//测量得到的高
return measuredHeight;
}
}
以下是完整demo的地址,使用的是androidx的ConstraintLayout
androidx.constraintlayout.widget.ConstraintLayout
如果你版本比较低,可以将其改回
android.support.constraint.ConstraintLayout
并将build文件里面dependencies依赖改回ConstraintLayout所需要的依赖版本
如果还不能运行demo,那将demo里的gradle版本改到你的编译器能运行即
demo地址: