¿Cómo implementar una galería sin fin en Android?

Estoy usando un diseño de galería en mi aplicación. Funciona cuando el usuario mueve las imágenes en la galería de izquierda a derecha (es infinito que significa que los elementos se repiten de nuevo). Pero cuando el usuario se mueve de derecha a izquierda y llega al primer elemento, no lo hace. Después de eso no aparecen elementos. Pero quiero repetir elementos de este lado también. ¿Me puede dar algunas sugerencias?

Gallery g = (Gallery) findViewById(R.id.gallery); g.setAdapter(new ImageAdapter(this)); g.setFocusable(true); g.setSelection((int)(Integer.MAX_VALUE / 2) - (Integer.MAX_VALUE / 2)% mImageIds.length); g.setOnItemClickListener(new OnItemClickListener() { public void onItemClick(AdapterView<?> parent, View v, int position, long id) { try { imageid=position; ((ImageView)findViewById(R.id.ImageViewlarge)).setImageResource(mImageIds[position]); ((TextView)findViewById(R.id.TextViewImageName)).setText(imgNames[position]); mp = MediaPlayer.create(SeaSpell.this,audioTrack[position]); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } } }); } 

Captura de pantalla Frontgallery

¿Cómo puedo hacer que mi vista de galería sea circular? Soy capaz de hacerlo de izquierda a derecha infinitamente, pero cuando arrastrar de derecha a izquierda está mostrando el punto final.

En getView:

 if(position>21){ position=0; } 

Esto debe ser eliminado ya que debe ser manejado por la función checkPosition.

En el checkPosition:

Para el operador del módulo ( % ), dado a % b si 0 <= a < b entonces el resultado será a . Para b <= a < 2*b entonces el resultado será ab , así que si b == a , entonces el resultado es 0 . Esto continúa para cualquier entero positivo, por lo que el cheque debe ser:

 if (position > 0) position = position % mImageIds.length; 

Ahora, lo que le falta de esto es manejar el caso donde la position < 0 .

 aa%3 aa%3 f(a) 0 0 0 0 0 1 1 -1 -1 2 2 2 -2 -2 1 3 0 -3 0 0 4 1 -4 -1 2 5 2 -5 -2 1 6 0 -6 0 0 

Lo que queremos en este caso es que se remonte al final de la lista – el f(a) en la tabla anterior.

Como puede verse en la tabla anterior, si a es negativo entonces -b < a <= 0 . Además, si hacemos f(a) = (a % b) + b obtenemos el resultado deseado.

Esto significa que la lógica en checkPosition se convierte en:

 position = position % mImageIds.length; if (position < 0) position = position + mImageIds.length; 

Que debería funcionar para todos los valores de position independientemente del valor de mImageIds.length .

Si alguien quería hacerlo también ir hacia atrás, puede implementar esto. Todo lo que realmente hace es comenzar la galería en el medio.

 GalleryName.setSelection((int)( Integer.MAX_VALUE / 2 ) - ( Integer.MAX_VALUE / 2 ) % mImageIds.length); 

El código del adaptador para la explicación de reece se puede encontrar aquí: ¿galería circular del androide?

Sólo asegúrese de usar la sugerencia de gogothee para mover la selección inicial a la mitad del rango. (Para que pueda desplazarse hacia la izquierda y la derecha casi siempre). Por ejemplo, lo hice así:

 @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.mylayout); //get references to UI components mGallery = (Gallery) findViewById(R.id.filter_gallery); //connect Galleries with adapters mGallery.setAdapter(new GalleryAdapter(this)); //auto-select first image (position 1073741820) mGallery.setSelection((int)(Integer.MAX_VALUE/2) - ( (Integer.MAX_VALUE/2) % mImageBuffer.getCount() ) ); } 

Un enchufe auto sin vergüenza, acaba de escribir una galería de desplazamiento infinito Tutorial:

http://blog.blundell-apps.com/infinite-scrolling-gallery/

Yo uso las mismas matemáticas modulas como @reece, código fuente también se puede descargar.

Puede utilizar imágenes en su tarjeta SD o imágenes en su directorio / resources / drawable

Para hacer el primer elemento como centro de matriz disponible:

Your_gallery_obj.setSelection ((int) (Integer.MAX_VALUE / 2) – (Integer.MAX_VALUE / 2)% your_array_size);

Para hacer que el elemento central sea el centro de matriz disponible:

Your_gallery_obj.setSelection ((int) (Integer.MAX_VALUE / 2) + (Integer.MAX_VALUE / 2)% your_array_size);

  • Universal Image Loader gridview parpadea después de la llamada notifyDataSetChanged
  • Android listview muestra datos falsos después de desplazarse (adaptador personalizado)
  • Animar las adiciones de RecyclerView desde abajo
  • Encabezado de listview de Android
  • RecyclerView: IndexOutOfBoundsException Inconsistencia detectada. Posición de artículo no válida
  • Pasar la posición en el ListView al niño RecyclerView Adapter
  • Filtrado del objeto Realm en android
  • Combinar múltiples RecyclerView.Adapter para usar con RecyclerView único (Android)
  • Devolución de llamada desde el adaptador
  • Android: notifyDataSetChanged (); no funciona
  • crear un adaptador para rellenar Spinner con objetos
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.