Estoy tratando de implementar una galería simple de imágenes en las que tengo una imagen para mostrar a la vez en la pantalla del dispositivo. Cuando deslizamos la pantalla de izquierda a derecha, debería mostrarse la siguiente imagen.
Para eso implementé un flipper de vista y le agregué vistas de imagen.
Pero no sé cómo atrapar ese evento de deslizamiento.
¿Alguien puede decirme con un ejemplo?Cómo deslizar imágenes
Respuesta
¿Por qué no hacerlo operativo galería de widgets .....
Here is the gallery tutorial....
Gracias ......
La galería está en desuso :(http://developer.android.com/reference/android/widget/Gallery. html –
Usted desea utilizar un ViewPager
disponible en el Android Support Jar. Aquí hay un tutorial: http://thepseudocoder.wordpress.com/2011/10/05/android-page-swiping-using-viewpager/
No desea utilizar Gallery
como algunos sugieren, ya que no está en desuso. Sin embargo desde el documentation que sugieren la ViewPager
y HorizantleScrollView
para resolver este problema de manera relativamente fácil:
This class is deprecated.
This widget is no longer supported. Other horizontally scrolling widgets include
HorizontalScrollView and ViewPager from the support library.
IMO ViewPager no es apropiado en todos los casos. Se asocia generalmente con fragmentos, y si solo quieres deslizar imágenes usando un fragmento separado con cada deslizamiento parece excesivo –
que necesitaba lo mismo para mi aplicación, y se utiliza un ViewPager
: http://blog.sqisland.com/2012/09/android-swipe-image-viewer-with-viewpager.html
Anteriormente he usado un ImageSwitcher
combinado con un GestureDetector
: http://blog.sqisland.com/2012/07/android-swipe-image-viewer.html
el código con ViewPager
es mucho más simple, y la experiencia es mucho mejor porque XX La imagen se desliza mientras desliza el dedo por la pantalla. Creo ImageView
directamente, no se requieren fragmentos.
¡Esta debería ser la respuesta aceptada! Acabas de hacer mi día con tu [ solución] (https://github.com/chiuki/android-swipe-image-viewer) y me ahorró horas de trabajo. Muchas gracias! – Emzor
Puede hacerlo así, funciona hoscos sin ninguna vista
public class Swipe extends Activity implements OnClickListener {
private static final int SWIPE_MIN_DISTANCE = 120;
//private static final int SWIPE_MAX_OFF_PATH = 250;
private static final int SWIPE_THRESHOLD_VELOCITY = 200;
final GestureDetector gdt = new GestureDetector(new GestureListener());
private GestureDetector gestureDetector;
ImageView img;
View.OnTouchListener gestureListener;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.swipe);
img = (ImageView)findViewById(R.id.imageView1swipe);
img.setOnTouchListener(new OnTouchListener() {
public boolean onTouch(final View view, final MotionEvent event) {
// TODO Auto-generated method stub
gdt.onTouchEvent(event);
//Log.i("Hello my Log 1","How dfgfd are you");
return true;
}
});
y declarar este método en su .java
private class GestureListener extends SimpleOnGestureListener {
@Override
public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX,
float velocityY) {
Log.i("Hello my Log 2","How dfgfd are you");
if (e1.getX() - e2.getX() > SWIPE_MIN_DISTANCE
&& Math.abs(velocityX) > SWIPE_THRESHOLD_VELOCITY) {
Log.i("dfsd", "Right to left");
return false; // Right to left
} else if (e2.getX() - e1.getX() > SWIPE_MIN_DISTANCE
&& Math.abs(velocityX) > SWIPE_THRESHOLD_VELOCITY) {
return false; // Left to right
}
if (e1.getY() - e2.getY() > SWIPE_MIN_DISTANCE
&& Math.abs(velocityY) > SWIPE_THRESHOLD_VELOCITY) {
return false; // Bottom to top
} else if (e2.getY() - e1.getY() > SWIPE_MIN_DISTANCE
&& Math.abs(velocityY) > SWIPE_THRESHOLD_VELOCITY) {
return false; // Top to bottom
}
return false;
}'
Puede ser this le ayudará a organizar todo el deslizar de Imágenes
Tenga en cuenta que debe publicar los puntos útiles de una respuesta aquí, en este sitio, o su publicación corre el riesgo de ser eliminada [Consulte las preguntas frecuentes donde se mencionan las respuestas que son 'apenas más que un enlace'] (http://stackoverflow.com/faq#deletion). Puede incluir el enlace si deseo, pero solo como una 'referencia'. La respuesta debería ser independiente sin necesidad del enlace. –
Puede hacer de esta manera también, sin usar ver flipper
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">
<ImageView
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:layout_gravity="center"
android:gravity="center"
android:layout_margin="10dip"
android:id="@+id/image_place_holder"
/>
</RelativeLayout>
Clase Actividad
public class MainActivity extends Activity {
private Integer[] mImageIds = { R.drawable.img1, R.drawable.img2,
R.drawable.img3 };
private static final String DEBUG_TAG = "MainActivity ";
ImageView imageView;
float startXValue = 1;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_NO_TITLE);
setContentView(R.layout.gallery);
imageView = (ImageView) findViewById(R.id.image_place_holder);
imageView.setImageResource(mImageIds[num]);
}
@Override
public boolean onTouchEvent(MotionEvent event) {
float endXValue = 0;
float x1 = event.getAxisValue(MotionEvent.AXIS_X);
int action = MotionEventCompat.getActionMasked(event);
switch (action) {
case (MotionEvent.ACTION_DOWN):
startXValue = event.getAxisValue(MotionEvent.AXIS_X);
return true;
case (MotionEvent.ACTION_UP):
endXValue = event.getAxisValue(MotionEvent.AXIS_X);
if (endXValue > startXValue) {
if (endXValue - startXValue > 100) {
System.out.println("Left-Right");
imageView.setImageResource(mImageIds[2]);
}
}else {
if (startXValue -endXValue> 100) {
System.out.println("Right-Left");
imageView.setImageResource(mImageIds[0]);
}
}
return true;
default:
return super.onTouchEvent(event);
}
}
}
Éste es cómo obtenidos:
package com.demoimageslider;
import java.util.List;
import java.util.Vector;
import com.nineoldandroids.view.ViewHelper;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentActivity;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentPagerAdapter;
import android.support.v4.view.ViewPager;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
public class MainActivity extends FragmentActivity {
private PagerAdapter mPagerAdapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
this.initialisePaging();
}
private void initialisePaging() {
List<Fragment> fragments = new Vector<Fragment>();
fragments.add(Fragment.instantiate(this, Tab1Fragment.class.getName()));
fragments.add(Fragment.instantiate(this, Tab2Fragment.class.getName()));
fragments.add(Fragment.instantiate(this, Tab3Fragment.class.getName()));
this.mPagerAdapter = new PagerAdapter(
super.getSupportFragmentManager(), fragments);
ViewPager pager = (ViewPager) super.findViewById(R.id.pager);
pager.setAdapter(this.mPagerAdapter);
pager.setPageTransformer(true, new ZoomOutPageTransformer());
}
public static class Tab1Fragment extends Fragment {
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
if (container == null) {
return null;
}
return (ImageView) inflater.inflate(R.layout.tab_frag1_layout,
container, false);
}
}
public static class Tab2Fragment extends Fragment {
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
if (container == null) {
return null;
}
return (ImageView) inflater.inflate(R.layout.tab_frag2_layout,
container, false);
}
}
public static class Tab3Fragment extends Fragment {
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
if (container == null) {
return null;
}
return (ImageView) inflater.inflate(R.layout.tab_frag3_layout,
container, false);
}
}
public static class PagerAdapter extends FragmentPagerAdapter {
private List<Fragment> fragments;
public PagerAdapter(FragmentManager fm, List<Fragment> fragments) {
super(fm);
this.fragments = fragments;
}
@Override
public Fragment getItem(int position) {
return this.fragments.get(position);
}
@Override
public int getCount() {
return this.fragments.size();
}
}
public static class ZoomOutPageTransformer implements
ViewPager.PageTransformer {
private static final float MIN_SCALE = 0.85f;
private static final float MIN_ALPHA = 0.5f;
public void transformPage(View view, float position) {
int pageWidth = view.getWidth();
int pageHeight = view.getHeight();
if (position < -1) { // [-Infinity,-1)
// This page is way off-screen to the left.
// view.setAlpha(0);
ViewHelper.setAlpha(view, 0);
} else if (position <= 1) { // [-1,1]
// Modify the default slide transition to shrink the page as
// well
float scaleFactor = Math.max(MIN_SCALE, 1 - Math.abs(position));
float vertMargin = pageHeight * (1 - scaleFactor)/2;
float horzMargin = pageWidth * (1 - scaleFactor)/2;
if (position < 0) {
// view.setTranslationX(horzMargin - vertMargin/2);
ViewHelper.setTranslationX(view, horzMargin - vertMargin
/2);
} else {
// view.setTranslationX(-horzMargin + vertMargin/2);
ViewHelper.setTranslationX(view, -horzMargin + vertMargin
/2);
}
// Scale the page down (between MIN_SCALE and 1)
// view.setScaleX(scaleFactor);
// view.setScaleY(scaleFactor);
ViewHelper.setScaleX(view, scaleFactor);
ViewHelper.setScaleY(view, scaleFactor);
// Fade the page relative to its size.
// view.setAlpha(MIN_ALPHA +
// (scaleFactor - MIN_SCALE)/
// (1 - MIN_SCALE) * (1 - MIN_ALPHA));
ViewHelper.setAlpha(view, MIN_ALPHA + (scaleFactor - MIN_SCALE)
/(1 - MIN_SCALE) * (1 - MIN_ALPHA));
} else { // (1,+Infinity]
// This page is way off-screen to the right.
// view.setAlpha(0);
ViewHelper.setAlpha(view, 0);
}
}
}
}
Solía biblioteca nineoldroids para soportar los efectos sobre las versiones anteriores de Android.
Se puede utilizar por ViewPager extiende PagerAdapter ... como el código XML
public class ImageAdapter extends PagerAdapter {
private Context context;
private int[] GalImages = new int[] {
R.drawable.cap8, R.drawable.cap2, R.drawable.cap3, R.drawable.cap1,R.drawable.cap5,
R.drawable.cap6, R.drawable.cap7, R.drawable.cap9,R.drawable.cap4,
R.drawable.cap10
};
ImageAdapter(Context context)
{
this.context=context;
}
@Override
public int getCount() {
return GalImages.length;
}
@Override
public boolean isViewFromObject(View view, Object object) {
return view == object;
}
@Override
public Object instantiateItem(ViewGroup container, int position) {
ImageView imageView = new ImageView(context);
int padding = context.getResources().getDimensionPixelSize(R.dimen.activity_horizontal_margin);
imageView.setPadding(padding, padding, padding, padding);
imageView.setScaleType(ImageView.ScaleType.FIT_CENTER);
imageView.setImageResource(GalImages[position]);
container.addView(imageView, 0);
return imageView;
}
@Override
public void destroyItem(ViewGroup container, int position, Object object) {
container.removeView((ImageView) object);
}
}
es ......
<android.support.v4.view.ViewPager
android:id="@+id/mvieww"
android:layout_width="match_parent"
android:layout_height="match_parent" />
- 1. Cómo deslizar automáticamente Android Pager
- 2. UITableViewCell Deslizar para cajón
- 3. cómo deslizar el dedo en el teléfono de Windows 7
- 4. Deslizar para eliminar
- 5. Desplazamiento horizontal - Móvil - ¿deslizar?
- 6. Cómo deslizar contenido abriendo con jquery
- 7. cómo detectar deslizar la dirección del gesto?
- 8. ¿Cómo implemento deslizar entre pestañas en Android?
- 9. Las imágenes descargadas de forma asíncrona solo aparecen en UITableView después de tocar o deslizar
- 10. Deslizar expandir animación en android
- 11. Deslizar para Eliminar no funciona
- 12. Adjuntar y deslizar juntos jQuery
- 13. Deslizar para cambiar las vistas
- 14. ¿Cómo se implementan las pilas de imágenes que se pueden deslizar como la aplicación Photo utilizando el iPhone SDK?
- 15. Deslizar para fijar en html simple
- 16. Agregar sombra paralela para deslizar la navegación
- 17. deshabilitar gesto deslizar en xcode 4
- 18. ¿Cómo obtener la altura de div después de deslizar el control deslizante de acción o deslizar hacia arriba?
- 19. cómo manejar 1 a 3 dedos deslizar gesto en IOS
- 20. ¿Cómo detectar deslizar hacia la izquierda/derecha en el iPhone?
- 21. Cómo agregar gestos deslizar a la celda UITableView?
- 22. Cómo reconocer el gesto de deslizar en UIScrollView
- 23. iOS: UIScrollView detección de deslizar Gesto
- 24. Animación de UIView para deslizar hacia abajo
- 25. Detectar gesto del usuario, como deslizar
- 26. Acercar y deslizar con OpenGL ES
- 27. SonataMediaBundle - ¿cómo subir imágenes?
- 28. pysqlite - cómo guardar imágenes
- 29. Agregue deslizar hacia la izquierda/derecha a la página web, pero use la función predeterminada deslizar hacia arriba/abajo
- 30. WPF imagen deslizar para cambiar la imagen como en iOS
¿Y por qué le gustaría ver ese evento de deslizamiento? –
Quiero capturar ese evento de deslizamiento para que basado en el deslizamiento pueda cambiar las imágenes de izquierda a derecha o viceversa – WISH