2013-04-02 34 views
0

我在我的應用程序中有二十張圖片。當用戶在應用程序左/右滑動時,我利用ViewPager顯示上一張/下一張圖片?我想表明,當用戶掃描到最後的圖像在右側「重複」屏幕..ViewPager - lastItem? Android

這裏是我的代碼,

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中最後一個元素的權利?

回答

0

您可以使用圓形視圖尋呼機來實現這一目標。請參閱此link以獲取更多信息。

+0

謝謝..但圓形ViewPager不會爲我的目的..我不想無限分頁行爲。如果有1-5個圖像,我想在用戶在第5個圖像中向右滑動時顯示另一個佈局。當用戶在ViewPager中向左或向右滑動時是否有任何事件可以捕獲? – Naveen

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 
} 

希望這有助於

0

你可以做的是抓住viewpager的一個實例,並調用:

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

這將返回在viewPager頁計數現在你可以做的是: 應用交流以檢查您當前頁面的總數... 請注意,第一頁是[0]第二個是[1],第三個是[2] ...當前頁面的計數由...返回...

viewPager.getCurrentItem() 

希望這能解決您的問題!

0

從這個link: 你可以擴展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(); 
} 

} 希望它可以幫助你!