先看转场动画的效果:
转场动画效果
上图中包含两个Activity(可以从title中看出来),在ActivityA中点击图片时跳转到ActivityB,同时图片上执行了一个放大+位移的动画。
这种动画是Android 5.0上增加的转场动画。下面我们看一下如何开发这种动画效果。
在ActivityA的layout中添加ImageView,并增加transitionName属性。transitionName属性的值可以是任意字符串。
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">
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" />
在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内的值。
创建ActivityB,以及其layout文件。注意ImageView中的transitionName要和之前的View保持一致。
android:layout_width="match_parent"
android:layout_height="match_parent">
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" />
// 类文件BrowseImageActivity.java
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.image_browser);
setTitle("Activity B");
}
做完这些,转场动画相关的代码就结束了。其实关键的代码就两点:
转场前后,各有一个View,其transitionName属性是一致的。
转场时,创建一个ActivityOptions对象并传入到startActivity方法中。