友好的交互体验能够吸引眼球,android API 21(5.0)后系统内置了Activity之间的切换动画,不仅可以让用户看起来舒服,而且实现起来也特别简单。

一、通过overridePendingTransition实现转场动画
这种实现方式应该算最简单的,可以实现包括缩放、平移、alpha值(透明度)变化的转场动画,并且定制性特别强,项目中比较推荐使用这个。

1.1、页面进入实现方式
首先我们需要在页面跳转中加上overridePendingTransition(其中前面一个anim为新页面的入场动画,后面的则是旧页面的退场动画)。

//向上转场public void click_up(View v![在这里插入图片描述](https://img-blog.csdnimg.cn/20200222171648743.gif)iew) {Intent intent = new Intent(TransitionAnimationActivity.this, FlowLayoutActivity.class);startActivity(intent);overridePendingTransition(R.anim.pageup_enter, R.anim.pageup_exit);}

这样我们可以组合的类型就特别多:

1.2、页面返回实现方式

同理,我们需要在返回之前添加overridePendingTransition方法。其中前面一个anim为之前页面的进入动画,后面一个为当前页面的退出动画。

@Overrideprotected void onPause() {overridePendingTransition(R.anim.pagedown_enter, R.anim.pagedown_exit);super.onPause();}

如果在finish之前有较长时间的动画需要绘制而刚好app出现问题,可以考虑使用

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) finishAfterTransition(); else finish();

1.3、无动画
某些特殊情况下,我们可能不需要任何动画,我们可以这样处理

Intent intent = new Intent(getActivity(),SearchListActivity.class);
startActivity(intent);
getActivity().overridePendingTransition(0, 0);@Override
protected void onPause() {overridePendingTransition(0,0);super.onPause();
}

1.4、anim文件的编写
pageup_enter.xml

<?xml version="1.0" encoding="utf-8"?><set xmlns:android="http://schemas.android.com/apk/res/android"><translateandroid:duration="700"android:fromYDelta="100%p"android:toYDelta="0" /><alphaandroid:duration="700"android:fromAlpha="0.0"android:toAlpha="1.0" />
</set>

pageup_exit.xml

<?xml version="1.0" encoding="utf-8"?><set xmlns:android="http://schemas.android.com/apk/res/android"><translateandroid:duration="700"android:fromYDelta="0"android:toYDelta="-100%p" /><alphaandroid:duration="700"android:fromAlpha="1.0"android:toAlpha="0.0" />
</set>

这里样式文件太多了就不一一贴了,更多样式可见demo

二、通过setEnterTransition实现转场动画
setEnterTransition可以实现分解、滑动进入、淡入淡出动画,不需要在页面返回的时候再设置一遍,这种实现方式样式定制性没有overridePendingTransition强。

2.1、实现方式
首先我们需要在页面跳转时候给加上固定的标识ActivityOptions.makeSceneTransitionAnimation(this).toBundle()

startActivity(new Intent(this, ExplodeActivity.class), ActivityOptions.makeSceneTransitionAnimation(this).toBundle());
1
然后在跳转的页面中添加属性,这里主要有分解效果Explode、滑动进入效果Slide、淡入淡出Fade。

@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_resolve);//进入退出效果 注意这里 创建的效果对象是 Explode()getWindow().setEnterTransition(new Explode().setDuration(2000));getWindow().setExitTransition(new Explode().setDuration(2000));}

这里Transition对象还可以通过xml资源指定

@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);getWindow().requestFeature(Window.FEATURE_CONTENT_TRANSITIONS);setContentView(R.layout.activity_resolve);Transition explode = TransitionInflater.from(this).inflateTransition(R.transition.explode);//退出时使用getWindow().setExitTransition(explode);//第一次进入时使用getWindow().setEnterTransition(explode);//再次进入时使用getWindow().setReenterTransition(explode);}

2.2、res/transition资源文件
explode.xml

<?xml version="1.0" encoding="utf-8"?>
<explode xmlns:android="http://schemas.android.com/apk/res/android"android:duration="300" />

fade.xml

<?xml version="1.0" encoding="utf-8"?>
<fade xmlns:android="http://schemas.android.com/apk/res/android"android:duration="300" />

slide.xml

<?xml version="1.0" encoding="utf-8"?>
<slide xmlns:android="http://schemas.android.com/apk/res/android"android:interpolator="@android:interpolator/decelerate_cubic"android:slideEdge="end" ><!--如果你不希望顶部的状态栏以及底部的导航栏一起执行动画,可以在xml中指定--><targets><target android:excludeId="@android:id/navigationBarBackground" /><target android:excludeId="@android:id/statusBarBackground" /></targets>
</slide>

2.3、效果图如下

三、通过sharedElement共享元素实现转场动画
sharedElement共享元素主要可以实现形变、位移等动画,前后页面的连贯性非常强。

3.1、实现方式
首先我们要给需要共享的元素设置transitionName属性,并且两个需要共享的元素transitionName必须相同。即在两边的xml布局中加入

android:transitionName="myButton1"
1
然后在activity中处理成

//共享元素 下一个页面的按钮 相互绑定public void sharedElements1(View view) {startActivity(new Intent(this, SharedElementsActivity.class),ActivityOptions.makeSceneTransitionAnimation(this, view, "myButton1").toBundle());}

对于多个元素的共享元素

