¿Deslizar / deslizar el cambio de pestañas junto con ScrollView?

Lo mejor que pude encontrar en este tema en particular (aunque no uso una Galería):ScrollView y Gallery interfiriendo - realmente no da una respuesta específica sin embargo. Y mi implementación no usa una Galería, obviamente.

alte a la siguiente parte en negrita para la parte interesante

Así que obtuve Fling / Swipe / Flick / como quieras llamarlo para que funcione hace un tiempo en mi aplicación. La inspiración se obtuvo de un par de lugares diferentes, algunos de ellos son "detección de gestos básicos" aquí en Stack Overflow Detección de gestos de descarga en el diseño de cuadrícula), Código Shogun http: //www.codeshogun.com/blog/2009/04/16/how-to-implement-swipe-action-in-android) y desarrollo de Android http: //developingandroid.blogspot.com/2009/09/implementing-swipe-gesture.htm), pero no uso un ViewFlipper en mi aplicación. Cuando ocurre una aventura, simplemente cambio la pestaña (envolviendo los extremos).

Ahora, algunas de mis pestañas contienen ScrollViews. Estos ScrollViews obviamente responden a los desplazamientos hacia arriba / abajo para permitirle ver todos los datos que contiene, no sorprende. El problema es que parecería que la función de 'desplazamiento' de estas ScrollViews sobrescribe mi gesto de lanzamiento. No puedo arrojar dentro de un ScrollView (desplazamiento muy bien), pero funciona perfectamente fuera de ellos (en la misma pestaña, en otras vistas como TableRow o lo que sea).

He echado un vistazo rápido ahttp: //blog.velir.com/index.php/2010/11/17/android-snapping-horizontal-scroll también, que proporciona una forma de implementar HorizontalScrollView. Pero aún maneja gestos a través de una clase que extiende SimpleOnGestureListener (y sobrescribe onFling), que es la misma implementación que tengo (lo que me lleva a creer que realmente no ayudará). Código fuente para ScrollView de Google:http: //google.com/codesearch/p? hl = es # uX1GffpyOZk / core / java / android / widget / ScrollView.java & d = 3

¿Hay alguna manera de hacer que mi implementación de Swipe y ScrollView trabajen juntas sin esfuerzo?

Aquí es donde radica el problema, supongo. ScrollView.java también usa un método llamado onTouchEvent y la documentación para los estados onTouchEvent for Activity:

"Se llama cuando un evento de pantalla táctil no fue manejado por ninguna de las vistas debajo de él. Esto es más útil para procesar eventos táctiles que ocurren fuera de los límites de su ventana, donde no hay vista para recibirlo".

Así que ScrollView lo "anula", ¿qué debo hacer? ¿No hay forma de asegurar que ambos estén marcados? Mi onTouchEvent que no se ve afectado cuando el ScrollView maneja el onTouchEvent:

@Override
/** Used for swipe gestures */
public boolean onTouchEvent(MotionEvent event) {
    if (gestureDetector.onTouchEvent(event))
        return true;
    else
        return false;
}

Más código fuente general a continuación, probablemente no sea muy vital. El gestoDetector dentro de mi clase de pestañas con su oyente asociado:

    // Gestures
    gestureDetector = new GestureDetector(new MyGestureDetector());
    gestureListener = new View.OnTouchListener() {
        @Override
        public boolean onTouch(View v, MotionEvent event) {
            if (gestureDetector.onTouchEvent(event)) {
                return true;
            }
            return false;
        }
    };

Mi clase de gestos, que es una clase anidada de mi clase de pestañas (que extiende TabActivity): es igual a cualquier otro código que encontrará sobre este tema:

/** GestureDetector used to swipe between classes */
class MyGestureDetector extends SimpleOnGestureListener {
    TabHost tabHost = getTabHost(); 

    @Override
    public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) {
        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) {
                // my tab code
                return true;
            } else if (e2.getX() - e1.getX() > SWIPE_MIN_DISTANCE && Math.abs(velocityX) > SWIPE_THRESHOLD_VELOCITY) {
                // my tab code
                return true;
            }
        } catch (Exception e) {
            Log.e("MyGestureDetector onFling", e.toString());
        }
        return false;
    }
}

Respuestas a la pregunta(3)

Su respuesta a la pregunta