Deslizar de derecha a izquierda Animaciones de Android
Hola estoy trabajando en un proyecto de Android que requiere las animaciones de diapositivas en Android WebView. Cuando el usuario pasa de izquierda a derecha se mueve a la nueva página, y cuando lo hace de derecha a izquierda se mueve a la página anterior. Pero Android tiene sólo dos transiciones para eso es slide_out_right y slide_in_left. Después de usarlos, el trabajo de deslizamiento de izquierda a derecha es impecable, pero el otro parece extraño (opuesto).
Cualquier solución para ello. Quiero que las animaciones de slide_out_left sean más precisas.
Tener una lectura a través de esta entrada del blog con un ejemplo de animaciones de transición, He incluido el código a continuación:
Actividad de llamada
package com.as400samplecode; import android.os.Bundle; import android.app.Activity; import android.content.Intent; import android.view.Menu; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; public class MainActivity extends Activity implements OnClickListener{ @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); Button nextActivity = (Button) findViewById(R.id.nextActivity); nextActivity.setOnClickListener(this); } public void onClick(View v) { switch (v.getId()) { case R.id.nextActivity: Intent nextActivity = new Intent(this,NextActivity.class); startActivity(nextActivity); //push from bottom to top overridePendingTransition(R.anim.push_up_in, R.anim.push_up_out); //slide from right to left //overridePendingTransition(R.anim.slide_in_right, R.anim.slide_out_left); break; // More buttons go here (if any) ... } } @Override public boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu; this adds items to the action bar if it is present. getMenuInflater().inflate(R.menu.activity_main, menu); return true; } }
Recurso de diseño para la actividad de llamada
<?xml version="1.0" encoding="UTF-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" tools:context=".MainActivity" android:background="@color/ivory"> <Button android:id="@+id/nextActivity" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_alignParentLeft="true" android:layout_alignParentTop="true" android:layout_marginTop="15dp" android:text="Go to Next Activity" /> </RelativeLayout>
Actividad llamada
package com.as400samplecode; import android.app.Activity; import android.os.Bundle; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; public class NextActivity extends Activity implements OnClickListener{ @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_next); Button previousActivity = (Button) findViewById(R.id.previousActivity); previousActivity.setOnClickListener(this); } public void onClick(View v) { switch (v.getId()) { case R.id.previousActivity: finish(); //push from top to bottom overridePendingTransition(R.anim.push_down_in, R.anim.push_down_out); //slide from left to right //overridePendingTransition(R.anim.slide_in_left, R.anim.slide_out_right); break; // More buttons go here (if any) ... } } }
Recurso de diseño para la actividad llamada
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" tools:context=".NextActivity" android:background="@color/khaki"> <Button android:id="@+id/previousActivity" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_alignParentLeft="true" android:layout_alignParentTop="true" android:layout_marginTop="15dp" android:text="Go to Previous Activity" /> </RelativeLayout>
Recursos de animación – push_down_in.xml
<?xml version="1.0" encoding="utf-8"?> <set xmlns:android="http://schemas.android.com/apk/res/android"> <translate android:fromYDelta="-100%p" android:toYDelta="0" android:duration="5000"/> <alpha android:fromAlpha="0.0" android:toAlpha="1.0" android:duration="5000" /> </set>
Recurso de animación – push_down_out.xml
<?xml version="1.0" encoding="utf-8"?> <set xmlns:android="http://schemas.android.com/apk/res/android"> <translate android:fromYDelta="0" android:toYDelta="100%p" android:duration="5000" /> <alpha android:fromAlpha="1.0" android:toAlpha="0.0" android:duration="5000" /> </set>
Recurso de animación – push_up_in.xml
<?xml version="1.0" encoding="utf-8"?> <set xmlns:android="http://schemas.android.com/apk/res/android"> <translate android:fromYDelta="100%p" android:toYDelta="0" android:duration="5000"/> <alpha android:fromAlpha="0.0" android:toAlpha="1.0" android:duration="5000" /> </set>
Recurso de animación – push_up_out.xml
<?xml version="1.0" encoding="utf-8"?> <set xmlns:android="http://schemas.android.com/apk/res/android"> <translate android:fromYDelta="0" android:toYDelta="-100%p" android:duration="5000"/> <alpha android:fromAlpha="1.0" android:toAlpha="0.0" android:duration="5000" /> </set>
Recurso de animación – slide_in_left.xml
<?xml version="1.0" encoding="utf-8"?> <set xmlns:android="http://schemas.android.com/apk/res/android" android:shareInterpolator="false" > <translate android:duration="5000" android:fromXDelta="-100%" android:toXDelta="0%"/> <alpha android:duration="5000" android:fromAlpha="0.0" android:toAlpha="1.0" /> </set>
Recurso de animación – slide_in_right.xml
<?xml version="1.0" encoding="utf-8"?> <set xmlns:android="http://schemas.android.com/apk/res/android" android:shareInterpolator="false" > <translate android:duration="5000" android:fromXDelta="100%" android:toXDelta="0%" /> <alpha android:duration="5000" android:fromAlpha="0.0" android:toAlpha="1.0" /> </set>
Recurso de animación – slide_out_left.xml
<?xml version="1.0" encoding="utf-8"?> <set xmlns:android="http://schemas.android.com/apk/res/android" android:shareInterpolator="false" > <translate android:duration="5000" android:fromXDelta="0%" android:toXDelta="-100%"/> <alpha android:duration="5000" android:fromAlpha="1.0" android:toAlpha="0.0" /> </set>
Recurso de animación – slide_out_right.xml
<?xml version="1.0" encoding="utf-8"?> <set xmlns:android="http://schemas.android.com/apk/res/android" android:shareInterpolator="false" > <translate android:duration="5000" android:fromXDelta="0%" android:toXDelta="100%"/> <alpha android:duration="5000" android:fromAlpha="1.0" android:toAlpha="0.0" /> </set>
Puede hacer su propio estilo de animación como un archivo xml como este (ponerlo en la carpeta anim):
de izquierda a derecha:
<set xmlns:android="http://schemas.android.com/apk/res/android" android:shareInterpolator="false"> <translate android:fromXDelta="-100%" android:toXDelta="0%" android:fromYDelta="0%" android:toYDelta="0%" android:duration="500"/> </set>
De derecha a izquierda:
<set xmlns:android="http://schemas.android.com/apk/res/android" android:shareInterpolator="false"> <translate android:fromXDelta="0%" android:toXDelta="100%" android:fromYDelta="0%" android:toYDelta="0%" android:duration="500" /> </set>
Aquí Usted puede establecer sus propios valores en la duración, tal vez depende del modelo de teléfono cómo se verá la animación, pruebe algunos valores si no se ve bien.
Y luego puedes llamarla en Tu actividad:
Intent animActivity = new Intent(this,YourStartAfterAnimActivity.class); startActivity(nextActivity); overridePendingTransition(R.anim.your_left_to_right, R.anim.your_right_to_left);
Para deslizar ambas actividades (viejas y nuevas) en la misma dirección:
Left_in.xml
<?xml version="1.0" encoding="utf-8"?> <translate xmlns:android="http://schemas.android.com/apk/res/android" android:duration="300" android:fromXDelta="-100%" android:toXDelta="0%" android:interpolator="@android:anim/decelerate_interpolator" />
Right_in.xml
<?xml version="1.0" encoding="utf-8"?> <translate xmlns:android="http://schemas.android.com/apk/res/android" android:duration="300" android:fromXDelta="100%" android:toXDelta="0%" android:interpolator="@android:anim/decelerate_interpolator" />
Left_out.xml
<?xml version="1.0" encoding="utf-8"?> <translate xmlns:android="http://schemas.android.com/apk/res/android" android:duration="300" android:fromXDelta="0%" android:interpolator="@android:anim/decelerate_interpolator" android:toXDelta="-100%" />
Right_out.xml
<?xml version="1.0" encoding="utf-8"?> <translate xmlns:android="http://schemas.android.com/apk/res/android" android:duration="300" android:fromXDelta="0%" android:interpolator="@android:anim/decelerate_interpolator" android:toXDelta="100%" />
StartActivity transición:
overridePendingTransition(R.anim.right_in, R.anim.left_out);
OnBackPressed transición:
overridePendingTransition(R.anim.left_in, R.anim.right_out);
Usted puede hacer sus propias animaciones. Por ejemplo, crear un archivo xml en res / anim como este
<?xml version="1.0" encoding="utf-8"?> <set xmlns:android="http://schemas.android.com/apk/res/android" android:interpolator="@android:anim/linear_interpolator"> <translate android:fromXDelta="100%p" android:toXDelta="0" android:startOffset="0" android:duration="500" /> </set>
A continuación, anule las animaciones en la actividad seleccionada:
overridePendingTransition(R.anim.animationIN, R.anim.animationOUT);
Vea este enlace .. puede ver tantos tipos de animaciones aquí, simplemente copie el xml en su carpeta res / anim y úselo como lo siguiente ..
listView.setAnimation(AnimationUtils.loadAnimation(MainActivity.this,R.anim.slide_in_right));
Listas de animación
La forma más fácil que encontré es usar Activity Transitions
, es realmente fácil
Anular método onCreate
en la actividad que desea ejecutar con animación:
@Override protected void onCreate(Bundle savedInstanceState) { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { Slide slide = new Slide(); slide.setSlideEdge(Gravity.RIGHT); getWindow().setEnterTransition(slide); } super.onCreate(savedInstanceState); }
A continuación, inicie con transiciones (en lugar de ello activity.startActivity (context)):
activity.startActivity(starter, ActivityOptions.makeSceneTransitionAnimation(activity).toBundle());
Para cerrar la actividad con animación en lugar de usar this.finish () use debajo del código:
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { getActivity().finishAfterTransition(); } else getActivity().finish();
Para obtener más información, consulte los siguientes enlaces:
- Material-Animaciones con ejemplos (recomendado)
- Definición de animaciones personalizadas
De derecha a izquierda nueva animación de página
<set xmlns:android="http://schemas.android.com/apk/res/android" android:shareInterpolator="false"> <translate android:fromXDelta="0%" android:toXDelta="800%" android:fromYDelta="0%" android:toYDelta="0%" android:duration="600" />