Android-スライド競合ソリューション
5268 ワード
ScrollViewにViewPagerがネストされている場合、ジェスチャー操作時に、ViewPagerの左右のスクロールが失効することがあります.上司が上下にスクロールできるScrollViewであるため、スライド衝突解法とは2つ、1つは外部ブロック法、2つは内部ブロック法です.
外部ブロックの使用を推奨します.内部ブロックの感度は外部ブロックに及ばないようです!
以下のコードはテンプレートのみで、具体的なブロックは省略しました.読者は自分で追加することができます.
がいぶブロックほう
ないぶブロックほう
外部ブロックの使用を推奨します.内部ブロックの感度は外部ブロックに及ばないようです!
以下のコードはテンプレートのみで、具体的なブロックは省略しました.読者は自分で追加することができます.
がいぶブロックほう
package com.che.carcheck.ui.home;
import android.content.Context;
import android.util.AttributeSet;
import android.view.MotionEvent;
import android.widget.ScrollView;
/** * * <p> * :ScrollView ViewPager * <p> * : on 16/5/8 5:17 */
public class OuterScrollView extends ScrollView {
public OuterScrollView(Context context, AttributeSet attrs) {
super(context, attrs);
}
@Override
public boolean onInterceptTouchEvent(MotionEvent ev) {
boolean isIntercept = false;
switch (ev.getAction()) {
case MotionEvent.ACTION_DOWN:
isIntercept = false;
break;
case MotionEvent.ACTION_MOVE:
isIntercept = canOuterIntercept(ev);
break;
case MotionEvent.ACTION_UP:
case MotionEvent.ACTION_CANCEL:
isIntercept = false;
break;
}
return isIntercept;
}
/** * * * @param ev * @return */
private boolean canOuterIntercept(MotionEvent ev) {
return false;
}
}
ないぶブロックほう
package com.che.carcheck.ui.home;
import android.content.Context;
import android.support.v4.view.ViewPager;
import android.util.AttributeSet;
import android.view.MotionEvent;
/** * * <p> * :ScrollView ViewPager * <p> * : on 16/5/8 5:27 */
public class InnerViewPager extends ViewPager {
public InnerViewPager(Context context, AttributeSet attrs) {
super(context, attrs);
}
@Override
public boolean dispatchTouchEvent(MotionEvent ev) {
switch (ev.getAction()) {
case MotionEvent.ACTION_DOWN:
break;
case MotionEvent.ACTION_MOVE:
if(canInnerIntercept(ev)){
//
getParent().requestDisallowInterceptTouchEvent(false);
}
break;
case MotionEvent.ACTION_UP:
case MotionEvent.ACTION_CANCEL:
break;
}
return super.dispatchTouchEvent(ev);
}
/** * * * @param ev * @return */
private boolean canInnerIntercept(MotionEvent ev) {
return false;
}
}