Android 动画Activity转场动画入门

来源:互联网 发布:免费手机代理软件 编辑:程序博客网 时间:2024/06/05 19:51

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


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


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

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


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

四个xml文件代码如下:

slide_left_in.xml 定义activity从左进入:


slide_right_out.xml定义activity从右出:


slide_left_out.xml定义activity从左出


slide_right_in.xml定义activity从右出


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


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


2.Explode动画,explode 就是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中声明

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

代码很简单

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

效果:

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

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

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

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


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


是不是很酷炫  由于只是一个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;

@Overrideprotected 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