Cierre una actividad pasando de derecha a izquierda con una animación suave para ir a la segunda actividad
Me gustaría tener una actividad que introduce la aplicación y para ser cerrado tienes que deslizarlo de derecha a izquierda (tal vez con una animación suave si no es demasiado trabajo), entonces hay la otra parte de la aplicación que ya tengo , es ActionBar tabs + Swipe Views
. He leído algunas guías de Android como implementar vistas de deslizamiento pero no fueron mi caso. ¿Usted me podría ayudar por favor? [Con "animación suave" quiero decir que el golpe tiene que seguir el dedo]
- No se puede implantar OnItemClickListener en android-swipelistview
- Disminuir la velocidad de View Pager en android
- Android: deslizar el elemento de la lista causa clickOnItem
- Deslizar entre las actividades de android
- Desplazamiento por Android en la lista
- Android PagerView entre las actividades
- OnItemClickListener y OnTouchListener personalizado
- Implementación de 47degree android-swipelistview para desplazar android ListViewItem
- ListView en la ficha de desplazamiento no se actualiza a menos que se reinicie
- Vista de desplazamiento de Android?
- Android listview, pase a la acción
- Cómo desplazarse y desplazarse hasta el último en Appium
- Android ListView Deslizar hacia la derecha y hacia la izquierda para aceptar y rechazar
Normalmente logro esto usando un oyente gestual:
En primer lugar, definir animaciones de traducción dentro de res/anim
:
slide_in_left.xml:
<set xmlns:android="http://schemas.android.com/apk/res/android"> <translate android:fromXDelta="-50%p" android:toXDelta="0" android:duration="@android:integer/config_longAnimTime"/> <alpha android:fromAlpha="0.0" android:toAlpha="1.0" android:duration="@android:integer/config_mediumAnimTime" /> </set>
slide_in_right.xml:
<set xmlns:android="http://schemas.android.com/apk/res/android"> <translate android:fromXDelta="50%p" android:toXDelta="0" android:duration="@android:integer/config_longAnimTime"/> <alpha android:fromAlpha="0.0" android:toAlpha="1.0" android:duration="@android:integer/config_mediumAnimTime" /> </set>
slide_out_left.xml:
<set xmlns:android="http://schemas.android.com/apk/res/android"> <translate android:fromXDelta="0" android:toXDelta="-50%p" android:duration="@android:integer/config_longAnimTime"/> <alpha android:fromAlpha="1.0" android:toAlpha="0.0" android:duration="@android:integer/config_mediumAnimTime" /> </set>
slide_out_right.xml:
<set xmlns:android="http://schemas.android.com/apk/res/android"> <translate android:fromXDelta="0" android:toXDelta="50%p" android:duration="@android:integer/config_mediumAnimTime"/> <alpha android:fromAlpha="1.0" android:toAlpha="0.0" android:duration="@android:integer/config_mediumAnimTime" /> </set>
Luego dentro de su clase de actividad actual:
class MyGestureDetector extends SimpleOnGestureListener { @Override public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) { try { float slope = (e1.getY() - e2.getY()) / (e1.getX() - e2.getX()); float angle = (float) Math.atan(slope); float angleInDegree = (float) Math.toDegrees(angle); // left to right if (e1.getX() - e2.getX() > 20 && Math.abs(velocityX) > 20) { if ((angleInDegree < 45 && angleInDegree > -45)) { startActivity(new Intent(CurrentActivitiy.this, NextActivity.class); CurrentActivity.this.overridePendingTransition( R.anim.slide_in_left, R.anim.slide_out_right); finish(); } // right to left fling } else if (e2.getX() - e1.getX() > 20 && Math.abs(velocityX) > 20) { if ((angleInDegree < 45 && angleInDegree > -45)) { startActivity(new Intent(CurrentActivitiy.this, NextActivity.class); CurrentActivity.this.overridePendingTransition( R.anim.slide_in_right, R.anim.slide_out_left); finish(); } } return true; } catch (Exception e) { // nothing } return false; } }
A continuación, puede registrar cualquier vista para recibir / escuchar los gestos:
final GestureDetector gestureDetector = new GestureDetector(new MyGestureDetector()); //the parent layout findViewById(R.id.parent_layout).setOnTouchListener(new View.OnTouchListener() { @Override public boolean onTouch(View v, MotionEvent event) { if (gestureDetector.onTouchEvent(event)) return false; return false; } }); //an image view findViewById(R.id.image_view).setOnTouchListener(new View.OnTouchListener() { @Override public boolean onTouch(View v, MotionEvent event) { if (gestureDetector.onTouchEvent(event)) return false; return false; } }); // a text view findViewById(R.id.text_view).setOnTouchListener(new View.OnTouchListener() { @Override public boolean onTouch(View v, MotionEvent event) { if (gestureDetector.onTouchEvent(event)) return false; return false; } });
- Qt: Cómo configurar el icono de la aplicación en Android e iOS
- ¿Por qué se genera un error al declarar una clase anidada de Fragmento estático como privada?