Android5.0之前我们一般会使用overridePendingtransition(int inId, int outId)来给Activity增加一些切换动画,但效果差强人意。Android5.0中提供了三种Transition类型:

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

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

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

其中进入和退出效果包括:

explode(分解):从屏幕中间进或出

slide(滑动):从屏幕边缘进或出

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

先看app效果:

操作步骤:

1.ActivityA跳转ActivityB时调用:

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

2.在ActivityB的setContentView()方法前调用

getWindow().requestFeature(Window.FEATURE_CONTENT_TRANSITIONS);

3.设置ActivityB的进入动画

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

4.设置ActivityB的退出动画

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

5.设置共享元素的动画

在ActivityA和ActivityB的布局文件中给需要共享的元素(如:imageview)设置如下属性并且保证命名完全相同

android:transitionName="share"

(1)共享一个元素代码:

startActivity(intent, ActivityOptions.makeSceneTransitionAnimation(this, view, "share").toBundle());

(2)共享多个元素代码:

startActivity(intent, ActivityOptions.makeSceneTransitionAnimation(this, Pair.create(view, "share"), Pair.create(fab, "fab")).toBundle());

好啦,接下来直接上代码:

MainActivity

public class MainActivity extends AppCompatActivity {private Intent intent;@Override
    protected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);}//分解
    public void explode(View view) {intent = new Intent(this, SecondActivity.class);intent.putExtra("flag", 0);if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {startActivity(intent, ActivityOptions.makeSceneTransitionAnimation(this).toBundle());}}//滑动
    public void slide(View view) {intent = new Intent(this, SecondActivity.class);intent.putExtra("flag", 1);if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {startActivity(intent, ActivityOptions.makeSceneTransitionAnimation(this).toBundle());}}//淡出
    public void fade(View view) {intent = new Intent(this, SecondActivity.class);intent.putExtra("flag", 2);if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {startActivity(intent, ActivityOptions.makeSceneTransitionAnimation(this).toBundle());}}// 共享
    public void share(View view) {View fab = findViewById(R.id.fab_button);intent = new Intent(this, SecondActivity.class);intent.putExtra("flag", 3);//创建单个共享元素
      /*  if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
            startActivity(intent, ActivityOptions.makeSceneTransitionAnimation(
                    this, view, "share").toBundle());
        }*/
        //创建多个共享元素
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {startActivity(intent, ActivityOptions.makeSceneTransitionAnimation(this, Pair.create(view, "share"), Pair.create(fab, "fab")).toBundle());}}
}

MAinActivity布局:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    >

    <Button
        android:layout_width="match_parent"
        android:layout_height="100dp"
        android:onClick="explode"
        android:text="explode"/>

    <Button
        android:layout_width="match_parent"
        android:layout_height="100dp"
        android:onClick="slide"
        android:text="slide"/>

    <Button
        android:layout_width="match_parent"
        android:layout_height="100dp"
        android:onClick="fade"
        android:text="fade"/>

    <Button
        android:layout_width="match_parent"
        android:layout_height="100dp"
        android:onClick="share"
        android:text="share"
        android:transitionName="share"/>

    <Button
        android:id="@+id/fab_button"
        android:layout_width="56dp"
        android:layout_height="56dp"
        android:background="@color/colorAccent"
        android:elevation="5dp"/>

</LinearLayout>

SecondActivity

public class SecondActivity extends AppCompatActivity {@Override
    protected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {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_second);}}

SecondActivity布局:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    >

    <View
        android:id="@+id/holder_view"
        android:layout_width="match_parent"
        android:layout_height="300dp"
        android:background="@color/colorPrimary"
        android:transitionName="share"/>

    <Button
        android:id="@+id/fab_button"
        android:layout_width="56dp"
        android:layout_height="56dp"
        android:layout_alignParentEnd="true"
        android:layout_below="@id/holder_view"
        android:layout_marginTop="-26dp"
        android:background="@color/colorAccent"
        android:elevation="5dp"
        android:transitionName="fab"
        />

    <RelativeLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_below="@id/holder_view"
        android:paddingTop="10dp">

        <Button
            android:id="@+id/button4"
            android:layout_width="match_parent"
            android:layout_height="60dp"
            android:layout_alignParentStart="true"
            android:layout_marginTop="10dp"/>

        <Button
            android:id="@+id/button"
            android:layout_width="match_parent"
            android:layout_height="60dp"
            android:layout_alignParentStart="true"
            android:layout_below="@id/button4"
            android:layout_marginTop="10dp"/>

    </RelativeLayout>

