Android中Activity过渡动画的实例讲解

目录
  • 前言
  • 分解动画
    • 效果视频
    • 解析
  • 滑动动画
    • 效果视频
    • 解析
  • 淡出动画
    • 效果视频
    • 解析
  • 共享元素
    • 共享单个元素
    • 解析
  • 共享多个元素
    • 效果视频
  • 全部代码
  • 总结

前言

以前Activty之间得跳转非常生硬,自Android.5X后,Google对Activity的切换设计更多丰富的动画效果。

Android 5.X提供了三种Transition类型,具体如下:

✧进入:一个进人的过渡动画决定Activity中的所有的视图怎么进入屏幕。

✧退出:一个退出的过渡动画决定-个Activity 中的所有视图怎么退出屏幕。

✧共享元素:一个共享元素过渡动画决定两个Activities 之间的过渡,怎么共享它们的视图。

进入和退出动画效果包括如下三种

✧explode (分解)——从屏幕中间进或出,移动视图

✧slide (滑动) ——从屏 幕边缘进或出,移动视图

✧fade(淡出)——通过改变屏幕上的视图的不透明度达到添加或者移除视图

共享元素包括:

✧changeBounds——改变目标视图的布局边界

✧changeClipBounds——裁剪目标视图边界

✧changeTransform——改变目标规图的编放比例和能转角度

✧changelmagTransfom——改空目标图片的大小和缩放比例

分解动画

效果视频

解析

分解动画的进场动画为上下向中间挤压,退出动画为上下向外散开

通过在跳转Activity的时候使用ActivityOptions.makeSceneTransitionAnimation( this ).toBundle()方法进行动画声明,

startActivity( intent, ActivityOptions.makeSceneTransitionAnimation( this ).toBundle() );

然后再另外一个Activity设置动画效果,分解动画进场与退出代码如下

进场效果代码如下

getWindow().setEnterTransition( new Explode(  ) );

退场效果代码如下

getWindow().setExitTransition( new Explode(  ) );

全部代码在文章底部会全部贴出

全部代码在文章底部会全部贴出

全部代码在文章底部会全部贴出

滑动动画

效果视频

解析

滑动动画的进场动画为逐渐向上进入,退出动画为逐渐向下退出
通过在跳转Activity的时候使用ActivityOptions.makeSceneTransitionAnimation( this ).toBundle()方法进行动画声明,

startActivity( intent, ActivityOptions.makeSceneTransitionAnimation( this ).toBundle() );

然后再另外一个Activity设置动画效果,进场与退出代码如下

进场效果代码如下

 getWindow().setEnterTransition( new Slide(  ) );

退场效果代码如下

 getWindow().setExitTransition( new Slide(  ) );

全部代码在文章底部会全部贴出

全部代码在文章底部会全部贴出

全部代码在文章底部会全部贴出

淡出动画

效果视频

解析

谈话动画的进场动画为由虚到实,由浅到深,退出动画则相反
通过在跳转Activity的时候使用ActivityOptions.makeSceneTransitionAnimation( this ).toBundle()方法进行动画声明,

startActivity( intent, ActivityOptions.makeSceneTransitionAnimation( this ).toBundle() );

然后再另外一个Activity设置动画效果,进场与退出代码如下

进场效果代码如下

 getWindow().setEnterTransition( new Fade(  ) );

退场效果代码如下

   getWindow().setExitTransition( new Fade(  ) );

全部代码在文章底部会全部贴出

全部代码在文章底部会全部贴出

全部代码在文章底部会全部贴出

共享元素

共享单个元素

效果视频

解析

共享元素需要再XML布局文件中绑定一个相同的名称,例如再进场的Activity XML布局文件中的 android:transitionName="“属性为share1,那么再另外一个Activity 的XML布局文件中 android:transitionName=”"属性也应该设置为share1,保持一致

 <Button
        android:id="@+id/share1"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="share1"
        android:transitionName="share1"
        android:layout_gravity="center"/>

设置完布局文件中的属性之后,我们再Activiy中设置如下代码,其中share1是我们申明的Button控件的定义share1 = findViewById( R.id.share1 );

其中字符串"share1"为我们在XML文件定义的属性名称

startActivity( intent, ActivityOptions.makeSceneTransitionAnimation( this, Pair.create( (View)share1,"share1" )).toBundle() );

