2011-04-24 17 views
13

Existe el ScrollView que permite solo el desplazamiento vertical, y el HorizontalScrollView que permite solo el desplazamiento horizontal, pero no la clase para ambos. Esto parece un déficit enorme en la interfaz de usuario de Android. ¿Algún truco para permitir esto?Android - Cómo permitir el desplazamiento horizontal y vertical

+2

En muchos casos, cualquier cosa que necesite tanto espacio no debería estar usando 'ScrollView' /' HorizontalScrollView'. Esos solo funcionan cuando los contenidos son bastante modestos en el consumo de memoria. En el otro extremo del espectro, considere Google Maps, que no se implementa con 'ScrollView' o' HorizontalScrollView', porque no podemos guardar mapas de todo el planeta en la RAM de una vez. Piensa detenidamente en lo que intentas tener scroll, porque es muy posible que necesites hacer algo mucho más complejo que usar 'ScrollView' y kin para trabajar en un dispositivo móvil. – CommonsWare

+0

Mi solución a eso fue calcular qué objetos del nivel (esto es un juego) están en pantalla, y solo dibujarlos. La otra solución fue usar una vista de marco del ancho/alto de los padres y mover los objetos del nivel a medida que ocurren los eventos. El último parece que requeriría más procesamiento, pero probablemente menos RAM. ¿Tienes una recomendación? –

+1

"Mi solución fue calcular qué objetos del nivel (esto es un juego) están en pantalla, y solo dibujarlos". - No soy desarrollador de juegos, pero parece que no necesitas 'ScrollView' y kin, ya que lo estás manejando todo por ti mismo. Simplemente observe los eventos de barrido y vuelva a dibujar su nivel en ese punto. – CommonsWare

Respuesta

28

probar este

<?xml version="1.0" encoding="utf-8"?> 
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android" 
        android:layout_width="fill_parent" 
        android:layout_height="wrap_content"> 

    <HorizontalScrollView xmlns:android="http://schemas.android.com/apk/res/android" 
        android:layout_width="wrap_content" 
        android:layout_height="fill_parent"> 

     <TableLayout 
        android:id="@+id/amortization" 
        android:layout_width="wrap_content" 
        android:layout_height="wrap_content"> 

       <TableRow 
        android:background="#ffff00"> 
        <TextView 
         android:text="@string/amortization_1" 
         android:padding="3dip"/> 
        <TextView 
         android:text="@string/amortization_2" 
         android:padding="3dip"/> 
        <TextView 
         android:text="@string/amortization_3" 
         android:padding="3dip"/> 
        <TextView 
         android:text="@string/amortization_4" 
         android:padding="3dip"/> 
        <TextView 
         android:text="@string/amortization_5" 
         android:padding="3dip"/> 
        <TextView 
         android:text="@string/amortization_6" 
         android:padding="3dip"/> 
        <TextView 
         android:text="@string/amortization_7" 
         android:padding="3dip"/> 
       </TableRow> 
     </TableLayout> 
    </HorizontalScrollView> 
</ScrollView> 
+0

Traducción en un FrameLayout es lo mejor, me parece –

+0

Esto funciona bien, pero solo puede desplazarse horizontal o verticalmente, a la vez, y no en diagonal. Se siente inacabado, pero es fácil de implementar. – Hersker

+0

Tengo una gran grilla de números que tengo que mostrar y esto funciona perfectamente. Si bien no puedes desplazarte diagonalmente, en realidad no es tan importante en una situación como la mía. – DiscDev

2

Un ejemplo con una ImageView:

<?xml version="1.0" encoding="utf-8"?> 
<ScrollView android:id="@+id/ScrollView02" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      xmlns:android="http://schemas.android.com/apk/res/android"> 
<HorizontalScrollView android:id="@+id/HorizontalScrollView01" 
         android:layout_width="wrap_content" 
         android:layout_height="wrap_content"> 
<ImageView android:id="@+id/ImageView01" 
      android:src="@drawable/pic" 
      android:isScrollContainer="true" 
      android:layout_height="fill_parent" 
      android:layout_width="fill_parent" 
      android:adjustViewBounds="true"> 
</ImageView> 
</HorizontalScrollView> 
</ScrollView> 

Fuente: http://www.android-spa.com/viewtopic.php?t=3959&highlight=scrollview+vertical+horizontal

+2

En mi humilde opinión una pantalla que requiere tanto desplazamiento no es nada cómoda (de hecho, creo que el desplazamiento vertical no es una buena idea) pero funciona. –

+0

Es para un juego con niveles mucho más grandes que la pantalla. Gracias amigo. –

1

he encontrado que es importante establecer fillViewport porque de lo contrario las barras de desplazamiento podría aparecer en posiciones aleatorias en lugar de en la parte derecha/inferior del área de desplazamiento:

<ScrollView 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:fillViewport="true" > 
    <HorizontalScrollView 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:fillViewport="true" > 
    </HorizontalScrollView> 
</ScrollView> 
Cuestiones relacionadas