2010-12-02 51 views
67

我使用overridePendingTransition用於創建我的活動和工作正常,當我可以看到偉大的作品淡出,但是當我嘗試和動畫上的活動結束它仍然在默認左滑動的權利。我如何動畫添加到活動結束()

我第一次嘗試定義了動畫,當我開始活動如下:

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); 
    } 

然後我試圖這樣做,當我做完活動以及

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); 
      } 
     } 
    }); 

但是,這些方法都不將阻止退出動畫的「從右到左」滑動。關於我在做什麼的任何想法都是錯誤的?

回答

186

在調用finish()後,我重寫了pending transition。

就我而言,我已經這樣做了,以避免過渡。

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

順序很重要:)

11

看看通過主題做到這一點。您可以爲活動或整個應用程序定義輸入退出動畫

+0

是的!就是這樣。那麼有點。我已經應用了一個主題,並且主題定義了一個動畫,這就是爲什麼我無法讓自己的動畫工作。謝謝你的洞察力! – 2010-12-02 01:11:47

+2

你能否給我一個提示,看哪些過渡將由主題提供。我也想設置一個自定義的過渡到所有網站,但我不知道如何。 – 2011-12-27 10:42:12

+0

@schwiz一些代碼或例子會很好。 – Zapnologica 2013-10-06 13:18:27

6

繼由@schwiz答案,這裏是一個動畫,以替換內置對話框主題,在那裏我已經定義本地slide_up和slide_down動畫。我的活動指定了主題MyDialog,以便進行這些轉換。

<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> 

13
finish(); 
overridePendingTransition(0, 0); 
5

使用startActivityForResult來啓動你的孩子的活動,並在你的父活動的onActivityResult():

@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); 
} 
14

我固定使用這種這個問題方法:

動畫打開:

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

要動畫關閉:

@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); 
} 
13

我會建議使用isFinishing()方法來配置,而不是調用完成()

在的onPause動畫
@Override 
protected void onPause() { 
    super.onPause(); 
    if (isFinishing()){ 
     overridePendingTransition(R.anim.activity_slide_in, R.anim.activity_slide_out); 
    } 

} 
11

這個問題已經回答了,但最有效的方式把動畫而從活動中退出是通過重寫「完成()」相關的方法活動:

@Override 
public void finish() { 
    super.finish(); 
    overridePendingTransition(R.anim.hold, R.anim.slide_out_bottom); 
} 
0
if (getEnterAnimation() > -1 && getExitAnimation() > -1) { 
    overridePendingTransition(getEnterAnimation(), getExitAnimation()); 
} 

其中這些方法從R.anim返回動畫。YOUR_ANIMATION_XML

在你的onCreate()之前

setContentView() 

,並在您的onPause()之前

super.onPause() 

添加此代碼我嘗試過加入這個代碼/這些方法,但退出動畫從未內加工

startActivity() 
finish() 
onBackPressed()