Android带数字的进度条

135 阅读1分钟
Android带数字的进度条

进度条一边走,上分进度数字也跟着走,显示当前百分比。

一、思路:

通过进度条进度计算ViewGroup.MarginLayoutParams,设给TextView

二、效果图:

在这里插入图片描述

三、关键代码:
public class MainActivity extends AppCompatActivity {

    private ProgressBar progesss;
    private TextView progesssValue;
    private LinearLayout full;
    private ImageView iv_cicle;

    protected static final int WHAT_INCREASE = 1;
    private int progress;
    private Handler handler = new Handler() {
        public void handleMessage(android.os.Message msg) {
            progress++;
            progesss.setProgress(progress);
            setPos();
            handler.sendEmptyMessageDelayed(WHAT_INCREASE, getRadomNumber(50, 200));
            if (progress  == 100) {
                handler.removeMessages(WHAT_INCREASE);
            }
        }
    };

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        progesss = (ProgressBar) findViewById(R.id.progesss1);
        progesssValue = (TextView) findViewById(R.id.progesss_value1);
        full = (LinearLayout) findViewById(R.id.full);
        iv_cicle = (ImageView) findViewById(R.id.iv_cicle);


        findViewById(R.id.tv_move).setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                progress = 0;
                progesss.setProgress(progress);
                setPos();
                handler.removeMessages(WHAT_INCREASE);
                handler.sendEmptyMessage(WHAT_INCREASE);
            }
        });

//        progesss.setProgress(100);
//        setPos();
    }

    /**
     * 设置进度显示在对应的位置
     */
    public void setPos() {
        int w = progesss.getWidth();
        Log.e("w=====", "" + w);
        ViewGroup.MarginLayoutParams params = (ViewGroup.MarginLayoutParams) progesssValue.getLayoutParams();

        ViewGroup.MarginLayoutParams paramsImage = (ViewGroup.MarginLayoutParams) iv_cicle.getLayoutParams();

        int pro = progesss.getProgress();
        int tW = progesssValue.getWidth();
        if (w * pro / 100 + tW * 0.3 > w) {
            params.leftMargin = (int) (w - tW * 1.1);
            paramsImage.leftMargin = (int) (w - tW * 1.1)+5;
        } else if (w * pro / 100 < tW * 0.7) {
            params.leftMargin = 0;
            paramsImage.leftMargin = 0;
        } else {
            params.leftMargin = (int) (w * pro / 100 - tW * 0.7);
            paramsImage.leftMargin = (int) (w * pro / 100 - tW * 0.7)+5;
        }
四、项目demo源码结构图:

在这里插入图片描述

有问题或者需要完整源码demo的可以看简介联系我,也可以私信我,我每天都看私信的