</RelativeLayout>

Activity过渡动画相关推荐

  1. Android——浅析Activity过渡动画

    Activity过渡动画 前言 分解动画 效果视频 解析 滑动动画 效果视频 解析 淡出动画 效果视频 解析 共享元素 共享单个元素 效果视频 解析 共享多个元素 效果视频 全部代码 第一个Activ ...

  2. android 官方默认动画,Android动画一:Activity过渡动画详细实现原理

    虽然 Android 5.0 之后推出了新的过渡动画方式,但通常只是用于特定的场合使用,activity.overridePendingTransition() 通用方式的过渡动画还是很常用. 原理分 ...

  3. android 页面过渡动画,Activity过渡动画的实现方法

    1.使用overridePendingTransition方法实现Activity跳转动画 overridePendingTransition方法是Activity中提供的Activity跳转动画方法 ...

  4. 安卓 activity过渡动画

    Activity过渡的五中实现 1.使用overridePendingTransition方法实现Activity跳转动画  overridePendingTransition方法是Activity中 ...

  5. android自定义过渡动画,11.自定义过渡动画

    11.1 问题 应用程序需要自定义Activity切换或Fragment切换时产生的过渡动画. 11.2 解决方案 (API Level 5) 要修改Activity间的过渡动画,可以使用overri ...

  6. android过渡动画旋转,炫酷的Android过渡动画

    [桃花潭水深千尺,不及汪伦送我情] 不知道大家有没有发现,Android版的掘金有下面这个小小动画:点击作者头像跳转到作者的详情页,而作者头像会从当前界面通过动画过渡详情页界面. image 知识贫乏 ...

  7. Android Transition过渡动画

    在Android 4.4 Transition 就已经引入了,但在Android 5.0(API 21)之后,Transition 被更多的应用起来.相对于View Animation或Propert ...

  8. Activity跳转的过渡动画全解析

    ActivityOptionsCompat 前因: //在旧版本里面,我们切换Activity大多都是使用的api overridePendingTransition(enterAnim, exitA ...

  9. android窗口动画和过渡动画(activity和dialog)

    from:http://blog.sina.com.cn/s/blog_ba23fa6f0102v32g.html 窗口动画和过渡动画是指在窗口(activity或dialog)切换时的显示动画,窗口 ...

最新文章

  1. 百度开源联邦学习框架 PaddleFL:简化大规模分布式集群部署
  2. 19.VS属性管理器窗口不见了怎么办?
  3. POJ - 2186 Popular Cows(强连通缩点)
  4. python choose语句作用_理解闭包是如何与变量作用域相互影响的
  5. C/C++ OpenCV设置感兴趣区域ROI
  6. PyTorch 深度学习:32分钟快速入门——ResNet
  7. C Prime Plus 第一章 初识C语言
  8. python3GUI--仿做一个网易云音乐By:PyQt5(附下载地址)
  9. 打包docker镜像推送到远程服务器并部署到k8s
  10. unwrapped oracle,求助CentOS 5.4 +oracle 11g R2 ASM 模式 安装后 EM 启动后登陆不进去!
  11. 跟alex学python_跟Alex学Python之
  12. LeetCode——1849. 将字符串拆分为递减的连续值(Splitting a String Into Descending Consecutive Val..)[中等]——分析及代码(Java)
  13. 制造业ERP系统如何帮助企业做好生产物料管控?
  14. Kup Buty Under Armour także czynników bocznych
  15. Win10配置pytorch深度学习环境
  16. 集群(Cluster)
  17. Web scraper使用教程-进阶用法(二)-爬取二级页面内容
  18. [engine]加载速度拉满的direct storage
  19. 我是如何走上程序员这条道路的
  20. WML语言基础(WAP建站)二(转)

热门文章

  1. 面向对象第二单元总结
  2. [转帖] bat方式遍历目录内的文件
  3. 自定义插入子串、删除子串、替换子串函数
  4. maven更换阿里云源
  5. 大型网站的架构设计与演进
  6. Latex中关于参考文献的一些经验
  7. [ 总结 ] 删除通过find查找到的文件
  8. 代码大全(第二版)笔记——高质量的子程序
  9. MEF体验使用接口导出的优越性
  10. Java 集合系列16之 Spring Boot 配置文件 选项配置(一)