Galería de imágenes de desplazamiento horizontal de Android

Me gustaría crear una aplicación con galería de imágenes horizontal (con una fila y varias columnas). Primero intento usar gridview, pero se puede utilizar como desplazamiento vertical solamente. ¿Puedo usar ListView o GridView para ese propósito?

Galería de imágenes con desplazamiento horizontal

Cree LinearLayout dentro de HorizontalScrollView, luego cree una imageView dinámicamente y añada esa vista de imagen a linearLayout.

Ejemplo de código:

 <HorizontalScrollView android:id="@+id/horizontal_scroll" android:layout_width="match_parent" android:layout_height="wrap_content" > <LinearLayout android:id="@+id/linear" android:layout_width="wrap_content" android:layout_height="wrap_content" android:orientation="horizontal" > </LinearLayout> </HorizontalScrollView> 

En el método onCreate (), obtenga el id de linearLayout del archivo xml y agregue ImageView creado dinámicamente a linearlayout:

  LinearLayout layout = (LinearLayout) findViewById(R.id.linear); for (int i = 0; i < 10; i++) { ImageView imageView = new ImageView(this); imageView.setId(i); imageView.setPadding(2, 2, 2, 2); imageView.setImageBitmap(BitmapFactory.decodeResource( getResources(), R.drawable.ic_launcher)); imageView.setScaleType(ScaleType.FIT_XY); layout.addView(imageView); } 

Ya que ya no tenemos el widget Gallery un poco de nouse DIY es necesario. Puede crear una tira de miniaturas horizontalmente desplazable con un HorizontalScrollView y un LinearLayout anidado y añadir dinámicamente imágenes desde dentro de su actividad:

 <HorizontalScrollView android:layout_width="match_parent" android:layout_height="72dp" android:layout_gravity="bottom" android:background="@color/black"> <LinearLayout android:id="@+id/thumbnails" android:layout_width="wrap_content" android:layout_height="match_parent" android:gravity="center_vertical" android:orientation="horizontal" android:paddingTop="2dp"/> </HorizontalScrollView> 

El código siguiente se toma de este tutorial: http://sourcey.com/android-horizontally-scrolling-pan-scan-and-zoom-image-gallery/ GalleryActivity implementa lo que estás buscando y también se expande en tu Al agregar un elemento ViewPager para mostrar la imagen seleccionada y un SubsamplingScaleImageView para que pueda desplazar, escanear y ampliar la imagen seleccionada:

 package com.sourcey.imagegallerydemo; import android.content.Context; import android.graphics.Bitmap; import android.os.Bundle; import android.support.v4.view.PagerAdapter; import android.support.v7.app.AppCompatActivity; import android.support.v4.view.ViewPager; import android.util.Log; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.FrameLayout; import android.widget.ImageButton; import android.widget.ImageView; import android.widget.LinearLayout; import com.bumptech.glide.Glide; import com.bumptech.glide.request.animation.GlideAnimation; import com.bumptech.glide.request.target.SimpleTarget; import com.davemorrissey.labs.subscaleview.ImageSource; import com.davemorrissey.labs.subscaleview.SubsamplingScaleImageView; import junit.framework.Assert; import java.util.ArrayList; import butterknife.ButterKnife; import butterknife.InjectView; public class GalleryActivity extends AppCompatActivity { public static final String TAG = "GalleryActivity"; public static final String EXTRA_NAME = "images"; private ArrayList<String> _images; private GalleryPagerAdapter _adapter; @InjectView(R.id.pager) ViewPager _pager; @InjectView(R.id.thumbnails) LinearLayout _thumbnails; @InjectView(R.id.btn_close) ImageButton _closeButton; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_gallery); ButterKnife.inject(this); _images = (ArrayList<String>) getIntent().getSerializableExtra(EXTRA_NAME); Assert.assertNotNull(_images); _adapter = new GalleryPagerAdapter(this); _pager.setAdapter(_adapter); _pager.setOffscreenPageLimit(6); // how many images to load into memory _closeButton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Log.d(TAG, "Close clicked"); finish(); } }); } class GalleryPagerAdapter extends PagerAdapter { Context _context; LayoutInflater _inflater; public GalleryPagerAdapter(Context context) { _context = context; _inflater = (LayoutInflater) _context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); } @Override public int getCount() { return _images.size(); } @Override public boolean isViewFromObject(View view, Object object) { return view == ((LinearLayout) object); } @Override public Object instantiateItem(ViewGroup container, final int position) { View itemView = _inflater.inflate(R.layout.pager_gallery_item, container, false); container.addView(itemView); // Get the border size to show around each image int borderSize = _thumbnails.getPaddingTop(); // Get the size of the actual thumbnail image int thumbnailSize = ((FrameLayout.LayoutParams) _pager.getLayoutParams()).bottomMargin - (borderSize*2); // Set the thumbnail layout parameters. Adjust as required LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(thumbnailSize, thumbnailSize); params.setMargins(0, 0, borderSize, 0); // You could also set like so to remove borders //ViewGroup.LayoutParams params = new ViewGroup.LayoutParams( // ViewGroup.LayoutParams.WRAP_CONTENT, // ViewGroup.LayoutParams.WRAP_CONTENT); final ImageView thumbView = new ImageView(_context); thumbView.setScaleType(ImageView.ScaleType.CENTER_CROP); thumbView.setLayoutParams(params); thumbView.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Log.d(TAG, "Thumbnail clicked"); // Set the pager position when thumbnail clicked _pager.setCurrentItem(position); } }); _thumbnails.addView(thumbView); final SubsamplingScaleImageView imageView = (SubsamplingScaleImageView) itemView.findViewById(R.id.image); // Asynchronously load the image and set the thumbnail and pager view Glide.with(_context) .load(_images.get(position)) .asBitmap() .into(new SimpleTarget<Bitmap>() { @Override public void onResourceReady(Bitmap bitmap, GlideAnimation anim) { imageView.setImage(ImageSource.bitmap(bitmap)); thumbView.setImageBitmap(bitmap); } }); return itemView; } @Override public void destroyItem(ViewGroup container, int position, Object object) { container.removeView((LinearLayout) object); } } } 

