Android动画之共享元素动画简单实践

简介: 本文介绍Android共享元素动画, 实现两Activity间平滑过渡特定UI元素。通过设置`transitionName`属性和使用`ActivityOptions.makeSceneTransitionAnimation`启动目标Activity实现动画效果。可自定义过渡动画提升体验。

本文首发于公众号“AntDream”,欢迎微信搜索“AntDream”或扫描文章底部二维码关注,和我一起每天进步一点点

共享元素动画(Shared Element Transition)是Android中引入的一种过渡动画效果,目的是在两个Activity或Fragment之间切换时,更平滑地过渡和转移特定的UI元素。在共享元素过渡中,两个界面共享一个或多个元素,这些元素在过渡过程中会从源Activity/Fragment平滑地移动到目标Activity/Fragment。

以下是详细解释以及一个具体的代码示例:

1. 配置Activity的过渡动画

首先,在两个Activity中的onCreate方法中,设置过渡动画。

// MainActivity.java
import android.app.ActivityOptions;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.ImageView;
import androidx.appcompat.app.AppCompatActivity;

public class MainActivity extends AppCompatActivity {
   
    @Override
    protected void onCreate(Bundle savedInstanceState) {
   
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        ImageView imageView = findViewById(R.id.sharedImageView);
        imageView.setOnClickListener(new View.OnClickListener() {
   
            @Override
            public void onClick(View v) {
   
                Intent intent = new Intent(MainActivity.this, DetailActivity.class);

                // 创建ActivityOptions
                ActivityOptions options = ActivityOptions.makeSceneTransitionAnimation(
                        MainActivity.this, imageView, "sharedImage");

                // 启动目标Activity
                startActivity(intent, options.toBundle());
            }
        });
    }
}

// DetailActivity.java
import android.os.Bundle;
import androidx.appcompat.app.AppCompatActivity;

public class DetailActivity extends AppCompatActivity {
   
    @Override
    protected void onCreate(Bundle savedInstanceState) {
   
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_detail);
    }
}

2. 为共享元素设置transitionName

在布局文件中,为共享元素指定唯一的transitionName属性。

<!-- activity_main.xml -->
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <ImageView
        android:id="@+id/sharedImageView"
        android:layout_width="200dp"
        android:layout_height="200dp"
        android:src="@drawable/your_image_resource"
        android:transitionName="sharedImage" />
</RelativeLayout>

<!-- activity_detail.xml -->
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <ImageView
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:src="@drawable/your_image_resource"
        android:transitionName="sharedImage" />
</RelativeLayout>

3. 配置转场动画(可选)

在res文件夹中创建transition目录,并在其中创建XML文件定义具体的动画效果。例如:

<!-- res/transition/change_image_transform.xml -->
<transitionSet xmlns:android="http://schemas.android.com/apk/res/android">
    <changeImageTransform>
        <duration android:value="300" />
    </changeImageTransform>
</transitionSet>

在Activity的onCreate方法中设置这些动画(通常可省略,系统会自动处理基础动画):

SharedElementTransition sharedElementTransition = new ChangeImageTransform();
sharedElementTransition.setDuration(300);

getWindow().setSharedElementEnterTransition(sharedElementTransition);
getWindow().setSharedElementExitTransition(sharedElementTransition);

总结

这个示例展示了如何在两个Activity之间实现共享元素过渡动画。关键步骤包括在布局文件中设置transitionName属性,在代码中通过ActivityOptions创建动画选项,并启动目标Activity。如果需要更精细的动画效果,还可以通过自定义过渡动画文件来配置。

共享元素动画可以显著提升用户体验,尤其是当你需要在界面间平滑过渡具体元素(如图片、文本)时,可以提供更自然和清晰的视觉反馈。


欢迎关注我的公众号AntDream查看更多精彩文章!

目录
相关文章
|
12天前
|
存储 Shell Android开发
基于Android P,自定义Android开机动画的方法
本文详细介绍了基于Android P系统自定义开机动画的步骤,包括动画文件结构、脚本编写、ZIP打包方法以及如何将自定义动画集成到AOSP源码中。
37 2
基于Android P,自定义Android开机动画的方法
|
4天前
|
安全 Android开发 Kotlin
Android经典实战之SurfaceView原理和实践
本文介绍了 `SurfaceView` 这一强大的 UI 组件,尤其适合高性能绘制任务,如视频播放和游戏。文章详细讲解了 `SurfaceView` 的原理、与 `Surface` 类的关系及其实现示例,并强调了使用时需注意的线程安全、生命周期管理和性能优化等问题。
25 7
|
10天前
|
XML 搜索推荐 Android开发
安卓开发中的自定义View组件实践
【8月更文挑战第30天】探索Android世界,自定义View是提升应用界面的关键。本文以简洁的语言带你了解如何创建自定义View,从基础到高级技巧,一步步打造个性化的UI组件。
|
2月前
|
XML Android开发 数据格式
Android 中如何设置activity的启动动画,让它像dialog一样从底部往上出来
在 Android 中实现 Activity 的对话框式过渡动画:从底部滑入与从顶部滑出。需定义两个 XML 动画文件 `activity_slide_in.xml` 和 `activity_slide_out.xml`,分别控制 Activity 的进入与退出动画。使用 `overridePendingTransition` 方法在启动 (`startActivity`) 或结束 (`finish`) Activity 时应用这些动画。为了使前 Activity 保持静止,可定义 `no_animation.xml` 并在启动新 Activity 时仅设置新 Activity 的进入动画。
49 12
|
2月前
|
移动开发 开发工具 Android开发
探索安卓与iOS开发的差异:平台特性与编程实践
【7月更文挑战第8天】在移动开发的广阔天地中,安卓和iOS这两大操作系统各自占据着半壁江山。它们在用户界面设计、系统架构及开发工具上展现出截然不同的特色。本文将深入探讨这两个平台在技术实现和开发生态上的关键差异,并分享一些实用的开发技巧,旨在为跨平台开发者提供有价值的见解和建议。
|
2月前
|
Android开发
android 动画 插值器和估值器
android 动画 插值器和估值器
|
2月前
|
安全 Java 数据处理
Android多线程编程实践与优化技巧
Android多线程编程实践与优化技巧
|
5天前
|
存储 Android开发 开发者
探索安卓开发之旅:从新手到专家的必经之路
【9月更文挑战第3天】在这篇文章中,我们将踏上一场激动人心的旅程,深入探索安卓开发的广阔天地。无论你是初涉编程世界的新手,还是期望提升技能的开发者,这里都有你需要的知识与技巧。我们将从基础概念讲起,逐步引导你了解安卓应用的核心组件,并分享实用的开发建议。准备好了吗?让我们一起开启这段成长之旅吧!
|
Android开发
android基于Activity共享元素切换效果的实现
先上一张效果图: 主要用到的类有: android.support.v4下的三个类: ActivityOptionsCompat,    ActivityCompat,    ViewCompat 这三个类的主要作用就...
1038 0
|
1天前
|
Java 开发工具 Android开发
安卓与iOS开发:平台选择对项目成功的影响
在移动应用开发的浩瀚宇宙中,安卓和iOS两大星系璀璨夺目,各自拥有独特的光芒。本文将穿梭于这两个平台之间,探讨它们在开发环境、用户群体、成本效益等方面的差异,以及这些差异如何影响一个项目的航向和终点。我们将从初学者的视角出发,逐步深入,揭示选择合适平台的重要性,以及如何根据项目需求做出明智的选择。无论你是即将启航的新手开发者,还是已经在这片星海中航行的老手,这篇文章都将为你提供有价值的导航信息。
9 2