2017-11-16 40 views
1

私は、Navigation DrawerおよびAutoScrollViewPagerを含有する活性を有する。電話の画面の左端からスワイプしてNavigation Drawerを開くと、のページがNavigation Drawerの代わりに変更されます。 AutoScrollViewPagerのスワイプをエッジから無効にするにはどうすればよいですか?ViewPagerの端からスワイプを無効にする方法は?

P.S. AutoScrollViewPagerにマージンを追加しようとしましたが、見た目が醜く、マージンが十分に大きくない場合は機能しません。ここで

答えて

1

使用Edge Flags

Documentation

は、コードの下に使用してみてくださいです:

final View pagerView = findViewById(R.id.Pager); 
pagerView.setOnTouchListener(new View.OnTouchListener() 
{   
    @Override 
    public boolean onTouch(View v, MotionEvent event) 
    { 
     if (event.getAction() == MotionEvent.ACTION_DOWN && event.getEdgeFlags() == MotionEvent.EDGE_LEFT) { 
      return true; //disable swipe 
     } 
    } 
}); 
+0

おかげで、それが動作していません私のために。私はトーストをIFブロックの中に入れ、コントロールがIFブロックの中に入ることがないことを知りました。また、 "setOnTouchListenerが呼び出されましたが、performOnClickをオーバーライドしません"という警告が表示されています。また、ViewPagerはAutoScrollViewPagerであり、違いがないことを願っています。 @ rafsanahmad007 –

+0

なぜ動作していないのか正確には分かりません。しかし、これを見てください:https://stackoverflow.com/questions/6645537/how-to-detect-the-swipe-left-or-right-in-android and https://stackoverflow.com/questions/12884250/motionevent-in-scrollview-in-android?noredirect = 1&lq = 1 – rafsanahmad007

+0

scrollviewは常にビュー内のタッチイベントをインターセプトします... – rafsanahmad007

0

は、コードの下に使用してみてください:答えを

public class CustomViewPager extends ViewPager { 

private boolean enabled; 

public CustomViewPager(Context context, AttributeSet attrs) { 
    super(context, attrs); 
    this.enabled = true; 
} 

@Override 
public boolean onTouchEvent(MotionEvent event) { 
    if (this.enabled) { 
     return true; 
    } 

    return false; 
} 

@Override 
public boolean onInterceptTouchEvent(MotionEvent event) { 
    if (this.enabled) { 
     if (event.getAction() == MotionEvent.ACTION_DOWN && event.getEdgeFlags() == MotionEvent.EDGE_LEFT) { 
      return true; //disable swipe 
     } 
    } 

    return false; 
} 

public void setPagingEnabled(boolean enabled) { 
    this.enabled = enabled; 
} } 
関連する問題