返回顶部
首页 > 资讯 > 移动开发 >Android中Activity过渡动画的实例讲解
  • 904
分享到

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

2024-04-02 19:04:59 904人浏览 八月长安
摘要

目录前言分解动画效果视频解析滑动动画效果视频解析淡出动画效果视频解析共享元素共享单个元素解析共享多个元素效果视频全部代码总结前言 以前Activty之间得跳转非常生硬,自Androi

前言

以前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过渡动画内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: Android中Activity过渡动画的实例讲解

本文链接: https://lsjlt.com/news/157032.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • Android中Activity过渡动画的实例讲解
    目录前言分解动画效果视频解析滑动动画效果视频解析淡出动画效果视频解析共享元素共享单个元素解析共享多个元素效果视频全部代码总结前言 以前Activty之间得跳转非常生硬,自Androi...
    99+
    2024-04-02
  • React中过渡动画的编写方式实例详解
    目录React的过渡动画过渡动画库的介绍CSSTransition(掌握)SwitchTransition(了解)TransitionGroup(了解) 总结React的过...
    99+
    2024-04-02
  • Android Activity切换动画详解及实例
    Android Activity切换动画 Android Activity切换动画是指从Activity A 跳转至Activity B的时候,Activity A 有退出动画...
    99+
    2022-06-06
    activity 动画 Android
  • 通过实例简单讲解Android App中的Activity组件
    Activity是Android应用中,最直接与用户接触的组件,它负责加载View组件,使其展现给用户,并保持与用户的交互。所有的Activity组件均需要继承Activity...
    99+
    2022-06-06
    activity app Android
  • vue3中过渡动画的示例分析
    这篇文章主要介绍了vue3中过渡动画的示例分析,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。一、vue中动画简单介绍在vue中如果一些过程不存在动画效果,则表现出来的结果是比...
    99+
    2023-06-29
  • vue3过渡动画的详解
    目录一、vue中动画简单介绍二、vue的transition动画三、transition组件的实现原理四、transition过渡动画的class属性五、class的添加时机和命名规...
    99+
    2024-04-02
  • Bootstrap过渡动画的示例分析
    这篇文章主要为大家展示了“Bootstrap过渡动画的示例分析”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“Bootstrap过渡动画的示例分析”这篇文章吧。动...
    99+
    2024-04-02
  • Vue3过渡动画的示例分析
    这期内容当中小编将会给大家带来有关Vue3过渡动画的示例分析,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。背景在我的 《Vue 3 开发企业级音乐 App》课程问答区,有个同学提了个问题,在歌手列表到歌手...
    99+
    2023-06-22
  • Android Activity共享元素动画示例解析
    目录正文TransitionManager介绍Scene(场景)生成场景Transition(过渡)OverlayView和ViewGroupOverlayGhostViewActi...
    99+
    2024-04-02
  • react组件中过渡动画的问题解决
    目录一、是什么二、如何实现CSSTransitionSwitchTransitionTransitionGroup一、是什么 在日常开发中,页面切换时的转场动画是比较基础的一个场景 ...
    99+
    2024-04-02
  • Vue3中怎么实现过渡动画效果
    这篇文章主要介绍了Vue3中怎么实现过渡动画效果的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇Vue3中怎么实现过渡动画效果文章都会有所收获,下面我们一起来看看吧。Vue的transition组件Vue中中提供...
    99+
    2023-06-29
  • CSS3中变形、过渡、动画属性的示例分析
    小编给大家分享一下CSS3中变形、过渡、动画属性的示例分析,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧! css3中制作动画的...
    99+
    2024-04-02
  • Vue中如何实现animate过渡动画效果
    这篇文章主要为大家展示了“Vue中如何实现animate过渡动画效果”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“Vue中如何实现animate过渡动画效果”这...
    99+
    2024-04-02
  • android最全的动画讲解
    android的动画一共分为三种,view动画,帧动画,属性动画。 View动画 什么是view动画,动画的对象只能是view的动画叫做view动画。view动画一共分为四种:TranslateAnimation(平移),ScaleAnim...
    99+
    2023-09-09
    android
  • vue实现过渡动画Message消息提示组件示例详解
    目录概述目录结构总结概述 在我自己平时做项目的时候,必不可少的会用到message组件,用来对用户友好反馈,总之使用频率还是挺高的,刚开始工作的时候,经常用的就是组件库的现成的,想想...
    99+
    2024-04-02
  • Vue中动画与过渡的使用教程
    目录前言一、回忆css3中的动画二、Vue中单标签使用动画1.默认使用方法2.自定义使用方法三、Vue中多标签实现动画效果四、使用第三方动画前言 本篇博客将会介绍如何在Vue中使用动...
    99+
    2023-01-09
    Vue动画与过渡 Vue动画 Vue过渡
  • Vue 动画效果、过渡效果的示例代码
    目录动画效果过渡效果单个元素多个元素Animate.css总结todolist 增加动画效果动画效果 新建 Test.vue <template> <div&...
    99+
    2024-04-02
  • Android App中使用SurfaceView制作多线程动画的实例讲解
    1. SurfaceView的定义 通常情况程序的View和用户响应都是在同一个线程中处理的,这也是为什么处理长时间事件(例如访问网络)需要放到另外的线程中去(防止阻塞当前UI...
    99+
    2022-06-06
    surfaceview 多线程 app 线程 动画 Android
  • pygame实现方块动画实例讲解
    导入组件 首先导入需要的组件,pygame游戏组件,time是时间组件 import pygame, time, sys from pygame.locals import * ...
    99+
    2024-04-02
  • css3中怎么定义过渡动画的时间
    这篇文章主要介绍“css3中怎么定义过渡动画的时间”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“css3中怎么定义过渡动画的时间”文章能帮助大家解决问题。 ...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作