900字范文,内容丰富有趣,生活中的好帮手!
900字范文 > Activity转场动画设置

Activity转场动画设置

时间:2023-05-07 04:35:14

相关推荐

Activity转场动画设置

文章目录

使用场景原生自带自定义动画坐标定义动画差值器方案选择撸代码定义具体动画文件方案一方案二 优缺点转场动画实效问题集录

相关文章推荐

android共享元素动画兼容低版本

使用场景

从一个Activity A跳转到另外一个Activity B,B页面关闭回到A。这里动画涉及两个activity,有以下过程:

1.A打开B时A的离场动画和B的入场动画。

2.B关闭回到A时B的离场动画和A的入场动画。

原生自带

Android已经内置了几种动画效果,可以见 android.R.anim 类。一般情况下我们需要自己定义屏幕切换的效果。

自定义

主要有以下四个属性:

当我们从 A 启动 B 时,A 从屏幕上消失,这个动画叫做 android:activityOpenExitAnimation

当我们从 A 启动 B 时,B 出现在屏幕上,这个动画叫做 android:activityOpenEnterAnimation

当我们从 B 退出回到 A 时,B 从屏幕上消失,这个叫做 android:activityCloseExitAnimation

当我们从 B 退出回到 A 时,A 出现在屏幕上,这个叫做 android:activityCloseEnterAnimation

动画坐标定义

动画操作中操作的都是原点位置

fromYDelta="100%"为底部

fromYDelta="0%"为顶部

fromXDelta="0%"为左侧

fromXDelta="100%“为右侧

fromXDelta=”-100%“为左侧超出一个屏幕宽度

fromYDelta=”-100%"为顶部超出一个屏幕高度

动画差值器

动画差值器属性:

android:interpolator="@android:anim/accelerate_decelerate_interpolator"

设置动画为先加速在减速(开始速度最快 逐渐减慢)

android动画差值器详解

方案选择

有两种方案可以实现

1.静态方式设置:将切换动画写到style中,再在theme中指定此style,在AndroidManifest中A和B的activity声明中设置此theme。

2.动态方式设置:在A的startActivity()方法后调用:

overridePendingTransition(R.anim.activity_b_translate_in_down_to_up,R.anim.activity_a_translate_out_down_to_up);

来设置B的进入动画和A的消失动画。

在B的finish()方法后调用:

overridePendingTransition(R.anim.activity_a_translate_in_up_to_down,R.anim.activity_b_translate_out_up_to_down);

来设置A的进场动画和B的消失动画。注意:要在super.finish()后设置。

撸代码

定义具体动画文件

这里的动画可以是透明度、位移、缩放之类的任何动画,我这里以位移来举例。

当我们 A 启动 B 时,我希望

A 从下至上平移退出屏幕(activity_a_translate_out_down_to_up),

B 从下至上平移进入屏幕(activity_b_translate_in_down_to_up)。

当我们从 B 退出回到 A 时,我希望

B 从上至下平移退出屏幕(activity_b_translate_out_up_to_down),

A 从上至下平移进入屏幕(activity_a_translate_in_up_to_down)。

1、activity_b_translate_in_down_to_up.xml

<?xml version="1.0" encoding="utf-8"?><translate xmlns:android="/apk/res/android"android:duration="300"android:fromYDelta="100%"//以左上角顶点作为原点移动,Y100%即为顶部,X100%即为右侧,0%为底部android:interpolator="@android:anim/accelerate_decelerate_interpolator"android:toYDelta="0%"></translate>

2、activity_b_translate_out_up_to_down.xml

<?xml version="1.0" encoding="utf-8"?><translate xmlns:android="/apk/res/android"android:duration="300"android:fromYDelta="0%"android:interpolator="@android:anim/accelerate_decelerate_interpolator"android:toYDelta="100%"></translate>

3、activity_a_translate_in_up_to_down.xml

<?xml version="1.0" encoding="utf-8"?><translate xmlns:android="/apk/res/android"android:duration="300"android:fromYDelta="-100%"android:interpolator="@android:anim/accelerate_decelerate_interpolator"android:toYDelta="0%"></translate>

4、activity_a_translate_out_down_to_up.xml

<?xml version="1.0" encoding="utf-8"?><translate xmlns:android="/apk/res/android"android:duration="300"android:fromYDelta="0%"android:interpolator="@android:anim/accelerate_decelerate_interpolator"android:toYDelta="-100%"></translate>

方案一

一、定义切换动画 style

res/values/styles.xml

<style name="AnimFadeBottomToUp" parent="@android:style/Animation.Activity"><item name="android:activityOpenEnterAnimation">@anim/activity_b_translate_in_down_to_up</item><item name="android:activityCloseExitAnimation">@anim/activity_b_translate_out_up_to_down</item><item name="android:activityOpenExitAnimation">@anim/activity_a_translate_out_down_to_up</item><item name="android:activityCloseEnterAnimation">@anim/activity_a_translate_in_up_to_down</item></style>

二、定义包含动画的 Activity 主题

res/values/styles.xml

很简单,就是使用 windowAnimationStyle 这个属性,指定切换动画的style即可。

<style name="vertical_slide" parent="android:Theme.NoTitleBar"><item name="android:windowAnimationStyle">@style/AnimFadeBottomToUp</item></style>

三、注册该Activity到Manifest中,加上them属性就行了

<activityandroid:name=".ActivityA"android:theme="@style/vertical_slide"></activity><activityandroid:name=".ActivityB"android:theme="@style/vertical_slide"></activity>

四、调用启动Activity

A:Intent intent = new Intent(this, AnimationActivity.class);startActivity(intent);B:finish();

方案二

A:Intent intent = new Intent(v.getContext(), AnimationActivity.class);startActivity(intent);overridePendingTransition(R.anim.activity_b_translate_in_down_to_up,R.anim.activity_a_translate_out_down_to_up);B:@Overridepublic void finish() {super.finish();overridePendingTransition(R.anim.activity_a_translate_in_up_to_down,R.anim.activity_b_translate_out_up_to_down);}

优缺点

方案一

优点:不需要考虑activity多个入口情况;

缺点:系统兼容性不好,5.0以下实效

方案二

优点:无兼容性问题;

缺点:多个入口的情况下每个入口都需要设置。

转场动画实效问题集录

1.在出现activity出现黑屏的时候 我们会这样设置

可以解决黑屏问题,同时引出另一个问题 :activity转场动画失效了

检查下清单文件内的动画资源是不是引用的不对 是不是写出了这样

如果是这样的话 改成这样就可以啦

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。