Android相册共享元素切换动画

发布于:2025-08-29 ⋅ 阅读:(14) ⋅ 点赞:(0)

Android 图片共享元素切换动画实现详解

本项目实现了图片列表与图片详情页之间的共享元素切换动画,带来流畅的视觉体验。本文档将详细介绍实现原理、关键代码、注意事项及常见问题排查。


一、功能概述

  • 在图片列表页点击图片,跳转到大图详情页,图片以共享元素动画平滑过渡。
  • 支持多图滑动浏览,返回时图片平滑回到原位置。
  • 动画过程无闪烁、无跳变,体验自然。

二、实现原理

Android 5.0+ 支持 Activity 之间的共享元素过渡。核心流程:

  1. 两个页面的图片控件设置相同的 transitionName
  2. 启动详情页时通过 ActivityOptionsCompat.makeSceneTransitionAnimation 指定共享元素。
  3. 详情页设置窗口动画(TransitionSet),并延迟动画直到图片加载完成。
  4. 返回时将当前图片位置回传,列表页重新映射共享元素。

三、关键实现步骤

1. 列表页(MainActivity + ImageAdapter)

1.1 图片 transitionName 设置
  • onBindViewHolder 中:
holder.shapeableImageView.setTransitionName("image_transition" + position);
1.2 启动详情页并传递共享元素
ActivityOptionsCompat options = ActivityOptionsCompat.makeSceneTransitionAnimation(
    (Activity) context,
    holder.shapeableImageView,
    "image_transition" + position
);
context.startActivity(intent, options.toBundle());
1.3 处理返回动画的共享元素映射
  • MainActivity 设置 setExitSharedElementCallback
setExitSharedElementCallback(new SharedElementCallback() {
   
   
    @Override
    public void onMapSharedElements(List<String> names, Map<String, View> sharedElements) {
   
   
        if (mReenterPosition != RecyclerView.NO_POSITION) {
   
   
            RecyclerView.ViewHolder vh = mRecyclerView.findViewHolderForAdapterPosition(mReenterPosition);
            if 

网站公告

今日签到

点亮在社区的每一天
去签到