Estoy usando overridePendingTransition para cuando mi actividad es creada y que funciona bien puedo ver el fundido en las grandes obras, pero cuando intento animar el acabado de la actividad que todavía está haciendo el defecto de derecha a izquierda de la diapositiva.

Probé por primera vez la definición de las animaciones cuando inicio la actividad de la siguiente manera:

Intent myIntent = new Intent(a, SkdyAlert.class);
    myIntent.addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP);
    a.startActivity(myIntent);
    if (android.os.Build.VERSION.SDK_INT > android.os.Build.VERSION_CODES.DONUT) {
        AnimationHelper.overridePendingTransition(a, R.anim.fadein, R.anim.fadeout);
    }

Entonces traté de hacerlo cuando termine la actividad, así

okBtn.setOnClickListener(new OnClickListener() {
        public void onClick(View v) {
            finish();
            if (android.os.Build.VERSION.SDK_INT > android.os.Build.VERSION_CODES.DONUT) {
                AnimationHelper.overridePendingTransition(activity, 0, R.anim.fadeout);
            }
        }
    });

Pero ninguno de estos enfoques evitará que la «derecha a izquierda» de la diapositiva para la animación de salida. Alguna idea sobre lo que estoy haciendo mal?

InformationsquelleAutor b-ryce | 2010-12-02

9 Comentarios

  1. 218

    Anular pendiente de la transición justo después de llamar a finish();

    En mi caso, lo he hecho para evitar las transiciones.

    finish();
    Details.this.overridePendingTransition(R.anim.nothing,R.anim.nothing);

    El orden es importante 🙂

    • por «Detalles», @Goofyahead es nombrar a su adjuntando la Actividad–ymmv. Esta técnica ha funcionado para mí reemplazar una animación a partir del Tema.Cuadro de diálogo en la 2.x, pero no de 3.x o 4.x
    • ¿Cómo R.anim.nothing parece?
    • El uso de @Felipe Micaroni Lalli respuesta, 0 significa que no hay animación.
    • Esto me ayudó demasiado. Se explica cómo definir tus propias animaciones: stackoverflow.com/questions/5151591/…
    • Puede reemplazar finish() método para evitar las transiciones en todos los casos (de nuevo presiona el botón, como se muestra): @Override public void finish() { super.finish(); overridePendingTransition(0, 0); }
    • La anterior transición se ejecuta sólo si está habilitado en las opciones de Desarrollador, consulte stackoverflow.com/a/30422015/2914140.

  2. 22

    Yo sugeriría usar isFinishing() método para configurar las animaciones en onPause en lugar de llamar a finish()

    @Override
    protected void onPause() {
        super.onPause();
        if (isFinishing()){
            overridePendingTransition(R.anim.activity_slide_in, R.anim.activity_slide_out);
        }
    
    }
  3. 20

    Esta pregunta ya se ha respondido, pero la forma más eficaz para poner una animación al salir de una actividad que está reemplazando el «finish()» método de la actividad relacionada:

    @Override
    public void finish() {
        super.finish();
        overridePendingTransition(R.anim.hold, R.anim.slide_out_bottom);
    }
    • U hizo exactamente trate de lo que escribí (dentro de una actividad)?
  4. 19

    Me corrigió este problema con este tipo de enfoque:

    para abrir con animación:

     Intent newUser = new Intent(getBaseContext(), NewUserActivity.class);
        startActivity(newUser);
        overridePendingTransition(R.anim.slide_in_right,R.anim.slide_out_left);

    Para cerrar con animación:

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        onBackPressed();
        return super.onOptionsItemSelected(item);
    }
    
    @Override
    public void onBackPressed() {
        super.onBackPressed();
        overridePendingTransition(R.anim.slide_out_right,R.anim.slide_in_right);
    }
  5. 12

    Vistazo a hacerlo a través de un tema. Puede definir enter exit animaciones para las actividades o la aplicación completa

    • SÍ! Que era él. Bien poco. Yo ya había aplicado un tema, y el tema tenía una animación definida, así que por eso no pude tener mi propia animación para trabajar. Muchísimas gracias por la idea!
    • me puedes dar una pista de donde buscar que transiciones serán entregados por los temas. También me gustaría establecer una transición personalizado a todos los sitios, pero no sé cómo.
    • Algún código o un ejemplo sería agradable.
    • esta otra respuesta que dio a una pregunta similar se explica en detalle un poco más. stackoverflow.com/questions/4940574/…
  6. 6

    Siguiente en la respuesta por @schwiz, esta es una animación reemplazo para la incorporada en el tema del Diálogo, donde he definido local slide_up y slide_down animaciones. Mi actividad especifica el tema MyDialog para tener estas transiciones de entrada y salida.

    <style name="Animation.MyDialog" parent="android:Animation.Dialog">
        <item name="android:windowEnterAnimation">@anim/slide_up</item>
        <item name="android:windowExitAnimation">@anim/slide_down</item>
    </style>
    
    <style name="Theme.MyDialog" parent="android:Theme.Dialog">
        <item name="android:windowAnimationStyle">@style/Animation.MyDialog</item>
    </style>

  7. 4

    Uso startActivityForResult para iniciar su actividad del niño y en onActivityResult() de la actividad de los padres:

        @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        if(requestCode==REQUEST_YOUR_ACTIVITY) {
            overridePendingTransition(R.anim.parent_appearing_anim, R.anim.child_dissmissing_anim);
        }
        super.onActivityResult(requestCode, resultCode, arg2);
    }
  8. -1
    if (getEnterAnimation() > -1 && getExitAnimation() > -1) {
        overridePendingTransition(getEnterAnimation(), getExitAnimation());
    } 

    donde estos métodos devuelven animaciones de R. anim.YOUR_ANIMATION_XML

    añadir este código en el onCreate() antes de

    setContentView()

    y en su onPause() antes de

    super.onPause()

    he intentado añadir este código antes de/dentro de estos métodos, pero la animación de salida nunca trabajó

    startActivity()
    finish()
    onBackPressed()

Dejar respuesta

Please enter your comment!
Please enter your name here