求助:点击RecyclerView条目切换Activity时实现指定转场动画
实现RecyclerView条目跳转Activity的滑动转场效果
核心关键词(方便你后续搜索拓展)
Android Shared Element Transition RecyclerView、Activity Slide Transition、RecyclerView Item Activity Transition
这个转场效果是共享元素转场(Shared Element Transition)+ 滑动式Activity进出转场的组合实现,具体步骤如下:
1. 开启Activity转场支持
在你的App主题(styles.xml)中启用转场配置,确保两个Activity都使用该主题:
<style name="AppTheme" parent="Theme.MaterialComponents.Light.NoActionBar"> <!-- 全局启用Activity转场 --> <item name="android:windowContentTransitions">true</item> <!-- 配置主Activity退出时的右滑转场 --> <item name="android:windowExitTransition">@android:transition/slide_right</item> <!-- 配置目标Activity进入时的右滑转场 --> <item name="android:windowEnterTransition">@android:transition/slide_right</item> <!-- 配置共享元素的移动转场 --> <item name="android:windowSharedElementExitTransition">@android:transition/move</item> <item name="android:windowSharedElementEnterTransition">@android:transition/move</item> </style>
2. 设置共享元素的统一标识
给RecyclerView条目中需要跟随转场的元素(比如图片、标题)设置transitionName,同时在目标Activity的对应元素上设置完全相同的transitionName:
<!-- RecyclerView条目布局中的元素 --> <ImageView android:id="@+id/item_image" android:transitionName="shared_item_image" ... /> <!-- 目标Activity布局中的对应元素 --> <ImageView android:id="@+id/detail_image" android:transitionName="shared_item_image" ... />
3. 实现RecyclerView条目点击跳转逻辑
在RecyclerView的Adapter中,通过ActivityOptions绑定共享元素并启动Activity:
// Adapter的onBindViewHolder方法内 holder.itemView.setOnClickListener { val targetIntent = Intent(holder.itemView.context, TargetDetailActivity::class.java) // 传递条目数据(如ID、内容) targetIntent.putExtra("ITEM_DATA", item) // 创建转场动画选项 val transitionOptions = ActivityOptions.makeSceneTransitionAnimation( holder.itemView.context as Activity, Pair(holder.itemImageView, "shared_item_image") // 如果有多个共享元素,可以继续添加Pair,比如标题:Pair(holder.itemTitle, "shared_item_title") ) // 启动Activity并传入转场配置 holder.itemView.context.startActivity(targetIntent, transitionOptions.toBundle()) }
4. 自定义转场细节(可选)
如果想要更贴合示例的动画节奏,可以自定义滑动转场:
在res/transition目录下创建custom_slide_right.xml:
<slide xmlns:android="http://schemas.android.com/apk/res/android" android:slideEdge="right" android:duration="350" android:interpolator="@android:interpolator/decelerate_cubic"/>
然后替换主题中的转场引用为这个自定义文件即可。
注意事项
- 仅支持Android 5.0(API Level 21)及以上版本,低版本会自动降级为普通跳转
- 共享元素的
transitionName必须完全一致,不能动态生成(如需支持多条目,固定名称即可) - 确保Activity的主题是Material或AppCompat系列,否则转场可能不生效
内容的提问来源于stack exchange,提问作者Duy
相关产品推荐
相关产品推荐

