如何给ProgressBar设置进度标识

给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地址:

https://download.csdn.net/download/t7g367/12488275

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

零九

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值