Sincronizar posiciones de desplazamiento ScrollView - Android



2 Answers

Una mejora de la solución de Andy: en su código, usa scrollTo, el problema es que si arrojas una vista de desplazamiento en una dirección y luego arrojas otra en otra dirección, notarás que la primera no detiene su aventura anterior movimiento.

Esto se debe al hecho de que scrollView usa computeScroll () para hacer sus gestos arrojadizos, y entra en conflicto con scrollTo.

Para evitar esto, simplemente programe el onScrollChanged de esta manera:

    public void onScrollChanged(ObservableScrollView scrollView, int x, int y, int oldx, int oldy) {
    if(interceptScroll){
        interceptScroll=false;
        if(scrollView == scrollView1) {
            scrollView2.onOverScrolled(x,y,true,true);
        } else if(scrollView == scrollView2) {
            scrollView1.onOverScrolled(x,y,true,true);
        }
        interceptScroll=true;
    }
}

con intercepción Desplácese un booleano estático inicializado a verdadero. (Esto ayuda a evitar bucles infinitos en ScrollChanged)

onOverScrolled es la única función que encontré que podría usarse para evitar que scrollView se tirara (¡pero podría haber otros que me he perdido!)

Para acceder a esta función (que está protegida) debe agregar esto a su ObservableScrollViewer

public void onOverScrolled(int scrollX, int scrollY, boolean clampedX, boolean clampedY) {
    super.onOverScrolled(scrollX, scrollY, clampedX, clampedY);
}
android scroll

Tengo 2 ScrollViews en mi diseño de Android. ¿Cómo puedo sincronizar sus posiciones de desplazamiento?




En el paquete Android v4 de soporte, Android proporciona una nueva clase llamada NestedScrollView .

podemos reemplazar el nodo <ScrollView> con <android.support.v4.widget.NestedScrollView> en el layout xml e implementamos su NestedScrollView.OnScrollChangeListener en Java para manejar el desplazamiento.

Eso hace las cosas más fáciles.




Related