Android startActivity () geçiş animasyonunu değiştirebilir miyim?


Yanıtlar:


33

Fin () işlevini yürüttüğünüz aynı ifadede, animasyonunuzu da orada çalıştırın. Ardından, yeni aktivitede başka bir animasyon çalıştırın. Bu koda bakın:

fadein.xml

<set xmlns:android="http://schemas.android.com/apk/res/android" 
     android:fillAfter="true">
     <alpha android:fromAlpha="1.0" 
            android:toAlpha="0.0"
            android:duration="500"/> //Time in milliseconds
</set>

Senin bitiş sınıfında

private void finishTask() {
    if("blabbla".equals("blablabla"){
        finish();
        runFadeInAnimation();
    }
}

private void runFadeInAnimation() {
    Animation a = AnimationUtils.loadAnimation(this, R.anim.fadein);
    a.reset();
    LinearLayout ll = (LinearLayout) findViewById(R.id.yourviewhere);
    ll.clearAnimation();
    ll.startAnimation(a);   
}

fadeout.xml

<set xmlns:android="http://schemas.android.com/apk/res/android"
           android:fillAfter="true">
  <alpha android:fromAlpha="0.0"
         android:toAlpha="1.0"
         android:duration="500"/>
</set>

Yeni Activity-sınıfınızda yazdığım runFadeAnimation gibi benzer bir yöntem oluşturursunuz ve sonra onu onCreate içinde çalıştırırsınız ve kaynak kimliğini solmak için değiştirmeyi unutmayın.


1
Ek olarak, varsayılan kısa animasyon süresini kullanmak daha iyi olabilir:android:duration="@android:integer/config_shortAnimTime"
elimirks

nerederunFadeAnimation()
Choletski

2
Beyler, lütfen bu yazının altındaki gerçek yanıtı gördüğünüzden emin olun.
Android geliştiricisi

blabbla nedir ?? !!
Ali Khaki

288

API düzey 5'ten başlayarak, açık bir geçiş animasyonu belirtmek için overridePendingTransition'ı hemen çağırabilirsiniz:

startActivity();
overridePendingTransition(R.anim.hold, R.anim.fade_in);

veya

finish();
overridePendingTransition(R.anim.hold, R.anim.fade_out);

17
Şuna benzer bir şey ekleyin: @Override public void onBackPressed () {super.onBackPressed (); overridePendingTransition (R.anim.hold, R.anim.fade_out); } animasyonları geri eklemek için.
RightHandedMonkey

1
Bu en temiz cevap olmalı.
cy198706

1
@RightHandedMonkey Animasyonları geri eklemek için finish () öğesini daha iyi geçersiz kılın; etkinliğin geri düğmesinden başka bir şeyle bitmesi durumunda etkinlik yöntemi (örneğin, özel bir çıkış düğmesi ...).
Itiel Maimon

43

Android'deki temaları görün: http://developer.android.com/guide/topics/ui/themes.html .

Altında themes.xml olmalıdır android:windowAnimationStyleiçeri tarzı beyanı görebileceğiniz styles.xml .

Örnek uygulama:

<style name="AppTheme" parent="...">

    ...

    <item name="android:windowAnimationStyle">@style/WindowAnimationStyle</item>

</style>

<style name="WindowAnimationStyle">
    <item name="android:windowEnterAnimation">@android:anim/fade_in</item>
    <item name="android:windowExitAnimation">@android:anim/fade_out</item>
</style>



3
En İyi Çözüm.
Abhishek kumar

@android:anim/fade_inJava kodundan nasıl erişirsiniz ?
Tamoxin

18

kullanım overridePendingTransition

startActivity();
overridePendingTransition(R.anim.fadein, R.anim.fadeout);

fadein.xml

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
    <alpha xmlns:android="http://schemas.android.com/apk/res/android"
        android:interpolator="@android:anim/accelerate_interpolator"
        android:fromAlpha="0.0" android:toAlpha="1.0" android:duration="500" />
</set>

fadeout.xml

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
    <alpha xmlns:android="http://schemas.android.com/apk/res/android"
        android:interpolator="@android:anim/anticipate_interpolator"
        android:fromAlpha="1.0" android:toAlpha="0.0" android:duration="500" />
</set>

9

İçin fadeIn ve Fadeout , sonra bu eklentiyi super.onCreate (savedInstanceState) yeni Etkinlik sınıfında. Başka bir şey oluşturmanız gerekmez (XML yok, animasyon klasörü yok, ekstra işlev yok).

overridePendingTransition(R.anim.abc_fade_in,R.anim.abc_fade_out);

1
overridePendingTransition (android.R.anim.fade_in, android.R.anim.fade_out);
Farid Z

9

Etkinlik için her zaman aynı geçiş animasyonunu istiyorsanız

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    overridePendingTransition(android.R.anim.fade_in, android.R.anim.fade_out);

@Override
protected void onPause() {
    super.onPause();
    if (isFinishing()) {
        overridePendingTransition(android.R.anim.fade_in, android.R.anim.fade_out);
    }
}

4

Basitçe bir bağlam oluşturabilir ve aşağıdaki gibi bir şey yapabilirsiniz: -

private Context context = this;

Ve animasyonunuz: -

((Activity) context).overridePendingTransition(R.anim.abc_slide_in_bottom,R.anim.abc_slide_out_bottom);

İstediğiniz herhangi bir animasyonu kullanabilirsiniz.


1

Styles.xml çözümünü kullanmak istedim, ancak etkinliklerle işime yaramadı. Görünüşe göre android:windowEnterAnimationve yerine aşağıdaki android:windowExitAnimationgibi etkinlik animasyonlarını kullanmam gerekiyor:

<style name="ActivityAnimation.Vertical" parent="">
    <item name="android:activityOpenEnterAnimation">@anim/enter_from_bottom</item>
    <item name="android:activityOpenExitAnimation">@anim/exit_to_bottom</item>
    <item name="android:activityCloseEnterAnimation">@anim/enter_from_bottom</item>
    <item name="android:activityCloseExitAnimation">@anim/exit_to_bottom</item>
    <item name="android:windowEnterAnimation">@anim/enter_from_bottom</item>
    <item name="android:windowExitAnimation">@anim/exit_to_bottom</item>
</style>

0
 // CREATE anim 

 // CREATE animation,animation2  xml // animation like fade out 

  Intent myIntent1 = new Intent(getApplicationContext(), Attend.class);
  Bundle bndlanimation1 =  ActivityOptions.makeCustomAnimation(getApplicationContext(), 
  R.anim.animation, R.anim.animation2).toBundle();
  tartActivity(myIntent1, bndlanimation1);

0

Cevapların çoğu oldukça doğrudur, ancak R.anim.hold'u kullanırken olduğu gibi bazıları kullanımdan kaldırılmıştır ve bazıları süreci sadece detaylandırmaktadır.

Yani şunları kullanabilirsiniz:

startActivity(intent);
overridePendingTransition(android.R.anim.fade_in, android.R.anim.fade_out);
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.