我想制作一个虚拟进度条,在指定的时间(如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();
}
}