Android 动画Activity转场动画入门

(本篇博客乃本人第一篇博客,如果有不足之处请多多指教)


         Android动画在App开发中有着举足轻重的作用,一个酷炫的动画效果能大大提高App的交互效果,动画可以让本来静态的动画变得不那么僵硬,由于现在android设备大都吃上的5.0,所以本文也主要介绍5.0的新转场动画,5.0新定义了转场动画,大致分为如下四种,explode,slide,fade,share,下面我们就废话少说,直接来看怎么实现吧.


1.slide动画,之所以先说Slide动画,是因为我觉得Slide动画相对简单理解

slide动画正如字面意义上滑动一样,是滑动效果的动画,先来看张效果图

Android 动画Activity转场动画入门

这个slide动画效果是通过定义XML文件的方式实现的不需要5.0以上版本

四个xml文件代码如下:

slide_left_in.xml 定义activity从左进入:

Android 动画Activity转场动画入门

slide_right_out.xml定义activity从右出:

Android 动画Activity转场动画入门

slide_left_out.xml定义activity从左出

Android 动画Activity转场动画入门

slide_right_in.xml定义activity从右出

Android 动画Activity转场动画入门

然后在Activity中实现activity]的跳转这里用隐式的Intent实现activity的跳转

Android 动画Activity转场动画入门

然后在重写CActivity的onPause方法实现返回activity的滑动动画

Android 动画Activity转场动画入门

2.Explode动画,explode 就是activity从四周进入

效果:Android 动画Activity转场动画入门

这个动画跳转就不一样的 虽然不用定义动画 但是代码相对难理解一些

在startActivity(Intent intent,Bundle bundle);要多传一个Bundle

case R.id.btn_explode:
    startActivity(new Intent(MainActivity.this,BActivity.class),
    ActivityOptions.makeSceneTransitionAnimation(this).toBundle());
    break;
然后在要跳转的Activity,BActivity中声明

@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    getWindow().setEnterTransition(new Explode());
    setContentView(R.layout.bactivity);
}
只有设置了进入动画才能识别5.0动画

代码很简单

3.Fade动画 渐变动画 这个不用多说就是activity慢慢显现

效果:Android 动画Activity转场动画入门

设置Fade动画和设置explode动画方法差不多

case R.id.btn_fade:
   startActivity(new Intent(MainActivity.this,DActivity.class),
           ActivityOptions.makeSceneTransitionAnimation(this).toBundle());
    break;
然后依然在DActivity中设置动画

@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    getWindow().setEnterTransition(new Fade());
    setContentView(R.layout.dactivity);
}
注意这里动画设置要在加入布局之前 这里还有一个出去动画

 getWindow().setExitTransition(new Fade());
进入动画和出去动画最好是不要同时设置


4.Share  共享动画  这个动画的效果是最酷炫的 而且随意定制  废话少说看效果

Android 动画Activity转场动画入门

是不是很酷炫  由于只是一个Demo共享的view还不是很多 当共享的view多的时候更酷炫

这个代码就相对复杂了

MainActivity中的共享 View

<Button
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:background="@mipmap/ic_launcher"
    android:id="@+id/btn_img"
    android:transitionName="img"/>

<TextView
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:text="Android"
    android:gravity="right"
    android:textSize="20sp"
    android:id="@+id/tv_text"
    android:transitionName="text"/>
EActivity的布局中共享view
<Button
        android:layout_width="wrap_content"
        android:layout_height="80dp"
        android:background="@mipmap/ic_launcher"
        android:id="@+id/btn_img"
        android:transitionName="img"
        android:layout_marginLeft="150dp"
        android:layout_weight="0.08"
    android:layout_alignParentBottom="true"
    android:layout_alignParentStart="true"
    android:layout_marginStart="311dp"
    android:layout_marginBottom="171dp" />
<TextView
    android:id="@+id/tv_text"
    android:layout_width="match_parent"
    android:layout_height="300dp"
    android:background="#06d9f1"
    android:gravity="center"
    android:text="Android"
    android:textSize="40sp"
    android:transitionName="text"
    android:layout_alignParentTop="true"
    android:layout_alignParentStart="true" />
然后再是跳转了
case R.id.btn_share:
    View img = findViewById(R.id.btn_img);
    View text =findViewById(R.id.tv_text);
    Intent intent = new Intent(MainActivity.this,EActivity.class);
    startActivity(intent,ActivityOptions.makeSceneTransitionAnimation(this,
            Pair.create(img,"img"),
            Pair.create(text,"text")).toBundle());
    break;

@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    getWindow().requestFeature(Window.FEATURE_CONTENT_TRANSITIONS);
    setContentView(R.layout.eactivity);
}
都设置一个transitionName,注意这个只要与共享的跳转的Activity中的view的
transitionName值一致
这两个Activity有两个共享的View 一个Button 一个TextView,他们分别再两个布局中的位置都不同
当从一个activity跳转到另一个activity时会有一个渐变的过程,看起来就像是共享的view

share动画的应用很广泛 比如列表的跳转 下面给大家看个Share动画的ListView实现

下篇就介绍这篇 顺便有自定义的实现ListView