2014-03-26 82 views
0

之間向右掃我有三個頁面:如何實現左邊屏幕

  1. A延伸SherlockFragment
  2. B擴展SherlockFragmentActivity
  3. ç延伸SherlockFragmentActivity

在A,上點擊文本我需要轉到B和B,點擊一個文本我需要轉到C.這些已經完成。

現在的要求是,當我在C和我從左向右滑動,我需要到B.當我在B和我從左向右滑動,我需要到A.

我該如何執行此操作? ViewPager足以實現這一功能嗎?由於A是片段而其他片段是活動,我有疑問。

任何人都可以提出解決方案嗎?提前致謝。

+0

如何simpleGestureListner?你可以簡單地使用手勢來實現你想要的。 – InnocentKiller

+1

爲什麼不將B和C分別轉換爲'Fragment'? – adneal

+0

@InnocentKiller你會嘗試SimpleGestureListener,看看。 – Mathew

回答

0

通過SimpleOnGestureListener它的工作。

代碼:

private GestureDetector gestureDetector; 
private View.OnTouchListener gestureListener; 
SimpleOnGestureListener simpleOnGestureListener = new SimpleOnGestureListener(){ 
    @Override 
    public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, 
      float velocityY) { 
     float sensitvity = 10; 

     // TODO Auto-generated method stub 
     if((e1.getX() - e2.getX()) > sensitvity){ 
      //Swipe Left 
     } else if((e2.getX() - e1.getX()) > sensitvity){ 
      //Swipe Right 
     } 

     return super.onFling(e1, e2, velocityX, velocityY); 
    } 
}; 

在onCreateView補充:

gestureDetector = new GestureDetector(getActivity(), simpleOnGestureListener); 

添加下面的代碼,可以定義自己的看法:

gestureListener = new View.OnTouchListener() { 
      public boolean onTouch(View v, MotionEvent event) { 
       if (gestureDetector.onTouchEvent(event)) { 
        return true; 
       } 
       return false; 
      } 
     }; 
view.setOnTouchListener(gestureListener); 
1

創建一個新類SimpleGestureFilter.java

public class SimpleGestureFilter extends SimpleOnGestureListener { 

    public final static int SWIPE_UP = 1; 
    public final static int SWIPE_DOWN = 2; 
    public final static int SWIPE_LEFT = 3; 
    public final static int SWIPE_RIGHT = 4; 

    public final static int MODE_TRANSPARENT = 0; 
    public final static int MODE_SOLID = 1; 
    public final static int MODE_DYNAMIC = 2; 

    private final static int ACTION_FAKE = -13; // just an unlikely number 
    private int swipe_Min_Distance = 100; 
    private int swipe_Max_Distance = 350; 
    private int swipe_Min_Velocity = 100; 

    private int mode = MODE_DYNAMIC; 
    private boolean running = true; 
    private boolean tapIndicator = false; 

    private Activity context; 
    private GestureDetector detector; 
    private SimpleGestureListener listener; 

    public SimpleGestureFilter(Activity context, SimpleGestureListener sgl) { 

     this.context = context; 
     this.detector = new GestureDetector(context, this); 
     this.listener = sgl; 
    } 

    public void onTouchEvent(MotionEvent event) { 

     if (!this.running) 
      return; 

     boolean result = this.detector.onTouchEvent(event); 

     if (this.mode == MODE_SOLID) 
      event.setAction(MotionEvent.ACTION_CANCEL); 
     else if (this.mode == MODE_DYNAMIC) { 

      if (event.getAction() == ACTION_FAKE) 
       event.setAction(MotionEvent.ACTION_UP); 
      else if (result) 
       event.setAction(MotionEvent.ACTION_CANCEL); 
      else if (this.tapIndicator) { 
       event.setAction(MotionEvent.ACTION_DOWN); 
       this.tapIndicator = false; 
      } 

     } 
     // else just do nothing, it's Transparent 
    } 

    public void setMode(int m) { 
     this.mode = m; 
    } 

    public int getMode() { 
     return this.mode; 
    } 

    public void setEnabled(boolean status) { 
     this.running = status; 
    } 

