1

我使用ViewPager和FragmentStatePageAdapter來顯示用戶可以瀏覽的視圖數量。使用當前實施只有一個頁面在任何一次滑動時發生更改。相反,我想基於用戶刷卡翻閱多個視圖。如果刷卡很長/很快,我需要翻閱多個視圖,反之亦然。Android視圖傳呼機翻轉更多頁面

這裏是我當前的代碼

public class MyAdapter extends FragmentStatePagerAdapter 
{ 
     public MyAdapter(FragmentManager fragmentManager) { 
      super(fragmentManager); 
     } 

     @Override 
     public int getCount() { 
      return 10; 
     } 

     @Override 
     public Fragment getItem(int position) { 
      return ItemFragment.init(position); 
     } 


    } 

PageContainer類

public class PagerContainer extends FrameLayout implements ViewPager.OnPageChangeListener { 

    private ViewPager mPager; 
    boolean mNeedsRedraw = false; 

    public PagerContainer(Context context) { 
     super(context); 
     init(); 
    } 

    public PagerContainer(Context context, AttributeSet attrs) { 
     super(context, attrs); 
     init(); 
    } 

    public PagerContainer(Context context, AttributeSet attrs, int defStyle) { 
     super(context, attrs, defStyle); 
     init(); 
    } 

    private void init() { 
     //Disable clipping of children so non-selected pages are visible 
     setClipChildren(false); 

     //Child clipping doesn't work with hardware acceleration in Android 3.x/4.x 
     //You need to set this value here if using hardware acceleration in an 
     // application targeted at these releases. 
     setLayerType(View.LAYER_TYPE_SOFTWARE, null); 
    } 

    @Override 
    protected void onFinishInflate() { 
     try { 
      mPager = (ViewPager) getChildAt(0); 
      mPager.setOnPageChangeListener(this); 
     } catch (Exception e) { 
      throw new IllegalStateException("The root child of PagerContainer must be a ViewPager"); 
     } 
    } 

    public ViewPager getViewPager() { 
     return mPager; 
    } 

    private Point mCenter = new Point(); 
    private Point mInitialTouch = new Point(); 

    @Override 
    protected void onSizeChanged(int w, int h, int oldw, int oldh) { 
     mCenter.x = w/2; 
     mCenter.y = h/2; 
    } 

    @Override 
    public boolean onTouchEvent(MotionEvent ev) { 
     //We capture any touches not already handled by the ViewPager 
     // to implement scrolling from a touch outside the pager bounds. 
     switch (ev.getAction()) { 
      case MotionEvent.ACTION_DOWN: 
       mInitialTouch.x = (int)ev.getX(); 
       mInitialTouch.y = (int)ev.getY(); 
      default: 
       ev.offsetLocation(mCenter.x - mInitialTouch.x, mCenter.y - mInitialTouch.y); 
       break; 
     } 

     return mPager.dispatchTouchEvent(ev); 
    } 

    @Override 
    public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) { 
     //Force the container to redraw on scrolling. 
     //Without this the outer pages render initially and then stay static 
     if (mNeedsRedraw) invalidate(); 
    } 

    @Override 
    public void onPageSelected(int position) { } 

    @Override 
    public void onPageScrollStateChanged(int state) { 
     mNeedsRedraw = (state != ViewPager.SCROLL_STATE_IDLE); 
    } 
} 

我怎麼能在android系統做到這一點?

感謝

回答

0

可以通過調用更改視圖:

ViewPager.setCurrentItem(int index) 
ViewPager.setCurrentItem(int index, bool animation) 

你必須處理的滑動命令自己,但在一定的滑動你的雲呼叫ViewPager的setCurrentItem。 setCurrentItem方法還允許您啓用或禁用動畫。