studio right fragments example android android-fragments gesture

android - right - Detectar gesto de barrido en fragmento



gesturedetector android example (1)

Hola, he implementado un Fragment y quiero detectar un evento táctil en mi fragmento.

Pero no puedo detectar ese evento, de hecho, no se detecta ningún evento en absoluto. Funciona bien en Activity , pero no está trabajando en fragmentos.

Lo siguiente es mi código:

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; } }


Finalmente obtuve una solución del código a continuación, que es de Android Fragment onCreateView con gestos .

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); } });

Esto va en el método onCreateView() del fragmento.