1. ホーム
  2. android

[解決済み] アンドロイドでビューページャーのスワイプを無効にする方法と有効にする方法

2023-08-12 20:22:25

質問

私がやろうとしていることは何ですか? プログラム実行中にページャーでスワイプを有効/無効にしようとしています。

フロー上で、ある条件をチェックし、それが返ってきたら true スワイプを有効にし、条件が満たされたら false を返すとスワイプを無効にします。


私が使っている解決策はこれです

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 super.onTouchEvent(event);
    }

    return false;
}

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

    return false;
}

public void setPagingEnabled(boolean enabled) {
    this.enabled = enabled;
} }

そして、XMLに組み込まれたビューページャーの代わりに、これを選択します。

<mypackage.CustomViewPager 
android:id="@+id/myViewPager" 
android:layout_height="match_parent" 
android:layout_width="match_parent" />

メソッドに "setPagingEnabled" を "false" で呼び出すだけで、ユーザーはスワイプしてページ分割することができなくなります。


上記の方法論における問題点。 フローにプロパティを設定できない。スワイプを有効にしたり、無効にしたりすることができます。しかし、私は条件に基づいてこれを行うことはできません


質問です。

  1. 別の方法で目標を達成することはできますか?
  2. それとも、これは不可能なのでしょうか?

どのように解決するのですか?

スワイプを無効にする方法

    final View touchView = findViewById(R.id.Pager); 
    touchView.setOnTouchListener(new View.OnTouchListener() 
    {         
        @Override
        public boolean onTouch(View v, MotionEvent event)
        { 
           return true; 
        }
     });

で、これを利用して手動でスワイプする

touchView.setCurrentItem(int index);