检测片段中的滑动手势

嗨,我已经实现了一个Fragment ,我想检测我的片段上的触摸事件。

但是我无法察觉到这个事件,事实上根本没有发现任何事件。 它在Activity运行的很好,但是它不能在碎片上工作。

以下是我的代码:

  public class Swipe_Fragment extends Fragment implements GestureDetector.OnGestureListener, GestureDetector.OnDoubleTapListener { private SimpleGestureFilter detector; private LinearLayout swipLinear; private static int DEFAULT = 50; private int brightness; private GestureDetectorCompat mDetector; @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View rootView = inflater.inflate(R.layout.swipe_screen, container, false); swipLinear = (LinearLayout) rootView.findViewById(R.id.swipLinear); brightness = DEFAULT; mDetector = new GestureDetectorCompat(getActivity(), this); // Set the gesture detector as the double tap // listener. mDetector.setOnDoubleTapListener(this); // Detect touched area // detector = new SimpleGestureFilter(getActivity(), this); return rootView; } @Override public boolean onDoubleTap(MotionEvent arg0) { Toast.makeText(getActivity(), "onDoubleTap", Toast.LENGTH_LONG).show(); return false; } @Override public boolean onDoubleTapEvent(MotionEvent e) { Toast.makeText(getActivity(), "onDoubleTapEvent", Toast.LENGTH_LONG).show(); return false; } @Override public boolean onSingleTapConfirmed(MotionEvent e) { Toast.makeText(getActivity(), "onSingleTapConfirmed", Toast.LENGTH_LONG).show(); return false; } @Override public boolean onDown(MotionEvent e) { Toast.makeText(getActivity(), "onDown", Toast.LENGTH_LONG).show(); return false; } @Override public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) { Toast.makeText(getActivity(), "onFling", Toast.LENGTH_LONG).show(); return false; } @Override public void onLongPress(MotionEvent e) { Toast.makeText(getActivity(), "onLongPress", Toast.LENGTH_LONG).show(); } @Override public boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX, float distanceY) { Toast.makeText(getActivity(), "onScroll", Toast.LENGTH_LONG).show(); return false; } @Override public void onShowPress(MotionEvent e) { Toast.makeText(getActivity(), "onShowPress", Toast.LENGTH_LONG).show(); } @Override public boolean onSingleTapUp(MotionEvent e) { Toast.makeText(getActivity(), "onSingleTapUp", Toast.LENGTH_LONG).show(); return false; } } 

Solutions Collecting From Web of "检测片段中的滑动手势"

最后,我从下面的代码中得到了一个解决scheme,这个代码来自Android Fragment onCreateView和Gestures 。

  final GestureDetector gesture = new GestureDetector(getActivity(), new GestureDetector.SimpleOnGestureListener() { @Override public boolean onDown(MotionEvent e) { return true; } @Override public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) { Log.i(Constants.APP_TAG, "onFling has been called!"); final int SWIPE_MIN_DISTANCE = 120; final int SWIPE_MAX_OFF_PATH = 250; final int SWIPE_THRESHOLD_VELOCITY = 200; try { if (Math.abs(e1.getY() - e2.getY()) > SWIPE_MAX_OFF_PATH) return false; if (e1.getX() - e2.getX() > SWIPE_MIN_DISTANCE && Math.abs(velocityX) > SWIPE_THRESHOLD_VELOCITY) { Log.i(Constants.APP_TAG, "Right to Left"); } else if (e2.getX() - e1.getX() > SWIPE_MIN_DISTANCE && Math.abs(velocityX) > SWIPE_THRESHOLD_VELOCITY) { Log.i(Constants.APP_TAG, "Left to Right"); } } catch (Exception e) { // nothing } return super.onFling(e1, e2, velocityX, velocityY); } }); v.setOnTouchListener(new View.OnTouchListener() { @Override public boolean onTouch(View v, MotionEvent event) { return gesture.onTouchEvent(event); } }); 

这在片段的onCreateView()方法中进行。