1. 程式人生 > >豎向ScrollView巢狀橫向滑動佈局衝突

豎向ScrollView巢狀橫向滑動佈局衝突

當外層豎向滑動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 float
curY = 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); } }