在第一个Activity中设置完成之后,我们需要在跳转之后的Activity进行接收,如上面所述,需要在XML布局文件中 android:transitionName=""属性设置为share1,代码如图所示

<ImageView
    android:layout_width="match_parent"
    android:layout_height="0dp"
    android:layout_weight="3"
    android:src="@drawable/sky"
    android:transitionName="share1"
    android:scaleType="fitXY"/>

绑定相同属性之后,我们就无需在Activity进行任何设置,即可看到效果

共享多个元素

效果视频

多个元素共享与单个元素共享原理一样,在第一个Activity需要定义多个不同的名称进行绑定,此处以两个为例

<Button
        android:id="@+id/share1"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="share1"
        android:transitionName="share1"
        android:layout_gravity="center"/>
    <Button
        android:id="@+id/share2"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="share2"
        android:transitionName="share2"
        android:layout_gravity="center"/>

然后再Activity中进行属性传递

  /*共享多个元素*/
 startActivity( intent, ActivityOptions.makeSceneTransitionAnimation( this, Pair.create( (View)share1,"share1" ), Pair.create( (View)share2,"share2" )).toBundle() );

然后,统一再另外一个Activty的XML布局文件设置相对应的属性名称

<ImageView
    android:layout_width="match_parent"
    android:layout_height="0dp"
    android:layout_weight="3"
    android:src="@drawable/sky"
    android:transitionName="share1"
    android:scaleType="fitXY"/>

<ImageView
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:layout_weight="3"
        android:src="@drawable/ground"
        android:transitionName="share2"
        android:scaleType="fitXY"/>

全部代码

第一个Activity XML布局文件代码

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    tools:context=".MainActivity"
    android:background="#cc00cc"
    >

    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="explode"
        android:onClick="Explode"
        android:layout_gravity="center"/>
    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="slide"
        android:onClick="Slide"
        android:layout_gravity="center"/>
    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="fade"
        android:onClick="Fade"
        android:layout_gravity="center"/>
    <Button
        android:id="@+id/share1"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="share1"
        android:transitionName="share1"
        android:layout_gravity="center"/>
    <Button
        android:id="@+id/share2"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="share2"
        android:transitionName="share2"
        android:layout_gravity="center"/>
    <Button
        android:layout_width="100dp"
        android:layout_height="50dp"
        android:text="SingleShare"
        android:textAllCaps="false"
        android:onClick="SingleShare"
        android:layout_gravity="center"/>
    <Button
        android:layout_width="100dp"
        android:layout_height="50dp"
        android:text="MultShare"
        android:textAllCaps="false"
        android:onClick="MultShare"
        android:layout_gravity="center"/>

</LinearLayout>

第一个Activity 代码

public class MainActivity extends AppCompatActivity {
    private Button share1,share2;
    private Intent intent;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate( savedInstanceState );
        setContentView( R.layout.activity_main );
        share1 = findViewById( R.id.share1 );
        share2 = findViewById( R.id.share2 );
    }

    public void Explode(View view) {
        ReturnActivity(0);
    }

    public void Slide(View view) {
        ReturnActivity(1);
    }

    public void Fade(View view) {
        ReturnActivity(2);
    }
    public void SingleShare(View view) {
        ReturnActivity(3);
    }
    public void MultShare(View view) {
        ReturnActivity(4);
    }

    private void ReturnActivity(int num){
        intent = new Intent( this, TransitionActivity.class);
        switch (num){
            case 0:
                intent.putExtra( "flag",0 );
                break;
            case 1:
                intent.putExtra( "flag",1 );
                break;
            case 2:
                intent.putExtra( "flag",2 );
                break;
            case 3:

            case 4:
                intent.putExtra( "flag",3 );
                break;
        }
        if (num < 3){
            startActivity( intent, ActivityOptions.makeSceneTransitionAnimation( this ).toBundle() );
        }else if (num == 3){
            /*共享单个元素*/
            startActivity( intent, ActivityOptions.makeSceneTransitionAnimation( this, Pair.create( (View)share1,"share1" )).toBundle() );
        }else {
            /*共享多个元素*/
            startActivity( intent, ActivityOptions.makeSceneTransitionAnimation( this, Pair.create( (View)share1,"share1" ), Pair.create( (View)share2,"share2" )).toBundle() );
        }
    }

}