//共享元素 多个元素@RequiresApi(api = Build.VERSION_CODES.LOLLIPOP)public void sharedElements2(View view) {startActivity(new Intent(this, SharedElementsActivity.class),ActivityOptions.makeSceneTransitionAnimation(this,Pair.create(view, "myButton2"),Pair.create(view, "myButton3")).toBundle());}

3.2、效果图

四、附录
Android 原生动画(这里要除去airbnb/lottie-android)可以归纳为以下几种:

视图动画(View动画)
帧动画(Frame 动画、Drawable 动画)
属性动画
触摸反馈动画(Ripple Effect)
揭露动画(Reveal Effect)
转场动画 & 共享元素(Activity 切换动画)
视图状态动画(Animate View State Changes)
矢量图动画(Vector 动画)
约束布局实现的关键帧动画(ConstraintSet 动画)
其他(如RecyclerView item等动画)
另外附上《详尽 Android 动画系列教程》,里面的教程也非常详细,希望各位读者能够努力学习,少出门,抗击新型冠状肺炎人人有责。

————————————————
版权声明:本文为CSDN博主「流星雨在线」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/liuxingyuzaixian/article/details/104440655

android转场动画,让你的APP瞬间绚丽起来相关推荐

  1. react-native转场动画,让你的APP瞬间绚丽起来

    一.前言 关于react-native的转场动画这里要依赖于路由库"react-navigation":"3.6.1",可以实现包括向上转场.向下转场.向左转场 ...

  2. Android Activity跳转动画,让你的APP瞬间绚丽起来

    我们都知道绚丽的APP总会给用户耳目一新的感觉,为了抓住用户更大网络公司使出浑身解数让自己的产品更绚丽,而绚丽最简单的效果就是Activity跳转效果,不仅可以让用户看起来舒服,而且实现起来也特别简单 ...

  3. Android转场动画(View Activity ARouter)

    为什么要使用转场动画?在页面切换或者UI展示的时候,如果没有设计转场动画,那么状态场景的切换就是瞬间发生的,这样就非常突兀,没有视觉效果,所以在App开发的过程中,设计转场动画,是必不可少的. 1.揭 ...

  4. android 转场动画 共享元素,关于android:四步通过Glide实现共享元素无缝转场效果...

    读完这篇文章, 你就会晓得应用Glide等图片加载库实现共享元素转场成果,以及如何解决各种可能加载状态.通过共享转场动画,能够晋升利用交互体验,让用户应用起来更愉悦. 共享元素转场成果是Materia ...

  5. 腾讯T7手记:Android转场动画的前世今生!

    前一段时间做图片查看器的升级时,在打开图片查看器的时,找不到好的过渡方式. 有位大佬给我推荐了Android最新的Material Motion动画,虽然最终没有给我们的App安排,但给我学习Mate ...

  6. android转场动画效果,Android转场动画

    Android最开始一个activity基本就是一个页面,但是没切换一次页面都要重新切换一个activity,这非常耗性能,并且随着平板的出现,更多时候我们只想切换一个页面的局部区域,因此fragme ...

  7. android 转场动画 监听,Android 中的转场动画及兼容处理

    Android 中的动画有很多,除了在一个界面上使用帧动画.属性动画将一个或多个 View 进行动画处理以外,还可以用于两个界面之间过渡.跳转.在 Android 5.0 之前,我们已经有了 over ...

  8. android转场动画总结

    1.Android5.0以前转场动画 Activity overridePendingTransition(R.anim.activity_in, R.anim.activity_out); Frag ...

  9. Android转场动画,Avtivity转场动画;

    转场动画 - 共享元素动画 先看效果: Activity1点击小图标开启Activity2: 开启Activity2效果就像是小图标放大了填充上去的,关闭Activity2回到Activity1时又像 ...

最新文章

  1. Numpy入门教程:练习作业01
  2. VS Code插件之Cordova Tools
  3. 取得NSDate实例各个字段的数字
  4. c语言stl模板,c/c++开发分享C++ 标准模板库 STL 顺序容器详解
  5. git2.29.2.2怎么安装_MySQL5.5怎么安装
  6. python 示例_Python条件类| release()方法与示例
  7. VueRouter源码分析
  8. spark的rdd的含义_Spark里边:到底是什么RDD
  9. SQL运行速度慢?查查中间件
  10. 算法导论 思考题6-2
  11. 「雅礼集训 2018 Day2」农民
  12. C++ STL string字符串内容修改和替换
  13. Windows 环境安装 OS X Monaco 字体
  14. VTK用户指南3:第一部分vtk简介_3系统概述
  15. 浅谈Android自定义View
  16. 【秘密】我经历过的币圈天使融资,了解一下
  17. 10步Navicat for Mysql12.1.20破解激活方法(适用于Navica12.1系列软件)
  18. WinSCP 配置 WindowsTerminal 实现 WinSCP进行SSH
  19. Nuxt SSR 服务端渲染 详解
  20. 华硕u4000u 重装window7 重装win7 重装window10 重装win10 重装系统 戴尔 联想 鸿基 重装系统远程协助

热门文章

  1. 自定义指令简介及用法
  2. scrollView滚动视图实现商城模块
  3. google 网站认证
  4. 使用python实现刷脸登录
  5. 关于Android studio的安装步骤与安装方法
  6. JACO2 6自由度机械臂上手体验一
  7. Android自定义控件(三)——打造闪闪发光的字体
  8. 第六章 对象(Object)
  9. php表单的交互(post方法)
  10. 使用requests.get得到<Element html at 0x271cec68f48什么意思?