如何在android中活动开始时从左到右显示虚拟进度条



我想制作一个虚拟进度条,在指定的时间(如200毫秒)从屏幕的最左边开始,到右边结束,我如何才能做到这一点?

如有任何帮助,我们将不胜感激,提前表示感谢。

您可以启动一个线程,该线程将每2毫秒设置一次进度,并在200毫秒内完成100%。

        //Class variables
        private Handler mHandler = new Handler();
        private int progressBarStatus = 0; 
        //write this code in oncreate after setContentView(..)
        ProgressBar mProgress = (ProgressBar) findViewById(R.id.progress_bar);
        new Thread(new Runnable() {
        public void run() {
            while (progressBarStatus < 100) {
                // sleeping for 20milliseconds
                try {
                    Thread.sleep(20);
                    progressBarStatus++;
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
                mHandler.post(new Runnable() {
                    public void run() {
                        mProgress.setProgress(progressBarStatus);
                    }
                });
            }
        }
    }).start();

设置进度条的初始值和最大值。然后,使用处理程序更新进度条的进度。

假设您想通过单击按钮来更改进度条的进度。你的代码看起来像这样:-

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    int FRAME_RATE = 10;
    int currentTime = 0;
    int MAX_DURATION = 200;
    int progress = 0;
    Handler handler = new Handler();
    final Runnable r = new Runnable() {
        public void run() {
            if (currentTime * FRAME_RATE <= MAX_DURATION) {
                progress = ((currentTime * FRAME_RATE) / MAX_DURATION) * maxProgressOfProgressBar;
                progressBar.setProgress(progress);
                currentTime++;
                handler.postDelayed(this, FRAME_RATE);
            }  
        }
    };
    buttonShowPicNotification.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
                handler.postDelayed(this, FRAME_RATE);
        }
    }
}

你的代码看起来像这样。

注意:我还没有测试过这个代码,但这肯定会让你知道你需要做什么。

您可以使用CountDownTimer。在每一个勾选更新你的进度条,当计时器结束时,你可以做下一个任务。下面是我的活动代码:

public class SplashActivity extends AppCompatActivity {
    private static int SPLASH_TIME_OUT = 3000;
    private ProgressBar progressBar;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_splash);
        progressBar = (ProgressBar) findViewById(R.id.progressBar);
        progressBar.setMax(SPLASH_TIME_OUT);
        CountDownTimer countDownTimer = new CountDownTimer(SPLASH_TIME_OUT, SPLASH_TIME_OUT / 100) {
            @Override
            public void onTick(long millisUntilFinished) {
                progressBar.setProgress((int) (SPLASH_TIME_OUT - millisUntilFinished));
            }
            @Override
            public void onFinish() {
                Intent i = new Intent(SplashActivity.this, MainActivity.class);
                startActivity(i);
                finish();
            }
        };
        countDownTimer.start();
    }
} 

最新更新