0%

ViewGroup类似Launcher效果 拖动带点击事件的控件无法划屏的解决

网上抄的代码不太完美,总有些小问题,之前是无法更新GridView,现在又发现如果点中可点击的控件(按钮,图片等),再拖动,无法实现划屏效果.这两个问题折腾了我大半天,研究了会事件传递机制后,解决. 之所以出现上面的问题,是因为在onInterceptTouchEvent方法中,自动传递事件给相应的控件,我们重写该方法,自己判断该不该划屏即可.默认情况下,在非可点击控件上划,只会触发onTouchEvent,不会触发onInterceptTouchEvent,所以onTouchEvent里也需要判断划屏的方法.

// 按下时x座标
    private float startX = 0;
    // 最终x座标
    private float endx = 0;

    @Override
    public boolean onInterceptTouchEvent(MotionEvent ev) {
        // TODO Auto-generated method stub
        int what = ev.getAction();
        System.out.println("what" + what);
        switch (what) {
        case MotionEvent.ACTION_DOWN:
            startX = ev.getX();
            break;
        }
        endx = ev.getX();

        if (endx - startX > 150)// 距离超过150
        {
            // 返回true,会传给onTouchEvent方法
            snapToScreen(mCurScreen - 1);
            startX = endx;

        } else if (endx - startX < -150) {
            snapToScreen(mCurScreen + 1);
            startX = endx;
        }
        // 默认传递,其实就是传给相应的控件
        return super.onInterceptTouchEvent(ev);
    }