实现Fragment滑动onFling的手势识别

来源:互联网 发布:中国证券市场数据库 编辑:程序博客网 时间:2024/06/02 01:08
写这篇博客的缘由是项目中遇到了需要监听手势的需求,因为是对Fragment中View的监听,相比Activity中要麻烦一丢丢,在网上寻找解决方法后,总结了这个能在Fragment中监听手势的方法需要导入的包
import android.view.GestureDetector;import android.view.MotionEvent;
 
需要添加的变量
private GestureDetector gesture; //手势识别

在fragment的onCreateView中:
@Overridepublic View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState){    View view = inflater.inflate(R.layout.fragment_card , container, false);    //根据父窗体getActivity()为fragment设置手势识别    gesture = new GestureDetector(this.getActivity(), new MyOnGestureListener());    //为fragment添加OnTouchListener监听器    view.setOnTouchListener(new View.OnTouchListener() {        @Override        public boolean onTouch(View v, MotionEvent event) {            return gesture.onTouchEvent(event);//返回手势识别触发的事件        }    });    return view;}

//设置手势识别监听器private class MyOnGestureListener extends GestureDetector.SimpleOnGestureListener{    @Override//此方法必须重写且返回真,否则onFling不起效    public boolean onDown(MotionEvent e) {        return true;    }    @Override    public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) {        if((e1.getX()- e2.getX()>120)&&Math.abs(velocityX)>200){            ……            return true;        }else if((e2.getX()- e1.getX()>120)&&Math.abs(velocityX)>200){            ……            return true;        }        return false;    }}
要注意一点:为某一View设置手势监听时,如果这个View包含子View,那么一定也要为这个子View设置setOnTouchListener,不然手势滑到子View上会失去作用。个人遇到过这个
情况,有大家可能会有点借鉴作用,我设置手势监听的View包含一个ViewPager,最初的思路是为这个ViewPager设置setOnTouchListener然而并没有起作用,最后在这个ViewPager的
Adapter中为Item中布局设置setOnTouchListener 从而成功解决了这个问题。




                                             
1 0