在Android的活动转移在Android的活动转移(Activity transition in

2019-05-11 01:14发布

我如何可以定义为Android 1.5及更高版本两种活动之间的过渡? 我想在这一活动中淡出。

Answer 1:

你可以做到这一点Activity.overridePendingTransition() 您可以在XML资源文件中定义的简单过渡动画。



Answer 2:

下面的代码做两个活动之间的一个很好的平滑淡出..

创建一个名为fadein.xmlres/anim

<?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" />

创建一个名为fadeout.xmlres/anim

<?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,放在下面onCreate()活动B方法。 之前setContentView()为我工作。

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

如果变淡是你太慢了,改android:duration在XML文件上面的东西少。



Answer 3:

一个更简单的方法来做到这一点是:

  1. 创建一个动画风格到您的styles.xml文件
 <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> 

而已 :)



Answer 4:

是。 你可以告诉操作系统您要为您的活动是什么样的过渡。

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

    ...

}

其中动画是一个整数指的是内置在操作系统动画。



Answer 5:

对于默认的动画列表,请参阅: http://developer.android.com/reference/android/R.anim.html

其实也有fade_infade_out的API 1级及以上。



Answer 6:

创建资源>动画> 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" />

创建资源>动画> 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>值> 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;


Answer 7:

下面的代码做两个活动之间的一个很好的流畅。

  1. 流畅的效果从左至右

    创建资源文件名为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. 从右到左流畅的效果

    创建资源文件名为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.On背面按压事件或导航从第二活动到一个活动

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


Answer 8:

我重写我的默认行为的动画。 我在15 API测试它,它工作顺利。 下面是我使用的解决方案:

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

res文件夹下创建动画文件夹,然后创建这四个动画文件:

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>

您可以下载我的样本项目 。

就这样... :)



Answer 9:

你不能在Android 1.5的使用overridePendingTransition。 overridePendingTransistion来到了Android 2.0的。

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

总结: 你不能在Android 1.5的使用overridePendingTransistion。

您可以使用,虽然内置的动画中的OS。



Answer 10:

银河设备:

你需要确保你没有带使用设置>开发者选项关闭了它的设备:



Answer 11:

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

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


Answer 12:

开始你的意图之前:

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

这使默认的动画到你的活动转移。



Answer 13:

安卓的某些版本支持自定义Activity的转变和一些不(旧设备)。 如果你想使用自定义转换这是很好的做法,检查是否ActivityoverridePendingTransition()方法,因为在旧版本中,它没有。

知道该方法是否存在,可以使用反射API。 下面是简单的代码,将检查,如果它存在返回的方法:

Method mOverridePendingTransition;

try {
        mOverridePendingTransition = Activity.class.getMethod(
                "overridePendingTransition", new Class[] { Integer.TYPE, Integer.TYPE } );
        /* success */
    } catch (NoSuchMethodException nsme) {
        /* failure, this version of Android doesn't have this method */
    } 

然后,我们可以(如果存在)运用我们自己的转变,即使用这种方法:

if (UIConstants.mOverridePendingTransition != null) {
               try {
                   UIConstants.mOverridePendingTransition.invoke(MainActivity.this, R.anim.activity_fade_in, R.anim.activity_fade_out);
               } catch (InvocationTargetException e) {
                   e.printStackTrace();
               } catch (IllegalAccessException e) {
                   e.printStackTrace();
               }
            }

在此,作为一个例子,简单淡入和淡出的动画被用于过渡示范..



Answer 14:

放大了的动画

Intent i = new Intent(getApplicationContext(), LoginActivity.class);
 overridePendingTransition(R.anim.zoom_enter, R.anim.zoom_exit);
startActivity(i);
finish();

zoom_enter

<?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" />

zoom_exit

<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:fillAfter="true"
    android:duration="500" />


文章来源: Activity transition in Android