0

I've twenty images in my app.. I make use of ViewPager to show the previous/next images when the user swipes left/right in the app?? I would like to show "Repeat" screen when the user swipes to the right in the last image..

Here is my code,

viewPager = (ViewPager) findViewById(R.id.main_viewpager);

ImagePagerAdapter adapter = new ImagePagerAdapter();
viewPager.setAdapter(adapter);

PageListener pageListener = new PageListener();
viewPager.setOnPageChangeListener((OnPageChangeListener) pageListener);

int currentPage;
private class PageListener extends SimpleOnPageChangeListener{ 

        public void onPageSelected(int position) {
                --- some code -----
                currentPage = position;
        }
}

private class ImagePagerAdapter extends PagerAdapter {

     @Override
     public int getCount() {
          return mImages.size();
     }

     -- other implemented methods ---
}

Is it possible to capture the event when the user swipes to the right of the last element in the viewpager??

Naveen
  • 1,040
  • 4
  • 15
  • 38

3 Answers3

1

You can achieve this by setting a custom onChangePageListener on your ViewPager like you started. I'd do it like:

viewPager.setOnPageChangeListener(new OnPageChangeListener() {
 //...
 @Override
public void onPageSelected(int arg0) {
  onPageChanged(arg0);
}
 //...
});

And then in your activity

public void onPageChanged(int position) {
 if(position == SOMETHING) //do something
}

Hope this helps

user2001951
  • 185
  • 1
  • 3
  • 14
0

what you can do is grab an instance of the viewpager and call :

PagerAdapter pg = viewPager.getAdapter();
int i = pg.getCount();

this will return the count of pages in viewPager now what you can do is: apply a condition to check your current page with the total count... note that first page is [0] 2nd is [1] and 3rd is [2]...the current page's count is returned by...

viewPager.getCurrentItem()

Hope this solves your problem!

Niraj Adhikari
  • 1,678
  • 2
  • 14
  • 28
0

From this link: You can extend ViewPager class and then override onTouchEvent() method:
Here for an example:

public class MxTViewPager extends ViewPager {
public MxTViewPager(Context context, AttributeSet attrs) {
    super(context, attrs);
}

float mStartDragX;
OnSwipeOutListener mListener;

public void setOnSwipeOutListener(OnSwipeOutListener listener) {
    mListener = listener;
}

@Override
public boolean onTouchEvent(MotionEvent ev) {
    if (getCurrentItem() == getAdapter().getCount() - 1) {
        final int action = ev.getAction();
        float x = ev.getX();
        switch (action & MotionEventCompat.ACTION_MASK) {
        case MotionEvent.ACTION_DOWN:
            mStartDragX = x;
            break;
        case MotionEvent.ACTION_UP:
            if (x < mStartDragX) {
                mListener.onSwipeOutAtEnd();
            } else {
                mStartDragX = 0;
            }
            break;
        }
    } else {
        mStartDragX = 0;
    }
    return super.onTouchEvent(ev);
}

public interface OnSwipeOutListener {
    public void onSwipeOutAtEnd();
}

} Hope it can help you!

Community
  • 1
  • 1
Justin
  • 4,400
  • 2
  • 32
  • 36