Activity转场动画的实现方式
overridePendingTransition(int enterAnim ,int exitAnim )
overridePendingTransition方法需要在startAtivity方法或者是finish方法调用之后立即执行
参数enterAnim表示的是从Activity a跳转到Activity b,进入b时的动画效果
参数exitAnim表示的是从Activity a跳转到Activity b,离开a时的动过效果
若进入b或者是离开a时不需要动画效果,则可以传值为0(如果出现activity黑色背景,则定义一个空的动画进行加载)
使用style的方式定义Activity的切换动画
<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar"> <item name="colorPrimary">@color/colorPrimary</item> <item name="colorPrimaryDark">@color/colorPrimaryDark</item> <item name="colorAccent">@color/colorAccent</item> <item name="Android:windowAnimationStyle">@style/activityAnim</item>
<style name="activityAnim"> <item name="Android:activityOpenEnterAnimation">@anim/slide_in_top</item> <item name="Android:activityOpenExitAnimation">@anim/slide_in_top</item>
而在windowAnimationStyle中存在四种动画:
activityOpenEnterAnimation // 用于设置打开新的Activity并进入新的Activity展示的动画 activityOpenExitAnimation // 用于设置打开新的Activity并销毁之前的Activity展示的动画 activityCloseEnterAnimation // 用于设置关闭当前Activity进入上一个Activity展示的动画 activityCloseExitAnimation // 用于设置关闭当前Activity时展示的动画
使用MD风格的ActivityOptions切换动画实现Activity跳转动画(兼容包ActivityOptionsCompat)
Intent intent = new Intent(MainActivity.this, ThreeActivity.class); startActivity(intent, ActivityOptions.makeSceneTransitionAnimation(MainActivity.this).toBundle());
Fragment转场动画的实现
标准转场动画
通过FragmentTransition给Fragment指定标准的转场动画,通过setTransition(int transit)方法
该方法可传入的三个参数是:
TRANSIT_NONE,
TRANSIT_FRAGMENT_OPEN,
TRANSIT_FRAGMENT_CLOSE
分别对应无动画、打开形式的动画和关闭形式的动画。
标准动画设置好后,在Fragment添加和移除的时候都会有。
自定义转场动画
自定义转场动画是通过setCustomAnimations()方法,因为Fragment添加时可以指定加入到Back Stack中,所以转场动画有添加、移除、从Back stack中pop出来,还有进入四种情况。
注意setCustomAnimations()方法必须在add、remove、replace调用之前被设置,否则不起作用
使用v4包,Fragment的使用不再局限于API Level 11之上,低等级的API也可以使用,但是这时候转场动画的类型是View Animation。
动画资源放在res\anim\路径下,和Activity的转场动画一样。
Fragment中的方法:onCreateAnimation(int transit, boolean enter, int nextAnim)返回值Animation。
FragmentTransaction中的setCustomAnimations()方法,两参数类型和四参数类型都可用。
private void addFragment() { if (null == mFragmentManager) { mFragmentManager = getSupportFragmentManager(); } mTextFragmentOne = new MyFragmentOne(); FragmentTransaction fragmentTransaction = mFragmentManager .beginTransaction(); fragmentTransaction.setCustomAnimations( R.anim.push_left_in, R.anim.push_left_out, R.anim.push_left_in, R.anim.push_left_out); fragmentTransaction.add(R.id.container, mTextFragmentOne); fragmentTransaction.addToBackStack(null); fragmentTransaction.commit(); }
摘自