0

我使用android.support.v4.app.FragmentActivity創建一個應用程序與多片段/面板,可以通過拖動/滑動應用程序的不同部分之間訪問。 在我的片段之一,我有一個可縮放視圖,我的問題是如果我在可縮放視圖上,我將阻止用於拖/劃到其他片段。Android,FragmentActivity和防止滑動

我試圖破解android.support.v4.view.ViewPager從Touch事件中獲取操作,但無法工作。

我有嘗試所有這種情況下,但無法正常工作: (所有的代碼是子類的AA部分android.support.v4.view.ViewPager

案例1:

// Not working 
@Override 
protected void onPageScrolled(int position, float offset, int offsetPixels) { 
    if (isPreventDrag()) { 
     super.onPageScrolled(position, 1, 0); 
    } else { 
     super.onPageScrolled(position, offset, offsetPixels); 
    } 
} 

案例2:

// Work but stop all event include the event to the target image view. 
@Override 
public boolean onInterceptTouchEvent(MotionEvent ev) { 
    switch (ev.getAction()) { 
     case MotionEvent.ACTION_DOWN: 
      lastX = ev.getX(); // float 
      lockScroll = false; 
      return super.onInterceptTouchEvent(ev); 
     case MotionEvent.ACTION_MOVE: 
      this.lockScroll = this.isPreventDrag(); 
      break; 
    } 
    if (lockScroll) { 
     ev.setLocation(lastX, ev.getY()); 
     return super.onInterceptTouchEvent(ev); 
    } else { 
     return super.onInterceptTouchEvent(ev); 
    } 
} 

案例3:

// Work good, but by some unknown error I can drag the screen 
// some pixels before this stop the event. 
@Override 
public boolean onTouchEvent(MotionEvent ev) { 

    if (this.isPreventDrag()) { 
     return true; 
    } else { 
     return super.onTouchEvent(ev); 
    } 
} 

我想要一個簡單的方法來停用停用或停用,如果允許使用切換到其他片段。

這是我的工作代碼,我不知道我以前做了什麼錯誤。

// This work for me, 
@Override 
public boolean onInterceptTouchEvent(MotionEvent ev) { 
    if (this.isPreventDrag()) { 
     return false; 
    } else { 
     return super.onInterceptTouchEvent(ev); 
    } 
} 

回答

1

我用這個ViewPager類控制viewpager的「swipeability」:

public class MyViewPager extends ViewPager { 

    public MyViewPager(Context context) { 
     super(context); 
    } 

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

    private boolean blockSwipe = false; 
    public void setBlockSwipe(boolean blockSwipe) { 
     this.blockSwipe = blockSwipe; 
    } 

    @Override 
    public boolean onInterceptTouchEvent(MotionEvent arg0) { 
     if (blockSwipe) 
      return false; 
     else 
      return super.onInterceptTouchEvent(arg0); 
    } 

} 
+0

這是工作,我不知道,而我儘量不這樣這項工作。 –

+1

如何在擴展FragmentActivity的類中使用它? – RicNjesh

+0

你可以使用它作爲普通的ViewPager,沒有任何限制:你可以通過調用構造函數或者像佈局中聲明它來創建它,比如「your.packagename.MyViewPager」... –