前に書く
プロジェクトが最初に始まったとき、PM:スライドする必要はありません、それはあまりにも派手です。。。
私:主流のアプリは一般的にスライドできるようになりました。これはユーザーの習慣に沿ったものです...
さて、PM:なぜスライドできないのか、ユーザーのニーズを満たしていないので、すぐに変更してください。。。
私:…
とにかく、全部書いたか、みんなに見てもらうために捨てる
ViewPagerのメソッドを書き直します
ViewPager + FragmentPagerAdapterを使用しています
スライド効果を無効にするのは非常に簡単です。ViewPagerメソッドを書き直すだけです。
最初に、スライドを許可するかどうかに関係なく、マークするブール値を定義します。
// 是否滑动,用来标记
private boolean isCanScroll = true;
それを継承するサブクラスでのスライドを許可するかどうかを設定します
public void setCanScroll(boolean canScroll) {
isCanScroll = canScroll;
}
ViewPagerのインターセプトメソッドをオーバーライドします。これはイベント処理のインターセプトメソッドであり、イベント配信の方向を変更できます。これは、Touchイベントが子コントロールに配信されるかどうかを決定します。
falseが返された場合、インターセプトされて子コントロールに渡されることはありません
。trueが返された場合、インターセプトされて、独自のonTouchEventによって処理されます。
super.onInterceptTouchEvent(ev)、デフォルトはtrueを返します。
@Override
public boolean onInterceptTouchEvent(MotionEvent ev) {
return isCanScroll && super.onInterceptTouchEvent(ev);
}
ViewPagerの処理メソッドをオーバーライドします。このメソッドは、現在のコントロールがこのイベントを消費するかどうかを決定します
falseが返された場合、消費はなく、レイヤーごとにアップロードされます。
trueが返された場合は、それが消費され、イベントが終了したことを意味します。
super.onTouchEvent(ev)、デフォルトの戻り値はfalseです。
@Override
public boolean onTouchEvent(MotionEvent ev) {
return isCanScroll && super.onTouchEvent(ev);
}
使用する
ViewPagerを使用するアクティビティで
// 使用CustomViewPager 继承ViewPager
private CustomViewPager container;
onCreateメソッドで
// 禁止左右滑动
container.setCanScroll(false);
レイアウトfile.xml内
<!-- 禁用滑动导航菜单页 -->
<com.巴拉巴拉.common.view.CustomViewPager
android:id="@+id/containerVP"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1" />
上記の手順により、ViewPagerの左右のスライド効果を無効にすることができます。
追伸: AndroidのonInterceptTouchEvent()とonTouchEvent()に関して、この老人のブログは非常に詳細に書いています。
詳細な傍受と処理方法