写这篇博客的缘由是项目中遇到了需要监听手势的需求,因为是对Fragment中View的监听,相比Activity中要麻烦一丢丢,在网上寻找解决方法后, 总结了这个能在Fragment中监听手势的方法 需要导入的包
import android.view.GestureDetector; import android.view.MotionEvent;需要添加的变量在fragment的onCreateView中:private GestureDetector gesture; //手势识别要注意一点:为某一View设置手势监听时,如果这个View包含子View,那么一定也要为这个子View设置setOnTouchListener,不然手势滑到子View上会失去作用。个人遇到过这个@Override public 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包含一个ViewPager,最初的思路是为这个ViewPager设置setOnTouchListener然而并没有起作用,最后在这个ViewPager的
Adapter中为Item中布局设置setOnTouchListener 从而成功解决了这个问题。