Android 转场动画开发

先看转场动画的效果:

转场动画效果

上图中包含两个Activity(可以从title中看出来),在ActivityA中点击图片时跳转到ActivityB,同时图片上执行了一个放大+位移的动画。

这种动画是Android 5.0上增加的转场动画。下面我们看一下如何开发这种动画效果。

  1. 在ActivityA的layout中添加ImageView,并增加transitionName属性。transitionName属性的值可以是任意字符串。
<!-- layout文件activity_main.xml -->
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity">

    <ImageView
        android:id="@+id/avatar_image"
        android:layout_width="80dp"
        android:layout_height="80dp"
        android:layout_marginLeft="20dp"
        android:layout_marginTop="20dp"
        android:src="@drawable/avatar_img"
        android:transitionName="@string/trans_name" />

</RelativeLayout>
  1. 在MainActivity中应用该layout,并添加跳转逻辑:
// 类文件:MainActivity.java
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    setTitle("Activity A");

    final ImageView avatarImage = findViewById(R.id.avatar_image);
    avatarImage.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            Intent intent = new Intent(MainActivity.this, BrowseImageActivity.class);

            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
                ActivityOptions options = ActivityOptions.makeSceneTransitionAnimation(
                        MainActivity.this, avatarImage, getString(R.string.trans_name));
                startActivity(intent, options.toBundle());
            } else {
                startActivity(intent);
            }
        }
    });
}

在跳转之前,创建了一个ActivityOptions对象,并作为参数传入到了startActivity方法中。注意创建ActivityOptions的参数中包含了转场动画中的View以及transitionName内的值。

  1. 创建ActivityB,以及其layout文件。注意ImageView中的transitionName要和之前的View保持一致。
<!-- layout文件image_browser.xml -->
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <ImageView
        android:id="@+id/avatar_big_image"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:src="@drawable/avatar_img"
        android:transitionName="@string/trans_name" />

</FrameLayout>
// 类文件BrowseImageActivity.java
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.image_browser);
    setTitle("Activity B");
}

做完这些,转场动画相关的代码就结束了。其实关键的代码就两点:

  1. 转场前后,各有一个View,其transitionName属性是一致的。
  2. 转场时,创建一个ActivityOptions对象并传入到startActivity方法中。
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

友情链接更多精彩内容