El proyecto completo de Android está en Github: https://github.com/sourcey/imagegallerydemo

Por favor, seleccione una respuesta si tiene lo que busca …

Ver una demostración de trabajo de aquí

Con el lanzamiento de la biblioteca RecyclerView, puede implementar fácilmente la orientación horizontal y vertical de la lista. Esto se hace posible mediante el uso de LinearLayoutManager para el que se puede especificar la orientación horizontal o vertical como se muestra a continuación …

  LinearLayoutManager horizontalLayoutManager = new LinearLayoutManager(MainActivity.this, LinearLayoutManager.HORIZONTAL, false); 

Introduzca aquí la descripción de la imagen

Puedes leer más

Ir con HorizontalScrollView en lugar de ListView o GirdView http://developer.android.com/reference/android/widget/HorizontalScrollView.html

TwoWayView funcionó bien para mí. https://github.com/lucasr/twoway-view/

Documentación de HorizontalScrollView

Para usar HorizontalScrollView sólo debe tener un hijo dentro de él. La forma en que lo he usado antes con imágenes como lo que estás haciendo es crear un TableLayout y agregar las imágenes a los TableRows. TableLayout puede tener muchas filas o sólo una fila y muchas columnas.

Puede agregar ImageViews (o cualquier otra vista) a cada fila y, finalmente, agregar el TableRow a TableLayout. Una vez que el TableLayout se hace, todo lo que necesitas hacer es:

  //createTable method is where you would loop through the images to add TableLayout table = createTable(rowCount, columnCount); HorizontalScrollView hozView = new HorizontalScrollView(this); hozView.addView(table); setContentView(hozView); 

[Introduzca aquí la descripción de la imagen] [1]

[1]: http://i.stack.imgur.com/OCgSk.png Texto fuerte

Puede utilizar Recycler View para crear una vista de imagen de diapositivas

 layoutManager=new LinearLayoutManager(getApplicationContext(),LinearLayoutManager.HORIZONTAL, false); Hor_RecylerView.setLayoutManager(layoutManager); AlphaInAnimationAdapter alphaAdapter = new AlphaInAnimationAdapter(i); Hor_RecylerView.getItemAnimator().setAddDuration(1000); Hor_RecylerView.setAdapter(new SlideInLeftAnimationAdapter(alphaAdapter)); 
  • Cómo obtener id de un elemento particular de listview en android?
  • Android abriendo el menú contextual después de hacer clic en el botón
  • Listado de beacons en el dispositivo android
  • Cómo establecer el ancho de divisor ListView?
  • Asegúrese de que el contenido de su adaptador no se ha modificado desde un subproceso de fondo, sino sólo desde el subproceso de interfaz de usuario
  • Custom ListView y el menú contextual. ¿Cómo conseguirlo?
  • Añadir 2 listview en el cajón de navegación, sólo uno funciona
  • ListView - Imágenes barajadas al desplazarse
  • Cómo rellenar JSON desde este enlace a Android Listview
  • Sin elástico Desplazamiento en ListView
  • Ordenar la vista de lista con el adaptador de matriz
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.