gpt4 book ai didi

java - ProgressBar 不会在启动画面上逐渐显示进度

转载 作者:太空狗 更新时间:2023-10-29 14:30:49 25 4
gpt4 key购买 nike

我有一个持续 5 秒的闪屏,我想使用 ProgressBar 来表示进度。

public class SplashActivity extends Activity {

private static final long SPLASHTIME = 5000;
private ProgressBar progressBar;

@Override
public void onCreate(Bundle icicle) {

super.onCreate(icicle);
setContentView(R.layout.splash);

SplashHandler handlerSplash = new SplashHandler();
progressBar = (ProgressBar) findViewById(R.id.progression);
progressBar.setMax((int) ((SPLASHTIME) / 1000));
progressBar.setProgress(0);
Message msg = new Message();
msg.what = 0;
handlerSplash.sendMessageDelayed(msg, SPLASHTIME);


ThreadProgressBar threadProgress = new ThreadProgressBar();
threadProgress.start();


}

private class ThreadProgressBar extends Thread {
ProgressBarHandler handlerProgress = new ProgressBarHandler();
public void run() {
try {

while (progressBar.getProgress() <= progressBar.getMax()) {
Thread.sleep(1000);

handlerProgress.sendMessage(handlerProgress.obtainMessage());
}
} catch (java.lang.InterruptedException e) {

}
}
}

private class ProgressBarHandler extends Handler {

public void handleMessage(Message msg) {
progressBar
.incrementProgressBy((int) (SPLASHTIME / SPLASHTIME));
}
}

private class SplashHandler extends Handler {

public void handleMessage(Message msg) {
switch (msg.what) {
default:
case 0:
super.handleMessage(msg);
// new ProgressBarIncrease().execute();
Intent intent = new Intent();
intent.setClass(SplashActivity.this, RdvTab.class);
startActivity(intent);

}
}
}

最佳答案

我想既然 SplashActivity 本身就是一个 Activity ,那么可以阻止 UI 对吗? AsyncTask 有时运行的不是渐进的,如果你想让更新显示流畅,换成worker ThreadHandlder 怎么样。

  • 在 SplashActivity 中创建 Handler
  • 在主线程中,显示​​进度条或启动画面或任何您喜欢的内容
  • 同时让另一个线程运行倒计时,每秒一次sendEmptyMessage()Handler。 5 秒后,向 Handler 发送一条消息以关闭对话框和启动画面,然后工作程序 Thread 结束。

更新:很抱歉反馈缓慢。这个怎么样?我还没有测试过它,但它不是最好的实现,你可以使用这个逻辑

public class SplashActivity extends Activity {

private static final int SPLASHTIME = 5000;
// u can change the value here for smoother effect
private static final long UPDATEINTERVAL = 1000;
private ProgressBar progressBar;

@Override
public void onCreate(Bundle icicle) {

super.onCreate(icicle);
setContentView(R.layout.splash);

progressBar = (ProgressBar) findViewById(R.id.progression);

new Thread(new Runnable(){
@Override
public void run(){
int progress = 0;
while(true){
// send current progress to handler
mHandler.sendEmptyMessage(progress);
// break from the loop after SPLASHSCREEN millis
if(progress > SPLASHSCREEN)
break;
// increase the progress
progress = (int) (progress + UPDATEINTERVAL);
// sleep the worker thread
Thread.sleep(UPDATEINTERVAL);
}
}
}).start();
}

private Handler mHandler = new Handler(){
@Override
public void handleMessage(Message message){
// get the current progress
int progress = message.what;
if(progress <= SPLASHTIME){
progressBar.setProgress(progress);
}
else{
// finish splashActivity here & do what u want do to after splashscreen, for example
finish();
Intent intent = new Intent(SpashActivity.this, MenuActivity.class);
startActivity(intent);
}
}
}
}

关于java - ProgressBar 不会在启动画面上逐渐显示进度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7122371/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com