我正在尝试创建一个简单的Android应用程序,它将显示一些用户可指定的毫秒数的图像。 下面的代码在11秒后跳到最后一张图像。 你能看看并告诉我你的想法。
public void buttonPressed(View view){
ImageView canvas = findViewById(R.id.canvas);
delay(1000);
canvas.setImageResource(R.drawable.c1);
delay(1000);
canvas.setImageResource(R.drawable.c2);
delay(1000);
canvas.setImageResource(R.drawable.c3);
delay(1000);
canvas.setImageResource(R.drawable.c4);
delay(1000);
canvas.setImageResource(R.drawable.c5);
delay(5000);
canvas.setImageResource(R.drawable.c6);
delay(2000);
}
void delay(long ms){
long init = SystemClock.uptimeMillis();
while(SystemClock.uptimeMillis() != init+ms);
}
我对C / C ++替代品持开放态度。 我希望有一个调用内核'显示功能。 在将来,我希望用户能够选择或拍摄照片。
我使用的是另一种方法:
public class MainActivity extends AppCompatActivity {
private ImageView canvas;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
canvas = findViewById(R.id.canvas);
}
public void buttonPressed(View view){
new STask().execute("start");
}
public class STask extends AsyncTask<String,Void,Void>{
@Override
protected Void doInBackground(String... strings) {
long start = SystemClock.uptimeMillis();
if(SystemClock.uptimeMillis() == start + 1000){
canvas.setImageResource(R.drawable.c2);
canvas.invalidate();
}else if(SystemClock.uptimeMillis() == start + 3000){
canvas.setImageResource(R.drawable.c3);
canvas.invalidate();
}else if(SystemClock.uptimeMillis() == start + 4500){
canvas.setImageResource(R.drawable.c4);
canvas.invalidate();
}else if(SystemClock.uptimeMillis() == start + 8000){
canvas.setImageResource(R.drawable.c5);
canvas.invalidate();
}else if(SystemClock.uptimeMillis() == start + 10000){
canvas.setImageResource(R.drawable.c6);
canvas.invalidate();
}
return null;
}
}
}
我需要AsyncTask在后台继续运行。
答案 0 :(得分:1)
我通过将延迟放在一个单独的线程上并使Runnable更改幻灯片并在UI线程上运行它来解决它。