Android-左右のスライドを禁止するViewPagerの実現

目次

1つの背景

2カスタムViewPagerの実装

3使用方法


1つの背景

ViewPager + BottomNavigationView + multiple Fragmentsを使用して、ページ切り替えアーキテクチャをすばやく構築します。1つには4つのページがあります。テストの必要性があるため、真ん中の2つをブロックする必要があります。方法は次のとおりです。

  • クリックできないオプションを設定する:xmlレイアウトファイルでは、BottomNavigationViewのapp:menu属性は各ページのアイテムであり、表示したくないページアイテムのandroid:enabled属性はfalseに設定されており、対応するページは現時点では表示できません。

  • スライドしないようにBottomNavigationViewを設定します。ただし、BottomNavigationViewには、この関数をサポートするための対応するメソッドがありません。

2カスタムViewPagerの実装

[原則]:ViewPagerを継承するCustomViewPagerクラスを記述してから、onTouchEvent、onInterceptTouchEventを書き直し、setSlidingEnableメソッドを追加して、外部パラメーターによるスライドを有効または無効にします。onInterceptTouchEventメソッドの簡単な説明は次のとおりです。

  • 役割:上記のタッチイベントをインターセプトするかどうかを決定します。
  • パラメータ:
    -falseを返します:イベントをインターセプトせず、イベントを解放します。イベントは現在のビューの子コントロールに渡され、子コントロールのdispatchTouchEventメソッドによって配布および処理されます。
    -trueを返します。イベントをインターセプトし、処理のために現在のビューのonTouchEventメソッドに渡します。

[コード]:

public class CustomViewPager extends ViewPager {

    // the sliding page switch
    private boolean isSlidingEnable = true ;

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

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

    //重写此函数
    @Override
    public boolean onTouchEvent(MotionEvent ev) {
        return  this.isSlidingEnable;
    }
    //重写此函数
    @Override
    public boolean onInterceptTouchEvent(MotionEvent ev) {
        return this.isSlidingEnable;
    }

    public void setSlidingEnable(boolean slidingEnable) {
        isSlidingEnable = slidingEnable;
    }
}

3使用方法

private CustomViewPager homeViewPager = null;
homeViewPager = (CustomViewPager) findViewById(R.id.view_pager_home);
//中间涉及的其他步骤就不赘述了
​​​​​​​homeViewPager.setSlidingEnable(false);  //禁止左右滑动

ここで注意すべき問題があります。CustomViewPagerはカスタムクラスです。レイアウトファイルxmlを定義するときにこのCustomViewPagerを使用する必要があります。それ以外の場合は、元のandroidx.viewpager.widget.ViewPagerを使用します。ここではhomeViewPager =(CustomViewPager)findViewById( R.id.view_pager_home);タイプが一致しないため、エラーが報告されます。

————————————————————————————————————

この記事はブロガーのオリジナル記事です。再版のソースを教えてください!

この記事があなたに役立つなら、あなたの裕福な小さな手を持ち上げて、フォロー/コメント/いいね/収集してください、それは私の最大のサポートです!

昇進と昇給、素晴らしい未来をお祈りします!

おすすめ

転載: blog.csdn.net/w464960660/article/details/109387520