Android中的活动转换

如何定义Android 1.5及更高版本的两个活动之间的转换? 我想要一个活动淡入。

你可以用Activity.overridePendingTransition()来做到这一点。 您可以在XML资源文件中定义简单的过渡animation。 在这里可以find一个很好的教程。

这是两个活动之间做一个很好的平滑淡出的代码。

在res / anim中创build一个名为fadein.xml的文件

 <?xml version="1.0" encoding="utf-8"?> <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="2000" /> 

在res / anim中创build一个名为fadeout.xml的文件

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

如果要从活动A淡入到活动B,请将以下内容放在活动B的onCreate方法中。在setContentView适用于我之前。

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

如果淡入淡出,请将上述xml文件中的android:duration更改为更小的值。

是。 你可以告诉操作系统你想要进行什么样的转换。

 @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); getWindow().setWindowAnimations(ANIMATION); ... } 

其中ANIMATION是一个整数,指的是操作系统中内置的animation。

一个简单的方法是:

  1. 在您的styles.xml文件中创build一个animation样式
 <style name="WindowAnimationTransition"> <item name="android:windowEnterAnimation">@android:anim/fade_in</item> <item name="android:windowExitAnimation">@android:anim/fade_out</item> </style> 
  1. 将此样式添加到您的应用程序主题
 <style name="AppBaseTheme" parent="Theme.Material.Light.DarkActionBar"> <item name="android:windowAnimationStyle">@style/WindowAnimationTransition</item> </style> 

而已 :)

有关默认animation的列表,请参阅: http : //developer.android.com/reference/android/R.anim.html

实际上,对于API级别1和以上,实际上有fade_infade_out

创buildres> anim> fadein.xml

 <?xml version="1.0" encoding="utf-8"?> <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" /> 

创buildres> anim> fadeout.xml

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

在res> values> styles.xml中

 <style name="Fade"> <item name="android:windowEnterAnimation">@anim/fadein</item> <item name="android:windowExitAnimation">@anim/fadeout</item> </style> 

在活动onCreate()

 getWindow().getAttributes().windowAnimations = R.style.Fade; 

以下是在两个活动之间进行良好平滑的代码。

  1. 平滑的效果从左到右

    在res / anim中创build一个名为slide_in_right.xml和slide_out_right.xml的文件

    slide_in_right.xml

      <?xml version="1.0" encoding="utf-8"?> <set xmlns:android="http://schemas.android.com/apk/res/android" android:shareInterpolator="false" > <translate android:duration="5000" android:fromXDelta="100%" android:toXDelta="0%" /> <alpha android:duration="5000" android:fromAlpha="0.0" android:toAlpha="1.0" /> </set> 

    slide_out_right.xml

     <?xml version="1.0" encoding="utf-8"?> <set xmlns:android="http://schemas.android.com/apk/res/android" android:shareInterpolator="false" > <translate android:duration="5000" android:fromXDelta="0%" android:toXDelta="-100%"/> <alpha android:duration="5000" android:fromAlpha="1.0" android:toAlpha="0.0" /> </set> 
  2. 顺利的效果从右到左

    在res / anim中创build一个名为animation_enter.xml和animation_leave.xml的文件

    animation_enter.xml

      <set xmlns:android="http://schemas.android.com/apk/res/android" android:shareInterpolator="false"> <translate android:fromXDelta="-100%" android:toXDelta="0%" android:fromYDelta="0%" android:toYDelta="0%" android:duration="700"/> </set> 

    animation_leave.xml

      <set xmlns:android="http://schemas.android.com/apk/res/android" android:shareInterpolator="false"> <translate android:fromXDelta="0%" android:toXDelta="100%" android:fromYDelta="0%" android:toYDelta="0%" android:duration="700" /> </set> 
  3. 从一个活动导航到第二个活动

      Intent intent_next=new Intent(One_Activity.this,Second_Activity.class); overridePendingTransition(R.anim.slide_in_right,R.anim.slide_out_right); startActivity(intent_next); finish(); 

    4.在后面按事件或从第二个活动导航到一个活动

      Intent home_intent = new Intent(Second_Activity.this, One_Activity.class); overridePendingTransition(R.anim.animation_enter, R.anim.animation_leave); startActivity(home_intent); finish(); 

我覆盖了我的默认活动animation。 我在api 15中testing它工作顺利。 这是我使用的解决scheme:

 <!-- Base application theme. --> <style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar"> <!-- Customize your theme here. --> <item name="colorPrimary">@color/colorPrimary</item> <item name="colorPrimaryDark">@color/colorPrimaryDark</item> <item name="colorAccent">@color/colorPrimary</item> <item name="android:windowAnimationStyle">@style/CustomActivityAnimation</item> </style> <style name="CustomActivityAnimation" parent="@android:style/Animation.Activity"> <item name="android:activityOpenEnterAnimation">@anim/slide_in_right</item> <item name="android:activityOpenExitAnimation">@anim/slide_out_left</item> <item name="android:activityCloseEnterAnimation">@anim/slide_in_left</item> <item name="android:activityCloseExitAnimation">@anim/slide_out_right</item> </style> 

创buildres文件夹下的anim文件夹,然后创build这四个animation文件:

slide_in_right.xml

 <?xml version="1.0" encoding="utf-8"?> <set xmlns:android="http://schemas.android.com/apk/res/android"> <translate android:fromXDelta="100%p" android:toXDelta="0" android:duration="@android:integer/config_mediumAnimTime"/> </set> 

slide_out_left.xml

 <?xml version="1.0" encoding="utf-8"?> <set xmlns:android="http://schemas.android.com/apk/res/android"> <translate android:fromXDelta="0" android:toXDelta="-100%p" android:duration="@android:integer/config_mediumAnimTime"/> </set> 

slide_in_left.xml

 <?xml version="1.0" encoding="utf-8"?> <set xmlns:android="http://schemas.android.com/apk/res/android"> <translate android:fromXDelta="-100%p" android:toXDelta="0" android:duration="@android:integer/config_mediumAnimTime"/> </set> 

slide_out_right.xml

 <?xml version="1.0" encoding="utf-8"?> <set xmlns:android="http://schemas.android.com/apk/res/android"> <translate android:fromXDelta="0" android:toXDelta="100%p" android:duration="@android:integer/config_mediumAnimTime"/> </set> 

你可以下载我的示例项目 。

就这样… :)

Android 1.5中不能使用overridePendingTransition。 overridePendingTransistion来到Android 2.0。

如果你要经过这个没有任何错误,你必须使用普通animation(或你自己)编译目标(1.5或更高),或者你必须编译的目标(2.0或更高)使用overridePendingTransistion。

总结: 您不能在Android 1.5中使用overridePendingTransistion

您可以使用操作系统中的内置animation。

IN GALAXY设备:

您需要确保您没有使用“设置”>“开发人员选项”在设备中将其closures。

two muppets

使用ActivityCompat.startActivity()工作API> 21。

  ActivityOptionsCompat options = ActivityOptionsCompat.makeSceneTransitionAnimation(activity, transitionImage, EXTRA_IMAGE); ActivityCompat.startActivity(activity, intent, options.toBundle()); 

在开始您的意图之前:

 ActivityOptions options = ActivityOptions.makeSceneTransitionAnimation(AlbumListActivity.this); startActivity(intent, options.toBundle()); 

这给你的活动转换默认animation。