Android 动画——过渡动画中ActivityOptions介绍与使用((Transition Animation 系列))

本文是Transition Animation系列的第二篇,主要介绍Android 5.0及以上版本的ActivityOptions,包括makeCustomAnimation、makeScaleUpAnimation、makeThumbnailScaleUpAnimation、makeSceneTransitionAnimation等方法的使用,讲解了各种转场动画效果及其应用场景,尤其重点讨论了用于共享元素转场的makeSceneTransitionAnimation。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Transition Animation系列文章

  1. Android动画——Activity转场动画|过渡动画一点薄见(一)((Transition Animation 系列))
  2. android动画——过渡动画中ActivityOptions介绍与使用((Transition Animation 系列))

1. 序言

对于Android 5.0 之前,Android的过渡动画一般情况下使用:

overridePendingTransition(enterAnim, exitAnim);

android 5.0及以上,google提供了新的转场动画方式,及这里要介绍使用的ActivityOptions,并且提供了兼容包ActivityOptionsCompat。根据当前android版本的发展情况,本文就主要讲ActivityOptions,其兼容包使用方法一样。

ActivityOptions是一个静态类,提供了如下方法:

  • makeCustomAnimation(Context context, int enterResId, int exitResId)
  • makeScaleUpAnimation(View source, int startX, int startY, int width, int height)
  • makeThumbnailScaleUpAnimation(View source, Bitmap thumbnail, int startX, int startY)
  • makeSceneTransitionAnimation(Activity activity)
  • makeSceneTransitionAnimation(Activity activity, View sharedElement, String sharedElementName)
  • makeSceneTransitionAnimation(Activity activity, Pair<View, String>... sharedElements)
  • 。。。。。。

ActivityOptions的主要方法如上,这也是最主要的几种过渡方式,接下来将一一介绍各个方法的使用方式。

2. ActivityOptions使用

2.1 makeCustomAnimation

如果定义转场效果等,对于这方面如果不清楚的话,可以查看Android动画——Activity转场动画|过渡动画一点薄见(一)((Transition Animation 系列))的前半部分

使用方法

ActivityOptions compat = ActivityOptions.makeCustomAnimation(this, R.anim.anim_activity_in, R.anim.anim_activity_out);
                startActivity(new Intent
### 安卓应用中的转场动画实现方法 安卓提供了多种方式来实现转场动画,这些技术涵盖了从简单的视图属性变化到复杂的场景转换。以下是几种常见的实现方法及其示例。 #### 使用 `LayoutTransition` 实现动态布局变化 当视图集合发生变化时(如添加或移除子项),可以通过配置 `LayoutTransition` 来自动触发相应的动画效果。例如: ```java import android.transition.LayoutTransition; import android.view.ViewGroup; // 获取容器并设置 LayoutTransition 动画 ViewGroup container = findViewById(R.id.container); LayoutTransition transition = new LayoutTransition(); container.setLayoutTransition(transition); // 设置消失动画自定义逻辑 transition.setAnimator(LayoutTransition.DISAPPEARING, null); // 自定义 DISAPPEARING 动画[^1] ``` 上述代码展示了如何禁用默认的消失动画,并允许开发者替换为更复杂的效果。 --- #### Activity 转场动画控制 在 Android 中,Activity 的切换通常伴随着特定类型的动画。这种行为由 `WindowManagerService` 类管理,其内部变量 `mNextAppTransition` 描述了即将发生的 Activity 切换动画类型[^4]。以下是一个简单例子展示如何手动指定进入和退出动画: ```xml <!-- res/anim/activity_fade_in.xml --> <alpha xmlns:android="http://schemas.android.com/apk/res/android" android:duration="500" android:fromAlpha="0.0" android:toAlpha="1.0" /> <!-- res/anim/activity_fade_out.xml --> <alpha xmlns:android="http://schemas.android.com/apk/res/android" android:duration="500" android:fromAlpha="1.0" android:toAlpha="0.0" /> ``` 启动新 Activity 并应用淡入淡出效果: ```java Intent intent = new Intent(CurrentActivity.this, NextActivity.class); startActivity(intent); overridePendingTransition(R.anim.activity_fade_in, R.anim.activity_fade_out); ``` 此过程涉及调用 `handleAppTransitionReady()` 方法准备过渡动画[^2],从而确保平滑体验。 --- #### 帧动画 (Frame Animation) 对于逐帧显示图片序列的需求,可以利用帧动画机制创建视觉上连贯的动作。下面是如何加载一组资源文件作为帧动画的例子: ```xml <!-- res/drawable/frame_animation.xml --> <animation-list xmlns:android="http://schemas.android.com/apk/res/android"> <item android:drawable="@drawable/frame_1" android:duration="50"/> <item android:drawable="@drawable/frame_2" android:duration="50"/> </animation-list> ``` 绑定至 ImageView 控件后即可运行该动画: ```java ImageView imageView = findViewById(R.id.imageView); AnimationDrawable frameAnimation = (AnimationDrawable) imageView.getBackground(); frameAnimation.start(); // 启动帧动画[^3] ``` --- #### Shared Element Transition 共享元素过渡是一种高级形式的转场动画,它使得两个界面之间的公共 UI 组件能够无缝衔接。启用这一功能需满足一定条件,比如目标控件必须具有唯一 ID 和一致的内容描述。 发送方 Activity 配置如下: ```java Intent intent = new Intent(this, DetailActivity.class); intent.putExtra("image_url", imageUrl); String transitionName = getString(R.string.image_transition_name); Pair<View, String> pair = Pair.create((View)imageView, transitionName); ActivityOptions options = ActivityOptions.makeSceneTransitionAnimation( this, pair ); startActivity(intent, options.toBundle()); ``` 接收端则应声明相同的过渡名称用于匹配关联对象。 --- ### 总结 以上介绍了四种主要途径——基于 `LayoutTransition` 的局部调整、传统 XML 文件定义全局样式、逐帧渲染以及跨页面间共享组件交互——帮助开发人员构建丰富多彩的应用程序用户体验。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值