Autore Topic: Recuperare una View dentro SimpleOnGestureListener  (Letto 426 volte)

Offline nicopasso

  • Nuovo arrivato
  • *
  • Post: 32
  • Respect: +1
    • Mostra profilo
  • Dispositivo Android:
    Google Nexus 5
  • Sistema operativo:
    Windows 7, Mac OS X 10.5
Recuperare una View dentro SimpleOnGestureListener
« il: 22 Aprile 2013, 12:31:22 CEST »
0
Ciao a tutti.
Ho il seguente problema: in ogni Activity della mia applicazione devo aggiungere un GestureListener che esegua delle animazioni allo swipe destro e sinistro dell'utente.
Ho creato quindi un GestureListener che estende SimpleOnGestureListener.
Ora avrei bisogno di recuperare le view dell'Activity che usa il GestureListener, all'interno del GestureListener stesso. In questo modo evito di aggiungere il codice delle animazioni in ogni Activity ma lo scrivo una volta nel GestureListener e funziona in automatico per tutte le Activity.

Codice: [Seleziona]
//Creo il mio GestureListener
public class GestureSwipeListener extends SimpleOnGestureListener {

        final Context myContext;

        // Costanti per lo swipe
        private static final int SWIPE_THRESHOLD = 100;
        private static final int SWIPE_VELOCITY_THRESHOLD = 100;

        public GestureSwipeListener(Context context) {
                myContext = context;
               
        }

        @Override
        public boolean onDown(MotionEvent e) {
                return super.onDown(e);
        }

        @Override
        public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX,
                        float velocityY) {
                boolean result = false;
                try {
                        float diffY = e2.getY() - e1.getY();
                        float diffX = e2.getX() - e1.getX();
                        if (Math.abs(diffX) > Math.abs(diffY)) {
                                if (Math.abs(diffX) > SWIPE_THRESHOLD
                                                && Math.abs(velocityX) > SWIPE_VELOCITY_THRESHOLD) {
                                        if (diffX > 0) {
                                                onSwipeRight();
                                        } else {
                                                onSwipeLeft();
                                        }
                                }
                        } else {
                                if (Math.abs(diffY) > SWIPE_THRESHOLD
                                                && Math.abs(velocityY) > SWIPE_VELOCITY_THRESHOLD) {
                                        if (diffY > 0) {
                                                onSwipeBottom();
                                        } else {
                                                onSwipeTop();
                                        }
                                }
                        }
                } catch (Exception exception) {
                        exception.printStackTrace();
                }
                return result;
        }

        public boolean onSwipeRight() {
                Log.d("FLING", "right");
                return true;

        }

        public boolean onSwipeLeft() {
                Log.d("FLING", "left");
                return true;
        }

        public boolean onSwipeTop() {
                Log.d("FLING", "top");
                return true;
        }

        public boolean onSwipeBottom() {
                Log.d("FLING", "bottom");
                return true;
        }

} // end class OnSwipeTouchListener


Mentre richiamo il GestureListener nella mia Activity in questo modo:

Codice: [Seleziona]
GestureSwipeListener gestureListener = new GestureSwipeListener(this.getApplicationContext());
e assegno il Listener ad una View tramite un gestureDetector
Codice: [Seleziona]
gestureDetector = new GestureDetector(getApplicationContext(), gestureListener);

        mainView = findViewById(R.id.main_view);
        mainView.setClickable(true);
        mainView.setOnTouchListener(new View.OnTouchListener() {
                       
        @Override
        public boolean onTouch(View v, MotionEvent event) {
                // TODO Auto-generated method stub
                if(gestureDetector.onTouchEvent(event)) {
                                       
                        return true;
                }
                return false;
        }
});

Avete qualche suggerimento?
Grazie!