Android的Fragment左右滑动

app实现界面的左右手势滑动一般采用的是viewpager或者是Tabhost结合Fragment使用。这里对于使用viewpage的方式就不做赘述(因为viewpage本身是带手势的)。使用手势的时候一般的时候使用GestureDetector 进行监听,但是如果Fragment当中有ListView的时候,ListView会把左右滑动的给吞噬掉,所以直接使用GestureDetector 会不起作用。

为了解决ListView影响手势滑动的问题,我们提供了一个解决的思路:在Fragment的父Activity当中设置一个封装触摸事件的接口,在Fragment当中的Oncreate方法当中实现这个接口,在实现的方法中调用自定义的手势滑动的监听,在监听方法当中就可以实现自己想要实现的结果了。

在父类Activity当中封装的接口:

private ArrayList<MyOnTouchListener> onTouchListeners = new ArrayList<MyOnTouchListener>(
            10);

    @Override
    public boolean dispatchTouchEvent(MotionEvent ev) {
        for (MyOnTouchListener listener : onTouchListeners) {
            listener.onTouch(ev);
        }
        return super.dispatchTouchEvent(ev);
    }

    public void registerMyOnTouchListener(MyOnTouchListener myOnTouchListener) {
        onTouchListeners.add(myOnTouchListener);
    }

    public void unregisterMyOnTouchListener(MyOnTouchListener myOnTouchListener) {
        onTouchListeners.remove(myOnTouchListener);
    }

    public interface MyOnTouchListener {
        public boolean onTouch(MotionEvent ev);
    }
在Fragment 先创建一个MyOnTouchListener变量myOnTouchListener,在oncreate方法当中:
myOnTouchListener=new MainActivity.MyOnTouchListener() {
                        
                        @Override
                        public boolean onTouch(MotionEvent ev) {
                                        boolean result = detector.onTouchEvent(ev);
                                return result;
                        }
                };
        ((MainActivity)getActivity()).registerMyOnTouchListener(myOnTouchListener);
其中detector为自定义的手势滑动监听器。


你可能感兴趣的:(android,手势滑动,Fragment获得触摸事件)