一.Activity的转场动画
1.overridePendingTransition(enterAnim, exitAnim);
重写Activity的 overridePendingTransition 方法;
需要四个anim目录下的xml文件
// 在finish或startActivity 方法 之后,立刻调用 overridePendingTransition 设置activity 切换的动画
// 参数一:开启的activity执行的动画
// 参数二:结束的activity执行的动画
执行切换到下一个页面的动画
overridePendingTransition(R.anim.next_in, R.anim.next_out);
// 执行切换到上一个页面的动画
overridePendingTransition(R.anim.pre_in, R.anim.pre_out);
next_in
<?xml version="1.0" encoding="utf-8"?>
<translate xmlns:android="http://schemas.android.com/apk/res/android"
android:duration="500"
android:fromXDelta="100%p"
android:toXDelta="0" >
</translate>
next_out
<?xml version="1.0" encoding="utf-8"?>
<translate xmlns:android="http://schemas.android.com/apk/res/android"
android:duration="500"
android:fromXDelta="0"
android:toXDelta="-100%p" >
</translate>
pre_in
<?xml version="1.0" encoding="utf-8"?>
<translate xmlns:android="http://schemas.android.com/apk/res/android"
android:duration="500"
android:fromXDelta="-100%p"
android:toXDelta="0" >
</translate>
pre_out
<?xml version="1.0" encoding="utf-8"?>
<translate xmlns:android="http://schemas.android.com/apk/res/android"
android:duration="500"
android:fromXDelta="0"
android:toXDelta="100%p" >
</translate>
2.makeScaleUpAnimation
makeScaleUpAnimation
这种方式个人感觉用途还是很广的,效果就是不断的 放大一个view,进而进行activity的过度, 看代码,
private void launch(View view) { ActivityOptionsCompat compat =
ActivityOptionsCompat.makeScaleUpAnimation(view, view.getWidth() / 2, view.getHeight() / 2, 0, 0);
ActivityCompat.startActivity(this, new Intent(this, Activity2.class), compat.toBundle());
}
第1个参数是scale哪个view的大小,第2和3个参数是以view为基点,从哪开始动画,这里是该view的中心,4和5参数是新的activity从多大开始放大,这里是从无到有的过程。
3.多个view的协作 makeSceneTransitionAnimation
代码为:
private void launch2() { Pair<View, String> imagePair = Pair.create((View)imageView,
getString(R.string.image)); Pair<View, String> textPair = Pair.create((View)textView,
getString(R.string.name)); ActivityOptionsCompat compat = ActivityOptionsCompat
.makeSceneTransitionAnimation(this, imagePair, textPair); ActivityCompat.startActivity(this, new
Intent(this, makeSceneTrans.class), compat.toBundle());
}
xml 文件为:
mainactivity
<TextView android:id="@+id/text"
android:textSize="20sp"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:layout_centerHorizontal="true"
android:text="makeSceneTrans 多view协作"
android:transitionName="@string/name" />
<ImageView
android:id="@+id/image"
android:layout_width="100dp"
android:layout_height="100dp"
android:layout_above="@id/text"
android:layout_centerHorizontal="true"
android:src="@drawable/ic_avatar3"
android:transitionName="@string/image" />
activity2
<ImageView android:id="@+id/image"
android:layout_width="wrap_content"
android:layout_height="300dp"
android:layout_alignParentTop="true"
android:layout_centerHorizontal="true"
android:src="@drawable/ic_avatar3"
android:scaleType="fitXY"
android:transitionName="@string/image" />
<TextView
android:id="@+id/text"
android:textSize="20sp"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@id/image"
android:layout_centerHorizontal="true"
android:text="makeSceneTrans 返回"
android:transitionName="@string/name" />
ImageView的android:transitionName属性,我们指定为name是image的string,第二个activity的布局文件也有一个transitionName是name为image的string
其中最重要的是 transitionName 这个属性 需要协调的view都添加这个属性 ,告诉系统都是谁参与。
- 水波纹平铺 等过渡效果
参考自:
https://github.com/XunMengWinter/CircularAnim
that's all
这些应该能满足大部分的 activity的转场动画了。