Android: cómo hacer scrollview infinito con desplazamiento sin fin

Quiero un código para que el ScrollView muestre las mismas imágenes con desplazamiento sin fin una y otra vez.

Esto es excelente para el diseño y quiero saber cuál es el código necesario para añadirlo a un ScrollView con desplazamiento infinito.

 <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:paddingBottom="@dimen/activity_vertical_margin" android:paddingLeft="@dimen/activity_horizontal_margin" android:paddingRight="@dimen/activity_horizontal_margin" android:paddingTop="@dimen/activity_vertical_margin" tools:context=".MainActivity" > <HorizontalScrollView android:id="@+id/horizontalScrollView1" android:layout_width="match_parent" android:layout_height="wrap_content" > <LinearLayout android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="horizontal" > <ImageView android:id="@+id/imageView1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:src="@drawable/ic_launcher" /> <ImageView android:id="@+id/imageView2" android:layout_width="wrap_content" android:layout_height="wrap_content" android:src="@drawable/ic_launcher" /> <ImageView android:id="@+id/imageView3" android:layout_width="wrap_content" android:layout_height="wrap_content" android:src="@drawable/ic_launcher" /> <ImageView android:id="@+id/imageView1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:src="@drawable/ic_launcher" /> <ImageView android:id="@+id/imageView2" android:layout_width="wrap_content" android:layout_height="wrap_content" android:src="@drawable/ic_launcher" /> <ImageView android:id="@+id/imageView3" android:layout_width="wrap_content" android:layout_height="wrap_content" android:src="@drawable/ic_launcher" /> <ImageView android:id="@+id/imageView1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:src="@drawable/ic_launcher" /> <ImageView android:id="@+id/imageView2" android:layout_width="wrap_content" android:layout_height="wrap_content" android:src="@drawable/ic_launcher" /> <ImageView android:id="@+id/imageView3" android:layout_width="wrap_content" android:layout_height="wrap_content" android:src="@drawable/ic_launcher" /> </LinearLayout> </HorizontalScrollView> 

Utilice un ListView y un Adapter que se modifica ligeramente para tener elementos "infinitos"

Aquí están los cambios a su Adapter que apoyaría este comportamiento:

 @Override public int getCount() { return Integer.MAX_VALUE; } @Override public ImageItem getItem(int position) { return mItems.get(position % mItems.size()); } 

Esencialmente usted lo MAX_INT diciéndole que la cuenta es MAX_INT y entonces cuando usted va para conseguir un artículo mod del uso para conseguir el artículo correcto en la secuencia.

Varias personas han propuesto diferentes soluciones a este ya así.

Vea aquí: Lista sin fin de Android

Y CommonsWare tiene un componente que también admite este comportamiento: https://github.com/commonsguy/cwac-endless

La respuesta de FoamGuy es correcta. Pero para hacer que la lista retroceda, como en un carrusel infinito, también truco al sistema estableciendo el elemento predeterminado como Integer.MAX_VALUE / 2 llamando a:

 listView.setSelection( Integer.MAX_VALUE/2 ); 

Es bastante improbable que el usuario retroceda 1 mil millones de elementos atrás, lo que hace que el efecto del carrusel infinito en ambas direcciones.

También tengo algunas otras modificaciones a la implementación personalizada de BaseAdapter:

 @Override public Object getItem(int position) { if ( model.getSize()==0 ) { return null; } // mod the list index to the actual element count return model.getElementAtPosition( position%model.getSize() ); } @Override public long getItemId(int position) { if ( model.getSize()==0 ) { return -1; } // same as above return model.getElementAtPosition( position%model.getSize() ).id; } @Override public View getView(int position, View convertView, ViewGroup parent) { if ( model.getSize()==0 ) { return null; } // also make sure to point to the appropriate element in your model otherwise you // would end up building millions of views. position%=model.getSize(); View front= convertView; if ( convertView==null ) { // inflate/build your list item view } ... } 

De esta manera la lista girará como en un carrusel sin asignación de memoria adicional para vistas innecesarias.

  • Android ViewPager con ScrollViews con ViewPagers dentro de ScrollViews
  • ¿Es posible tener un ViewPager dentro de un ScrollView?
  • No se puede arrastrar la barra de búsqueda dentro de scrollview
  • Sincronizar la posición de dos vistas ScrollView
  • MonoDroid: Error al llamar al constructor de la vista personalizada - TwoDScrollView
  • Cómo agregar ScrollView a GLSurfaceview en Opengl ES2.0 en Android
  • Custom ViewPager dentro de ObservableScrollView no se mide correctamente la altura
  • ¿Cómo desactivar y activar el desplazamiento en Android ScrollView?
  • ¿Cómo puedo cambiar el color de OverScroll en Android 2.3.1?
  • ¿Cómo desplazarse al centro de HorizontalScrollView sólo cuando se inicia la actividad?
  • Margen redundante al agregar ImageView a ScrollView en Android
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.