¿Hay algo así como onLeftSwipeListener y onRightSwipeListener en Android? Quiero cambiar las vistas deslizando el dedo hacia atrás y hacia adelante. Uso un FrameLayout y un ImageView dentro de él.oyentes Swipe en Android
Respuesta
Se llama GestureDetector y SimpleOnGestureListener que tiene onFling()
. Se llama aventura y no deslizar en este contexto :)
He aquí una quetion relacionada acerca de la implementación de los gestos de detección:
Fling gesture detection on grid layout
También es posible usar un ViewFlipper con un poco de animación para cambiar entre las vistas, se ve bueno, aquí está un ejemplo de implementación para permitir que pase a la izquierda/derecha en un viewflipper:
http://www.inter-fuser.com/2009/07/android-transistions-slide-in-and-slide.html
he hecho un pequeño ejemplo de i swiper En Android, me gustaría compartir el código contigo.
Chek this.
// DISEÑO ///
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical" >
<ViewFlipper
android:id="@+id/view_flipper"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:layout_gravity="center_vertical" >
<TextView
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="Soy A"
android:textColor="#FFFFFF" />
<TextView
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="Soy B"
android:textColor="#BBBFFF" />
<TextView
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="Soy C"
android:textColor="#FFBBFF" />
<TextView
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="Soy D"
android:textColor="#FFFFAF" />
</ViewFlipper>
</LinearLayout>
/// /// ACTIVIDAD
import android.app.Activity;
import android.os.Bundle;
import android.view.GestureDetector;
import android.view.GestureDetector.SimpleOnGestureListener;
import android.view.MotionEvent;
import android.view.View;
import android.view.View.OnTouchListener;
import android.view.animation.AccelerateInterpolator;
import android.view.animation.Animation;
import android.view.animation.TranslateAnimation;
import android.widget.ViewFlipper;
public class SwipeActivity extends Activity {
private Animation mInFromRight;
private Animation mOutToLeft;
private Animation mInFromLeft;
private Animation mOutToRight;
private ViewFlipper mViewFlipper;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
mViewFlipper = (ViewFlipper) findViewById(R.id.view_flipper);
mViewFlipper.setDisplayedChild(0);
initAnimations();
}
private void initAnimations() {
mInFromRight = new TranslateAnimation(Animation.RELATIVE_TO_PARENT,
+1.0f, Animation.RELATIVE_TO_PARENT, 0.0f,
Animation.RELATIVE_TO_PARENT, 0.0f,
Animation.RELATIVE_TO_PARENT, 0.0f);
mInFromRight.setDuration(500);
AccelerateInterpolator accelerateInterpolator = new AccelerateInterpolator();
mInFromRight.setInterpolator(accelerateInterpolator);
mInFromLeft = new TranslateAnimation(Animation.RELATIVE_TO_PARENT,
-1.0f, Animation.RELATIVE_TO_PARENT, 0.0f,
Animation.RELATIVE_TO_PARENT, 0.0f,
Animation.RELATIVE_TO_PARENT, 0.0f);
mInFromLeft.setDuration(500);
mInFromLeft.setInterpolator(accelerateInterpolator);
mOutToRight = new TranslateAnimation(Animation.RELATIVE_TO_PARENT,
0.0f, Animation.RELATIVE_TO_PARENT, +1.0f,
Animation.RELATIVE_TO_PARENT, 0.0f,
Animation.RELATIVE_TO_PARENT, 0.0f);
mOutToRight.setDuration(500);
mOutToRight.setInterpolator(accelerateInterpolator);
mOutToLeft = new TranslateAnimation(Animation.RELATIVE_TO_PARENT, 0.0f,
Animation.RELATIVE_TO_PARENT, -1.0f,
Animation.RELATIVE_TO_PARENT, 0.0f,
Animation.RELATIVE_TO_PARENT, 0.0f);
mOutToLeft.setDuration(500);
mOutToLeft.setInterpolator(accelerateInterpolator);
final GestureDetector gestureDetector;
gestureDetector = new GestureDetector(new MyGestureDetector());
mViewFlipper.setOnTouchListener(new OnTouchListener() {
public boolean onTouch(View v, MotionEvent event) {
if (gestureDetector.onTouchEvent(event)) {
return false;
} else {
return true;
}
}
});
}
private class MyGestureDetector extends SimpleOnGestureListener {
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;
public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX,
float velocityY) {
System.out.println(" in onFling() :: ");
if (Math.abs(e1.getY() - e2.getY()) > SWIPE_MAX_OFF_PATH)
return false;
if (e1.getX() - e2.getX() > SWIPE_MIN_DISTANCE
&& Math.abs(velocityX) > SWIPE_THRESHOLD_VELOCITY) {
mViewFlipper.setInAnimation(mInFromRight);
mViewFlipper.setOutAnimation(mOutToLeft);
mViewFlipper.showNext();
} else if (e2.getX() - e1.getX() > SWIPE_MIN_DISTANCE
&& Math.abs(velocityX) > SWIPE_THRESHOLD_VELOCITY) {
mViewFlipper.setInAnimation(mInFromLeft);
mViewFlipper.setOutAnimation(mOutToRight);
mViewFlipper.showPrevious();
}
return super.onFling(e1, e2, velocityX, velocityY);
}
}
}
su método onFling me ayudó, ¡gracias! – techieWings
bien, esa es la idea, para ayudar a los demás. – shontauro
yourView.setOnTouchListner(onThumbTouch);
OnTouchListener onThumbTouch = new OnTouchListener() {
float previouspoint = 0 ;
float startPoint=0;
@Override
public boolean onTouch(View v, MotionEvent event) {
switch(v.getId()) {
case R.id.tvDetailsalaujairiyat: // Give your R.id.sample ...
switch(event.getAction()){
case MotionEvent.ACTION_DOWN:
startPoint=event.getX();
System.out.println("Action down,..."+event.getX());
break;
case MotionEvent.ACTION_MOVE:
break;
case MotionEvent.ACTION_CANCEL:
previouspoint=event.getX();
if(previouspoint > startPoint){
//Right side swipe
}else{
// Left side swipe
}
break;
}
break;
}
return true;
}
};
La mejor respuesta ... objetivo! –
- 1. Android Swipe on List
- 2. clic de botón oyentes en Android
- 3. UIScrollview limit swipe area
- 4. Múltiples oyentes en web.xml?
- 5. ¿Adjunta múltiples oyentes a las vistas en Android?
- 6. ¿Es posible añadir oyentes onclick a remoteviews en Android
- 7. Swipe Gesture Recognition Inside UIWebView
- 8. Manejo Swipe Guesture en Windows 8 Grid
- 9. Crear oyentes personalizados en Java
- 10. Adición del evento jquery mobile swipe
- 11. Retire oyentes marcadores
- 12. Definir oyentes en el controlador ExtJS
- 13. Cómo eliminar Redis en los oyentes 'mensaje'
- 14. Cómo quitar los oyentes en SWING JComponents
- 15. Flex/AS3: ¿Cuándo eliminar oyentes?
- 16. MSMQ Oyentes que utilizan WCF
- 17. jQuery (Swipe vs. Touch) pageX y pageY siguen regresando 0
- 18. Una galería de marcos de fotos con funcionalidad Swipe
- 19. swipe androide no se detecta dentro de un fragmento de
- 20. Descripción de jQuery Mobile Swipe Variables de configuración
- 21. Configuración de aplicación amplia oyentes clave
- 22. Añadiendo dinámicamente oyentes a Google Maps Markers
- 23. MSMQ uno (cola) para muchos (oyentes) escenario
- 24. onNewIntent() ciclo de vida y oyentes registrados
- 25. ¿Cómo funcionan los oyentes de eventos?
- 26. Ventajas de las clases anidadas para los oyentes en GUI
- 27. ¿Por qué podría Log4net entradas van "perdido" en algunos oyentes
- 28. Cómo determinar el orden de los oyentes en web.xml
- 29. Iniciar y detener oyentes en Mojo framework (WebOS)
- 30. Cómo saber cuántos oyentes de eventos hay en la página
Oh, ya veo. ¿Pero puede distinguir entre arrojarse a la izquierda y arrojarse a la derecha? – lomza
Puede encontrar detalles aquí: http://developer.android.com/reference/android/view/GestureDetector.SimpleOnGestureListener.html#onFling(android.view.MotionEvent, android.view.MotionEvent, float, float) – alopix
y uno más pregunta. ¿Sería suficiente usar intenciones para cambiar de vista o es una manera tonta? – lomza