android.support.v4.app.FragmentActivity
アプリのさまざまな部分間でドラッグ/スワイプしてアクセスできるマルチフラグメント/パネルを備えたアプリを作成するために使用します。私のフラグメントの1つにズーム可能なビューがあり、私の問題は、ズーム可能なビューにいる場合、他のフラグメントへのドラッグ/スワイプの使用を防ぐことです。
Touchイベントからアクションを取得するためにハックしようとしましandroid.support.v4.view.ViewPager
たが、機能しません。
私はこのケースをすべて試しましたが、うまくいきません: (すべてのコードはサブクラスの一部ですandroid.support.v4.view.ViewPager
)
ケース 1:
// Not working
@Override
protected void onPageScrolled(int position, float offset, int offsetPixels) {
if (isPreventDrag()) {
super.onPageScrolled(position, 1, 0);
} else {
super.onPageScrolled(position, offset, offsetPixels);
}
}
ケース 2:
// Work but stop all event include the event to the target image view.
@Override
public boolean onInterceptTouchEvent(MotionEvent ev) {
switch (ev.getAction()) {
case MotionEvent.ACTION_DOWN:
lastX = ev.getX(); // float
lockScroll = false;
return super.onInterceptTouchEvent(ev);
case MotionEvent.ACTION_MOVE:
this.lockScroll = this.isPreventDrag();
break;
}
if (lockScroll) {
ev.setLocation(lastX, ev.getY());
return super.onInterceptTouchEvent(ev);
} else {
return super.onInterceptTouchEvent(ev);
}
}
ケース 3:
// Work good, but by some unknown error I can drag the screen
// some pixels before this stop the event.
@Override
public boolean onTouchEvent(MotionEvent ev) {
if (this.isPreventDrag()) {
return true;
} else {
return super.onTouchEvent(ev);
}
}
使用が他のフラグメントへの切り替えを許可されている場合、停止または非アクティブ化を簡単に非アクティブ化する方法が必要です。
これは私にとって有効なコードです。以前にどのようなエラーが発生したかわかりません。
// This work for me,
@Override
public boolean onInterceptTouchEvent(MotionEvent ev) {
if (this.isPreventDrag()) {
return false;
} else {
return super.onInterceptTouchEvent(ev);
}
}