Search code examples
androidimageimageviewandroid-imageview

Set Images one by one


I'm new in developing so I want to ask this question, sorry if it's stupid

I have 6 different ImageViews and 6 images, how can I set images into ImageViews so that they appear on click one by one with some delay, like 1 second? Now they appear all together at the same time

private int[] images;
private int[] containers;

@Override
protected void onCreate(Bundle savedInstanceState)
{
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    images = new int[] {R.drawable.wale,
                        R.drawable.btrfly,
                        R.drawable.cat,
                        R.drawable.dog,
                        R.drawable.fish,
                        R.drawable.dolphin};
    containers = new int[] {R.id.container1,
                            R.id.container2,
                            R.id.container3,
                            R.id.container4,
                            R.id.container5,
                            R.id.container6};

    for (int i = 0; i<containers.length; i++) {
        final ImageView temp = findViewById(containers[i]);
        temp.setImageResource(R.drawable.placeholder);

    }

    Button load = findViewById(R.id.btnLoad);
    load.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            for ( int i =0; i<containers.length; i++) {
                final ImageView temp = findViewById(containers[i]);
                temp.setImageResource(images[i]);
            }
        }
    });
}

Solution

  • You can use postDelayed() of android.os.Handler like this:

    final int baseDelay = 1000;
    final Handler handler = new Handler();
    
    load.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                for (int i = 0; i < containers.length; i++) {
                        final int ifinal = i;
                        handler.postDelayed(new Runnable(){
                        public void run(){
                        final ImageView temp = findViewById(containers[ifinal]);                       
                        temp.setImageResource(images[ifinal]);
                        }
                    }, i * baseDelay);
    
                }
            }
        });