0

我的应用程序中有 20 张图像。当用户在应用程序中向左/向右滑动时,我使用 ViewPager 显示上一个/下一个图像?当用户在最后一张图片中向右滑动时,我想显示“重复”屏幕。

这是我的代码,

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

当用户滑动到viewpager中最后一个元素的右侧时,是否可以捕获事件?

4

3 回答 3

1

您可以像开始一样在 ViewPager 上设置自定义 onChangePageListener 来实现这一点。我会这样做:

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

然后在你的活动中

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

希望这可以帮助

于 2013-07-07T16:40:27.770 回答
0

从此链接:您可以扩展ViewPager类,然后覆盖onTouchEvent()方法:
这里举个例子:

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

} 希望它可以帮助你!

于 2014-03-06T06:56:11.670 回答
0

您可以做的是获取 viewpager 的一个实例并调用:

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

这将返回 viewPager 中的页数现在您可以做的是:应用条件来检查当前页面的总数...请注意,第一页是 [0] 第二页是 [1],第三页是 [2] ...当前页面的计数由...返回

viewPager.getCurrentItem()

希望这能解决您的问题!

于 2013-07-07T17:12:31.990 回答