0

I am trying to make a simple android app that will display some images for a user specifiable number of milliseconds each. The code below skips to the last image after 11 seconds. could you have a look and tell me what you think.

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);
    }

I am open to C/C++ alternatives. I was wishing there was a 'call kernel' function for the display. In the future I would like to have the user be able to select or take the pictures.

I am using a different approach:

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;
            }


        }

    }

I need the AsyncTask to continually run in the background.

JohnpaulÞ
  • 11
  • 1
  • 5

1 Answers1

1

I solved it by putting the delays on a separate thread and making a Runnable to change the slide and running that on the UI thread.

JohnpaulÞ
  • 11
  • 1
  • 5