3

更改活动可以用下面的代码:活动导航:与popEnter自定义动画和popExit样片段与动画

Bundle animation = ActivityOptions.makeCustomAnimation(App.getContext(), R.anim.enter_from_right, R.anim.exit_to_left).toBundle(); 
startActivity(intent, animation); 

对于片段,你可以做FragmentTransaction类似的事情:

// ... 
transaction.setCustomAnimations(R.anim.enter_from_right, R.anim.exit_to_left); 
// ... 

这工作! 但是我想在按下时弹出一个动画(从后台弹出)。 对于片段只需添加2动画资源(popEnter & popExit):

transaction.setCustomAnimations(R.anim.enter_from_right, R.anim.exit_to_left, R.anim.enter_from_left, R.anim.exit_to_right); 

如何创建相同的“背动画”的活动?

+1

我用这个代码的退出动画:'overridePendingTransition(android.R.anim.fade_in,android.R.anim.fade_out) ;'你可以在[GmailAnimation](https://github.com/CabezasGonzalezJavier/GmailAnimation)或[LopeAnimations](https://github.com/CabezasGonzalezJavier/LopeAnimations)中看到这些例子。你也可以在这个[Blog]中看到更多(http://thedeveloperworldisyours.com/android/gmail-overriding-pending-transition/#sthash.CEhJwJLg.dpbs)。 – Cabezas

+0

我已经用同样的例子回答了我的问题,但扩展了一点;-) –

回答

17

我发现了一个不同但简单的方法,似乎工作得很好。活动动画也可以使用overridePendingTransition执行,因此当活动结束时,您只需使用该方法即可。

在BaseActivity中实现这些覆盖将是最有效的,BaseActivity由项目中的所有活动进行扩展。从现在开始,新的活动时,所有的活动会自动包括出口动画和动画:

public abstract class BaseActivity extends AppCompatActivity { 

    @Override 
    public void finish() { 
     super.finish(); 
     onLeaveThisActivity(); 
    } 

    protected void onLeaveThisActivity() { 
     overridePendingTransition(R.anim.enter_from_left, R.anim.exit_to_right); 
    } 

    // It's cleaner to animate the start of new activities the same way. 
    // Override startActivity(), and call *overridePendingTransition* 
    // right after the super, so every single activity transaction will be animated: 

    @Override 
    public void startActivity(Intent intent) { 
     super.startActivity(intent); 
     onStartNewActivity(); 
    } 

    @Override 
    public void startActivity(Intent intent, Bundle options) { 
     super.startActivity(intent, options); 
     onStartNewActivity(); 
    } 

    protected void onStartNewActivity() { 
     overridePendingTransition(R.anim.enter_from_right, R.anim.exit_to_left); 
    } 
} 

为了圆的东西了,我会包括4动画资源:

enter_from_right

<translate xmlns:android="http://schemas.android.com/apk/res/android" 
    android:duration="500" 
    android:fromXDelta="100%p" 
    android:toXDelta="0%p"/> 

exit_to_left

<translate xmlns:android="http://schemas.android.com/apk/res/android" 
    android:duration="500" 
    android:fromXDelta="0%p" 
    android:toXDelta="-100%p"/> 

enter_from_left

<translate xmlns:android="http://schemas.android.com/apk/res/android" 
    android:duration="500" 
    android:fromXDelta="-100%p" 
    android:toXDelta="0%p"/> 

exit_to_right

<translate xmlns:android="http://schemas.android.com/apk/res/android" 
    android:duration="500" 
    android:fromXDelta="0%p" 
    android:toXDelta="100%p"/> 

PS。你可能想排除你的出发/主要活动;-)

public class MainMenuActivity extends BaseActivity { 
    .... 
    @Override 
    protected void onLeaveThisActivity() { 
     // Don't use an exit animation when leaving the main activity! 
    } 
} 
+1

好的方法。我会更新答案以覆盖startActivityForResult方法。 – ikarhun

+0

伟大的建议ikarhun,我会尽快尝试并更新我的代码! –

+0

不错的解决方案。唯一的问题是,在我的三星s6上有这种转换内置的设备上,与没有它的设备相比,执行此动画需要两倍的时间。我创建了一个帖子:https://stackoverflow.com/questions/45735395/activity-navigation-translation-animation-not-working-correctly-on-samsung-s6 –