第二个Activity XML布局文件代码

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    tools:context=".TransitionActivity">
<ImageView
    android:layout_width="match_parent"
    android:layout_height="0dp"
    android:layout_weight="3"
    android:src="@drawable/sky"
    android:transitionName="share1"
    android:scaleType="fitXY"/>
    <Button
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:layout_weight="1"
        android:layout_gravity="center"/>
    <ImageView
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:layout_weight="3"
        android:src="@drawable/ground"
        android:transitionName="share2"
        android:scaleType="fitXY"/>
</LinearLayout>

第二个Activity 代码

在第二个Activity设置getWindow().requestFeature( Window.FEATURE_CONTENT_TRANSITIONS );标识符,即可设置动画效果

public class TransitionActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate( savedInstanceState );
        getWindow().requestFeature( Window.FEATURE_CONTENT_TRANSITIONS );
        int flag = getIntent().getExtras().getInt( "flag" );
        switch (flag){
            case 0:
                getWindow().setEnterTransition( new Explode(  ) );
                getWindow().setExitTransition( new Explode(  ) );
                break;
            case 1:
                getWindow().setEnterTransition( new Slide(  ) );
                getWindow().setExitTransition( new Slide(  ) );
                break;
            case 2:
                getWindow().setEnterTransition( new Fade(  ) );
                getWindow().setExitTransition( new Fade(  ) );
                break;
            case 3:
                break;
        }
        setContentView( R.layout.activity_transition );
    }
}

总结