    public void setSwipeMaxDistance(int distance) { 
     this.swipe_Max_Distance = distance; 
    } 

    public void setSwipeMinDistance(int distance) { 
     this.swipe_Min_Distance = distance; 
    } 

    public void setSwipeMinVelocity(int distance) { 
     this.swipe_Min_Velocity = distance; 
    } 

    public int getSwipeMaxDistance() { 
     return this.swipe_Max_Distance; 
    } 

    public int getSwipeMinDistance() { 
     return this.swipe_Min_Distance; 
    } 

    public int getSwipeMinVelocity() { 
     return this.swipe_Min_Velocity; 
    } 

    @Override 
    public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, 
      float velocityY) { 

     final float xDistance = Math.abs(e1.getX() - e2.getX()); 
     final float yDistance = Math.abs(e1.getY() - e2.getY()); 

     if (xDistance > this.swipe_Max_Distance 
       || yDistance > this.swipe_Max_Distance) 
      return false; 

     velocityX = Math.abs(velocityX); 
     velocityY = Math.abs(velocityY); 
     boolean result = false; 

     if (velocityX > this.swipe_Min_Velocity 
       && xDistance > this.swipe_Min_Distance) { 
      if (e1.getX() > e2.getX()) // right to left 
       this.listener.onSwipe(SWIPE_LEFT); 
      else 
       this.listener.onSwipe(SWIPE_RIGHT); 

      result = true; 
     } else if (velocityY > this.swipe_Min_Velocity 
       && yDistance > this.swipe_Min_Distance) { 
      if (e1.getY() > e2.getY()) // bottom to up 
       this.listener.onSwipe(SWIPE_UP); 
      else 
       this.listener.onSwipe(SWIPE_DOWN); 

      result = true; 
     } 

     return result; 
    } 

    @Override 
    public boolean onSingleTapUp(MotionEvent e) { 
     this.tapIndicator = true; 
     return false; 
    } 

    @Override 
    public boolean onDoubleTap(MotionEvent arg) { 
     this.listener.onDoubleTap(); 
     ; 
     return true; 
    } 

    @Override 
    public boolean onDoubleTapEvent(MotionEvent arg) { 
     return true; 
    } 

    @Override 
    public boolean onSingleTapConfirmed(MotionEvent arg) { 

     if (this.mode == MODE_DYNAMIC) { // we owe an ACTION_UP, so we fake an 
      arg.setAction(ACTION_FAKE); // action which will be converted to an 
             // ACTION_UP later. 
      this.context.dispatchTouchEvent(arg); 
     } 

     return false; 
    } 

    static interface SimpleGestureListener { 
     void onSwipe(int direction); 

     void onDoubleTap(); 
    } 
} 

,然後在fragmentActivity像這樣做,

public class abcd extends .... implements SimpleGestureListener{ 

//declare this, 
private SimpleGestureFilter detector; 

//assign this 
detector = new SimpleGestureFilter(this, this); 

and then, 

@Override 
    public boolean dispatchTouchEvent(MotionEvent me) { 
    // Call onTouchEvent of SimpleGestureFilter class 
    this.detector.onTouchEvent(me); 
    return super.dispatchTouchEvent(me); 
    } 

    @Override 
    public void onSwipe(int direction) { 
    switch (direction) { 

    case SimpleGestureFilter.SWIPE_RIGHT: 
    Intent moreOption = new Intent(Login1.this, Home.class); 
    startActivity(moreOption); 
    break; 
    case SimpleGestureFilter.SWIPE_LEFT: 
    break; 
    case SimpleGestureFilter.SWIPE_DOWN: 
    break; 
    case SimpleGestureFilter.SWIPE_UP: 
    break; 
    } 
    } 

    @Override 
    public void onDoubleTap() { 
    Toast.makeText(this, "Double Tap", Toast.LENGTH_SHORT).show(); 
    } 
} 
0

不能活動之間刷卡。你可以在片段之間滑動。 爲達到此目的。你應該有一個SherlockFragmentActivity作爲MainActivity, 並且你需要創建三個片段A,B,C來擴展SherlockFragment。

有關如何做到這一點的更多細節,請參閱本link