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?
- Deshacerse de overdraw en un ListView con fondos por elemento
- Listview en SwipeRefreshLayout - no muestra nada cuando el adaptador personalizado tiene sólo una fila para mostrar
- Agregar un encabezado / pie de página en un listview en xml
- Obtener un elemento seleccionado en listview cuando genero el menú contextual
- ¿Cómo puedo evitar que el pie de página de ListView se seleccione?
- Desplazar un ListView por píxeles en Android
- Active la casilla de verificación mediante programación
- Cómo crear ListView con la ayuda de remoteview?
- Getview parámetro "convertview" no nulo en el nuevo parámetro "posición"
- Cómo cambiar el color de backgroung cuando haces clic en los elementos de ListView horizontal en Android
- ¿Hay alguna manera de saber cuántos elementos están mostrando en una vista de lista?
- android: ¿cómo conservo los datos en mi arrayadapter / listview cuando cambia la orientación?
- Resaltando el elemento seleccionado en el listview en android
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);
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));
- Biblioteca de diseño de Android CoordinatorLayout, AppBarLayout y DrawerLayout
- Android + gradle: diferentes metadatos manifiestos por sabor