Android跳过幻灯片框架

时间:2017-12-05 17:41:50

标签: android

我正在尝试创建一个简单的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在后台继续运行。

1 个答案:

答案 0 :(得分:1)

我通过将延迟放在一个单独的线程上并使Runnable更改幻灯片并在UI线程上运行它来解决它。