到此这篇关于Android中Activity过渡动画的文章就介绍到这了,更多相关Android Activity过渡动画内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • Android实现Activity界面切换添加动画特效的方法

    本文以实例形式展示了Android实现Activity界面切换添加动画特效的方法,对于Android程序设计人员来说有很好的参考借鉴价值.具体方法如下: 了解Android程序设计的人应该知道,在Android 2.0之后有了overridePendingTransition(),其中里面两个参数,一个是前一个activity的退出,另一个activity的进入. 现看看下面这段示例代码: @Override public void onCreate(Bundle savedInstanceSt

  • Android Activity跳转动画效果

    Activity的跳转动画在5.0的时候做了一个重大的突破,下面来看一下吧 1.5.0之前的overridePendingTransition 相信大家对OverridePendingTransition还是很熟悉的,使用方法也是很简单就是 //fade_in是第二个界面的进入动画,fade_out是第一个界面退出动画,不想动画传入0  overridePendingTransition(R.anim.fade_in,R.anim.fade_out); fade_in : <?xml versi

  • Android Activity切换动画详解及实例

    Android Activity切换动画 Android Activity切换动画是指从Activity A 跳转至Activity B的时候,Activity A 有退出动画,Activity B 有进入动画.这个动画的实现很简单,在startActivity(intent)之后调overridePendingTransition ()这个方法就行.比如实现淡入淡出的效果如下: Intent i = new Intent(ActivityA.this,ActivityB.class); Sta

  • Android的Activity跳转动画各种效果整理

    大家使用Android的原生UI都知道,Android的Activity跳转就是很生硬的切换界面.其实Android的Activity跳转可以设置各种动画.下面给大家看看效果:  实现非常简单,用overridePendingtransition(int inId, int outId)即可实现.inId是下一界面进入效果的xml文件的id,outId是当前界面退出效果的xml文件id. 效果是用xml文件写的,首先要在res文件夹下建立anim文件夹,然后把动画效果xml文件放到里面去. 下面

  • Android Activity进出动画三种方法

     Android Activity进出动画三种方法 实现activity的进出场动画总共有3种方式,下面会一一列出,首先给出示例的动画xml文件. 动画的xml文件 <?xml version="1.0" encoding="utf-8"?> <translate xmlns:android="http://schemas.android.com/apk/res/android" android:fromYDelta="

  • Android中Activity过渡动画的实例讲解

    目录 前言 分解动画 效果视频 解析 滑动动画 效果视频 解析 淡出动画 效果视频 解析 共享元素 共享单个元素 解析 共享多个元素 效果视频 全部代码 总结 前言 以前Activty之间得跳转非常生硬,自Android.5X后,Google对Activity的切换设计更多丰富的动画效果. Android 5.X提供了三种Transition类型,具体如下: ✧进入:一个进人的过渡动画决定Activity中的所有的视图怎么进入屏幕. ✧退出:一个退出的过渡动画决定-个Activity 中的所有视

  • Vue中实现过渡动画效果实例详解

    目录 Vue的transition动画 Transition动画的使用 Transition组件的原理 Transition动画的class Vue的animation动画 Animation动画的使用 过渡的模式mode 列表过渡 列表过渡的介绍 列表过渡的使用 总结 Vue的transition动画 Transition动画的使用 在开发中,我们想要给一个组件的显示和消失添加某种过渡动画,可以很好的增加用户体验: React框架本身并没有提供任何动画相关的API,所以在React中使用过渡动

  • Android中Activity组件实例介绍

    目录 Activity 概述 启动 Activity 的两种情况 关闭 Activity 总结 Activity 概述 在 Android 应用中,提供了 4 大基本组件,分别是 Activity.Service.BroadcastReceiver 和 ContentProvider.而 Activity 是 Android 应用最常见的组件之一.Activity 的中文意思是活动.在 Android 中,Activity 代表手机或者平板电脑中的一屏,它提供了和用户交互的可视化界面.在一个 A

  • Android中显示GIF动画的实现代码

    本文实例讲述了Android中显示GIF动画的实现代码.分享给大家供大家参考,具体如下: gif图动画在android中还是比较常用的,比如像新浪微博中,有很多gif图片,而且展示非常好,所以我也想弄一个.经过我多方的搜索资料和整理,终于弄出来了,其实github上有很多开源的gif的展示代码,我下载过几个,但是都不是很理想,不是我完全想要的.所以有时候就得自己学会总结,把开源的东西整理成自己的,现在无聊,也正好有朋友需要,所以现在整理了一下,留着以后备用! 废话不多说,直接上图: 在这里主要用

  • Android中Activity常用功能设置小结(包括全屏、横竖屏等)

    本文实例讲述了Android中Activity常用功能设置小结(包括全屏.横竖屏等).分享给大家供大家参考,具体如下: Activity全屏设置 方式1:AndroidManifest.xml 复制代码 代码如下: <activity android:name="myAcitivty"  android:theme="@android:style/Theme.NoTitleBar.Fullscreen" /> 方式2:代码实现 复制代码 代码如下: re

  • 理解Android中Activity的方法回调

    为什么需要方法回调? 方法回调是功能定义和功能分离的一种手段,是一种松耦合的设计思想.在JAVA中回调是通过接口来实现的.作为一种系统架构,必须要有自己的运行环境,并且要提供用户的实现接口. 下面通过实例来模拟一下Android中Activity的方法回调思想. Activity接口 复制代码 代码如下: package com.xujing.test  //定义接口  public interface Activity{      //创建时调用的方法      public void onC

  • Android 常见的四种对话框实例讲解

    1.对话框通知(Dialog Notification) 当你的应用需要显示一个进度条或需要用户对信息进行确认时,可以使用对话框来完成. 下面代码将打开一个如图所示的对话框: public void click1(View view) { AlertDialog.Builder builder = new Builder(this); builder.setTitle("工学1号馆"); builder.setIcon(R.drawable.ic_launcher); builder.

  • Android中activity跳转按钮事件的四种写法

    具体实现代码: public class MainActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); // 方法1. 采用实现OnClickListener接口的类 ((Button) findViewById(R.i

  • 简单介绍Android中Activity的四种启动模式

    在Android中每个界面都是一个Activity,切换界面操作其实是多个不同Activity之间的实例化操作.在Android中Activity的启动模式决定了Activity的启动运行方式. Activity有四种启动模式: 1. standard,默认的启动模式,只要激活Activity,就会创建一个新的实例,并放入任务栈中,这样任务栈中可能同时有一个Activity的多个实例. 2. singleTop,激活Activity时,如果栈顶是这个Activity,就不会创建新的实例:如果栈顶

  • Android的Activity加载方式实例分析

    本文实例分析了Android的Activity加载方式.分享给大家供大家参考,具体如下: 前面分析过Android中activity的加载方式(参考前面一篇<Android编程之四种Activity加载模式分析>),这里进一步分析一下. 关于Activity加载方法,无非就是 Intent intent = new Intent(); intent.setClass(ActA.this, ActA.class); startActivity(intent); 以前遇到的一个问题:不停运行这段代

随机推荐