Jeyaseelan
Jeyaseelan

Reputation: 661

how to change the image automatically in view pager when it reaches the last image it should come to the first image automatically

I am now implementing the view pager and i want to continuously change the image one by one automatically for a particular periods of time may be once in 5 ms .

I also have to manually allow the user to swipe the images (it is working properly)

But the image is not automatically changing and when it reaches the last image it should come to the first image automatically

final Handler handler = new Handler();
        final Runnable Update = new Runnable() {
            public void run() {
                if (currentPage == strImages.length-1) {
                    currentPage = 0;
                }
                intro_images.setCurrentItem(currentPage++, true);
            }
        };

        timer = new Timer(); // This will create a new Thread
        timer .schedule(new TimerTask() { // task to be scheduled

            @Override
            public void run() {
                handler.post(Update);
            }
        }, 500, 3000);

I used above code but it does not work properly

Upvotes: 2

Views: 1698

Answers (5)

komal akhani
komal akhani

Reputation: 573

The below code is to get the last position and to scroll to the 1st position:

 pager.addOnPageChangeListener(new ViewPager.OnPageChangeListener()
 {
            @Override

      public void onPageScrolled(int position, float positionOffset,int positionOffsetPixels) {
                if (position == Yourlist.size()-1) {
                  pager.setCurrentItem(0);
                }
                  pager.setCurrentItem(position++,true);


            }

            @Override
            public void onPageSelected(int position) {

            }

            @Override
            public void onPageScrollStateChanged(int state) {

            }
        });

The below code is For automatic change picture in every 10s using CountDown Timer:

 - First you have to declare one array,which will contain your
   images,then after you have to use below code.

int i=0;


new CountDownTimer(1000,1000)
 {

                @Override
                public void onTick(long millisUntilFinished) {}

                @Override
                public void onFinish() {
                    iV.setImageDrawable(sdk.getContext().getResources().getDrawable(array[i]));
                    i++;
                    if(i== array.length-1) {i=0;}
                    start();
                }
            }.start();

Upvotes: 3

Muthukrishnan Rajendran
Muthukrishnan Rajendran

Reputation: 11642

You don't need the combination of Handler and TimerTask for this, You can use simple Handler like this using Handler.postDelayed

private Handler handler = new Handler();

final Runnable Update = new Runnable() {
    public void run() {
        int totalCount = intro_images.getAdapter().getCount();
        int currentItem = intro_images.getCurrentItem();
        if (currentItem == (totalCount - 1)) {
            currentItem = 0;
        } else {
            currentItem = currentItem + 1;
        }
        intro_images.setCurrentItem(currentItem, true);

        handler.postDelayed(this, 3000);
    }
};

@Override
protected void onResume() {
    super.onResume();

    handler.postDelayed(Update, 500);
}

@Override
protected void onPause() {
    super.onPause();

    if(handler != null) {
        handler.removeCallbacks(Update);
    }
}

Upvotes: 1

AskNilesh
AskNilesh

Reputation: 69709

try this add addOnPageChangeListener to your viewPager like this

        viewPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() {
        @Override
        public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
            if (position == strImages.length-1) {
                currentPage = 0;
            }
            intro_images.setCurrentItem(currentPage++, true);
        }

        @Override
        public void onPageSelected(int position) {

        }

        @Override
        public void onPageScrollStateChanged(int state) {

        }
    });

or for auto change page try this create a time task like this

Timer timer;
timer = new Timer();
timer.scheduleAtFixedRate(new RemindTask(), 0, 3000); // delay*/

 private class RemindTask extends TimerTask {
int current = viewPager.getCurrentItem();

@Override
public void run() {
    runOnUiThread(new Runnable() {
        public void run() {

           if (current < strImages.size()) {
                    viewPager.setCurrentItem(current);
                    current += 1;
                } else {

                    current = 0;
                    viewPager.setCurrentItem(current);

                }
        }
    });

}
}

Upvotes: 3

Harshit Trivedi
Harshit Trivedi

Reputation: 782

AnimationDrawable animation = new AnimationDrawable();

Upvotes: -1

Android Geek
Android Geek

Reputation: 9225

just add listener to your viewpager to get the last position and to scroll to the 1st position.

vp.addOnPageChangeListener(new ViewPager.OnPageChangeListener() {
                    @Override
                    public void onPageSelected(int position) {
                        if(position==yourlist.length){
                            vp.setCurrentItem(0);
                        }
                    }
                });

Upvotes: 0

Related Questions