android之Activity的切换动画(进出动画)

一般情况下,如果我们不设置Activity的切换动画,默认的是淡入淡出。但是我们看到很多App都是左右切换的动画效果看着比淡入淡出效果要好看,那么它们是如何实现的呢,其实很简单,就写几个动画的xml文件就可以了,但是写动画的xml前需要了解Activity的进出机制,我下面画个图进行说明,这是Android系统屏幕的坐标系分布方式:


假设A就是我们的手机,切换的时候动画的坐标都是以手机的左上角来移动的,现在来一一说明,假设我们此时显示的Activity称为start,需要跳转到Activity称为end

如果我们想跳转的时候end从右边进来(同时start从左边出去),一切都只看x轴,因为我们左右切换的时候与Y轴无关,所以只看x坐标。

●那么end就是从上图C位置到A位置即从100%p到0%p,即从屏幕右边平移进来,建立其对应的动画xml文件名为in_from_right,动画代码就是:

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android" 
    android:interpolator="@android:anim/decelerate_interpolator" >
    <translate 
        android:fromXDelta="100%p" 
        android:toXDelta="0%p"
        android:duration="300" />
</set>

translate不用说了吧,代表平移动画,fromXDelta代表x方向的初始位置,我们是从100%p到0%p,所以初始位置是100%p,toXDelta代表结束位置即0%p,duration代表动画的持续时间0.3s

●那么start从A位置到B位置即从0%p到-100%p,即 从屏幕左边平移出去,建立其对应的动画xml文件名为 out_to_left,动画代码就是:

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android" 
    android:interpolator="@android:anim/decelerate_interpolator" >
    <translate 
        android:fromXDelta="0%p" 
        android:toXDelta="-100%p"
        android:duration="300" />
</set>
代码不用解释了吧,跟前面代码的道理一样

那么竖直方向的,比如end从下面进来的同时start从上面出去,道理也是一样的,只是将fromXDelta和toXDelta换成fromYDelta和toYDelta。


如果想跳转的时候end从右边进来,start不动,那么实现方式又不一样了。

●那么end的方式方法不变,同上

●那么start的方式就是不动,就是从A到A,所以就是从0%p到0%p,所以代码x方向切换时停止的代码就是:

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android" 
    android:interpolator="@android:anim/decelerate_interpolator" >
    <translate 
        android:fromXDelta="0%p" 
        android:toXDelta="0%p"
        android:duration="300" />
</set>

x和y方向上的做法都是一样的,这些会了,那各种切换方式就出来了。


发布了33 篇原创文章 · 获赞 49 · 访问量 14万+

猜你喜欢

转载自blog.csdn.net/gsw333/article/details/51852712
今日推荐