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

谁都会走 提交于 2019-12-29 01:51:09

问题


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


回答1:


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

                }
        }
    });

}
}



回答2:


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



回答3:


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



回答4:


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



回答5:


AnimationDrawable animation = new AnimationDrawable();


来源:https://stackoverflow.com/questions/45518197/how-to-change-the-image-automatically-in-view-pager-when-it-reaches-the-last-ima

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!