豎向ScrollView巢狀橫向滑動佈局衝突
阿新 • • 發佈:2019-02-11
當外層豎向滑動ScrollView裡面巢狀橫向的滑動佈局時,會發先內層橫向滑動很卡頓
原因:左右滑動操作被外層的scrollView處理掉了
解決:只要讓scrollview對左右滑動事件不監聽,讓其子控制元件處理左右滑動事件 即可,需要重寫scrollview的onInterceptTouchEvent方法,如下:
public class VerticalScrollView extends ScrollView { private float xDistance, yDistance, xLast, yLast; public VerticalScrollView(Context context) { super(context); } public VerticalScrollView(Context context, AttributeSet attrs) { super(context, attrs); } public VerticalScrollView(Context context, AttributeSet attrs, int defStyle) { super(context, attrs, defStyle); } @Override public boolean onInterceptTouchEvent(MotionEvent ev) { switch(ev.getAction()) { case MotionEvent.ACTION_DOWN: xDistance = yDistance = 0f; xLast = ev.getX(); yLast = ev.getY(); break; case MotionEvent.ACTION_MOVE: final float curX = ev.getX(); final floatcurY = ev.getY(); xDistance += Math.abs(curX - xLast); yDistance += Math.abs(curY - yLast); xLast = curX; yLast = curY; if (xDistance > yDistance) { return false; } } return super.onInterceptTouchEvent(ev); } }