多くのページをスワイプして使用するアプリに取り組んでいますが、一部のページでは、何かを選択するまで次のページにスクロールできないようにしたいと考えています。
現時点では、ViewPager を拡張しました。
/* (non-Javadoc)
* @see android.support.v4.view.ViewPager#onInterceptTouchEvent(android.view.MotionEvent)
*/
@Override
public boolean onInterceptTouchEvent(MotionEvent event) {
if (this.canGoLeft || this.canGoRight) {
return super.onInterceptTouchEvent(event);
}
return false;
}
/* (non-Javadoc)
* @see android.support.v4.view.ViewPager#onTouchEvent(android.view.MotionEvent)
*/
@Override
public boolean onTouchEvent(MotionEvent ev) {
boolean lockScroll = false;
switch (ev.getAction()) {
case MotionEvent.ACTION_DOWN:
lastX = ev.getX();
lockScroll = false;
return super.onTouchEvent(ev);
case MotionEvent.ACTION_MOVE:
if (canGoLeft && lastX < ev.getX()) {
lockScroll = false;
} else if (canGoRight && lastX > ev.getX()) {
lockScroll = false;
} else {
lockScroll = true;
}
lastX = ev.getX();
break;
}
lastX = ev.getX();
if (lockScroll) {
//make callback to prevent movement
if (mOnPreventCallback != null) {
mOnPreventCallback.onPreventMovement();
}
return false;
} else {
return super.onTouchEvent(ev);
}
}
注:前のページへのスワイプを防止するように実装しようとしましたが、前のページにスワイプすることはできますが、左端からスワイプして右に少しスワイプする必要があります。気まぐれですが、スワイプを完全に防ぐことはできません。
ここでやりたいことは次の 3 つです。
- アイテムまたは何かを選択するまで、次の画面にスクロールできないようにする
- 全体を通して前の画面へのスクロールを防止 (部分的に実装)
- Android がグラデーションで上下の画面を表示する方法のように、ユーザーにフィードバックを提供して、スクロールが無効になっていることを示します。