Activity转场动画

  Activity的转场动画是通过overridePendingTransition(int enterAnim, int exitAnim)实现的。

  这个方法是API Level 5 加入的。

  这个方法在startActivity(Intent) or finish()之后被调用,指定接下来的这个转场动画。

  方法的第一个参数:enterAnim,是新的Activity的进入动画的resource ID;

  第二个参数exitAnim,是旧的Activity(当前的Activity)离开动画的resource ID。

  所以这两个参数的对象是两个Activity。  

  如果上面两个参数没有动画要设置,则用0作为参数。

  动画的资源文件放在res\anim\目录下,是View Animation

  参见本博客博文:Android Animation学习(六) View Animation介绍

  View Animation包含了基本的动画类型,基本可以满足一般转场动画的需要。

  根节点可以是:<alpha>, <scale>, <translate>, <rotate>, interpolator element, 或者是<set>

  利用set可以进行各种嵌套组合。

  代码例子:

Intent intent = new Intent(TestActivities.this,TestActivityFirst.class);
startActivity(intent);
// transaction animation
overridePendingTransition(R.anim.slide_in_bottom,R.anim.slide_out_bottom);

  其中两个动画:

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

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

Fragment转场动画

  Fragment的转场动画实现分为使用v4包和不使用v4包两种情况,不使用v4包的话,最低API Level需要是11。

标准转场动画:

  可以给Fragment指定标准的转场动画,通过setTransition(int transit)方法。

  该方法可传入的三个参数是:

  TRANSIT_NONE,

  TRANSIT_FRAGMENT_OPEN,

  TRANSIT_FRAGMENT_CLOSE

  分别对应无动画、打开形式的动画和关闭形式的动画。

  标准动画设置好后,在Fragment添加和移除的时候都会有。

自定义转场动画

  自定义转场动画是通过setCustomAnimations()方法,因为Fragment添加时可以指定加入到Back Stack中,所以转场动画有添加、移除、从Back stack中pop出来,还有进入四种情况。

  注意setCustomAnimations()方法必须在add、remove、replace调用之前被设置,否则不起作用。

android.app.Fragment

  类参考:

  Fragment:http://developer.android.com/reference/android/app/Fragment.html

  FragmentTransaction:http://developer.android.com/reference/android/app/FragmentTransaction.html

  不使用v4包的情况下(min API >=11)所对应的动画类型是Property Animation

  即动画资源文件需要放在res\animator\目录下,且根标签是<set>, <objectAnimator>, or <valueAnimator>三者之一。

  这一点也可以从Fragment中的这个方法看出:onCreateAnimator(int transit, boolean enter, int nextAnim),返回值是Animator。

  自定义转场动画时,四个参数的形式setCustomAnimations (int enter, int exit, int popEnter, int popExit)是API Level 13才有的,11只引入了两个动画的形式,即无法指定Back Stack栈操作时的转场动画。

  代码例子:

    private void addFragment() {if (null == mFragmentManager) {mFragmentManager = getFragmentManager();}mTextFragmentOne = new MyFragmentOne();FragmentTransaction fragmentTransaction = mFragmentManager.beginTransaction();// 标准动画// fragmentTransaction// .setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN);// fragmentTransaction// .setTransition(FragmentTransaction.TRANSIT_FRAGMENT_FADE);// fragmentTransaction// .setTransition(FragmentTransaction.TRANSIT_FRAGMENT_CLOSE);// 自定义动画// API LEVEL 11fragmentTransaction.setCustomAnimations(R.animator.fragment_slide_left_enter,R.animator.fragment_slide_right_exit);// API LEVEL 13// fragmentTransaction.setCustomAnimations(// R.animator.fragment_slide_left_enter,// R.animator.fragment_slide_left_exit,// R.animator.fragment_slide_right_enter,// R.animator.fragment_slide_right_exit);fragmentTransaction.add(R.id.container, mTextFragmentOne);// 加入到BackStack中fragmentTransaction.addToBackStack(null);fragmentTransaction.commit();}

  其中四个动画是从ApiDemos中拿来的:

fragment_slide_left_enter:

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android"><objectAnimatorandroid:interpolator="@android:interpolator/decelerate_quint"android:valueFrom="100dp" android:valueTo="0dp"android:valueType="floatType"android:propertyName="translationX"android:duration="@android:integer/config_mediumAnimTime" /><objectAnimatorandroid:interpolator="@android:interpolator/decelerate_quint"android:valueFrom="0.0" android:valueTo="1.0"android:valueType="floatType"android:propertyName="alpha"android:duration="@android:integer/config_mediumAnimTime" />
</set>

fragment_slide_left_exit:

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android"><objectAnimatorandroid:interpolator="@android:interpolator/decelerate_quint"android:valueFrom="0dp" android:valueTo="-100dp"android:valueType="floatType"android:propertyName="translationX"android:duration="@android:integer/config_mediumAnimTime" /><objectAnimatorandroid:interpolator="@android:interpolator/decelerate_quint"android:valueFrom="1.0" android:valueTo="0.0"android:valueType="floatType"android:propertyName="alpha"android:duration="@android:integer/config_mediumAnimTime" />
</set>

fragment_slide_right_enter:

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android"><objectAnimatorandroid:interpolator="@android:interpolator/decelerate_quint"android:valueFrom="-100dp" android:valueTo="0dp"android:valueType="floatType"android:propertyName="translationX"android:duration="@android:integer/config_mediumAnimTime" /><objectAnimatorandroid:interpolator="@android:interpolator/decelerate_quint"android:valueFrom="0.0" android:valueTo="1.0"android:valueType="floatType"android:propertyName="alpha"android:duration="@android:integer/config_mediumAnimTime" />
</set>

fragment_slide_right_exit:

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android"><objectAnimatorandroid:interpolator="@android:interpolator/decelerate_quint"android:valueFrom="0dp" android:valueTo="100dp"android:valueType="floatType"android:propertyName="translationX"android:duration="@android:integer/config_mediumAnimTime" /><objectAnimatorandroid:interpolator="@android:interpolator/decelerate_quint"android:valueFrom="1.0" android:valueTo="0.0"android:valueType="floatType"android:propertyName="alpha"android:duration="@android:integer/config_mediumAnimTime" />
</set>

android.support.v4.app.Fragment

  Fragment:http://developer.android.com/reference/android/support/v4/app/Fragment.html

  FragmentTransaction:http://developer.android.com/reference/android/support/v4/app/FragmentTransaction.html

  使用v4包,Fragment的使用不再局限于API Level 11之上,低等级的API也可以使用,但是这时候转场动画的类型是View Animation

  动画资源放在res\anim\路径下,和Activity的转场动画一样。

  Fragment中的方法:onCreateAnimation(int transit, boolean enter, int nextAnim)返回值Animation。

  FragmentTransaction中的setCustomAnimations()方法,两参数类型和四参数类型都可用。

  所以一般还是用v4包的这个版本,一是兼容性比较好,另外View Animation其实基本可以满足转场动画的需要。

  代码例子:

    private void addFragment() {if (null == mFragmentManager) {mFragmentManager = getSupportFragmentManager();}mTextFragmentOne = new MyFragmentOne();FragmentTransaction fragmentTransaction = mFragmentManager.beginTransaction();fragmentTransaction.setCustomAnimations(R.anim.push_left_in,R.anim.push_left_out,R.anim.push_left_in,R.anim.push_left_out);fragmentTransaction.add(R.id.container, mTextFragmentOne);fragmentTransaction.addToBackStack(null);fragmentTransaction.commit();}

Demo:

  完整的例子项目:https://github.com/mengdd/HelloTransactionAnimations

原文:http://www.cnblogs.com/mengdd/p/3494041.html

转载于:https://www.cnblogs.com/veins/p/3730966.html

Android Activity和Fragment的转场动画相关推荐

  1. android activity跳转多次闪退_Android实现Activity和Fragment的跳转动画

    1.使用overridePendingTransition方法实现Activity跳转动画 botton_in <?xml version="1.0" encoding=&q ...

  2. fragment 淡入淡出_Activity和Fragment的转场动画

    Activity设置转场动画需要在startActivity和finish之后,意为给开启新视图或关闭旧视图添加转场动画. 这是Acitivity通过overridePending方法,设置进和出: ...

  3. activity改成fragment android,Activity转换为Fragment

    Activity中加载不同的fragment  / Fragment中加载不同的fragment 主Activity中加载(切换)多个fragment(也可以理解为activity 尽管Fragmen ...

  4. Android Activity与Fragment之间的传值概述

    题记 -- 执剑天涯,从你的点滴积累开始,所及之处,必精益求精. Activity 与 Fragment 之间进行数据传递是,在Activity中将要传递的数据封装在 Bundle中,然后在 Acti ...

  5. 为Fragment设置转场动画

    1.关键代码: Fragment 相关逻辑 FragmentManager fragmentManager = getSupportFragmentManager();FragmentTransact ...

  6. Android Activity和Fragment的生命周期图

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

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

  8. fragment 淡入淡出_Fragment之Fragmentation库(添加转场动画)

    部分内容来源于别人的总结,如有冒犯侵权,请告知! 邮箱:simoncqhy@163.com.谢谢!我只想做一个记录,以免自己以后出现不知道怎么解决. Fragmentation库:非常适合单Activ ...

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

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

最新文章

  1. windows清理_Windows系统高级清理工具,实力吊打360!
  2. ODS DWD DWS ADS 数仓分层
  3. 开发环境配置--Ubuntu+Qt4+OpenCV(三)
  4. 如何在Linux下统计高速网络中的流量
  5. 目标检测一卷到底之后,终于又有人给它挖了个新坑|CVPR2021 Oral
  6. 腾达路由器dns服务器未响应,腾达路由器的设置方法
  7. 用VB无窗口透明Usercontrol编写透明浮动按钮
  8. keyshot怎么批量渲染_怎样用keyshot 5.0快速渲染出高质量图
  9. 全国省市县行政区划SQL代码文件
  10. 华为性格面试的技巧方法
  11. 执行python manage.py celery -A HttpRunnerManager worker --loglevel=info 报错问题集锦
  12. arcgis js for JavaScript 4.X 移动轨迹动画
  13. Excel导出,简单易懂
  14. 10大好用的语音识别软件
  15. 瑞星防火墙导致系统运行缓慢的问题
  16. 【HBase】HBase phoenix 安装使用
  17. 后台获取前台传递参数为null和空字符串的区别,以及sql拼接之if判断
  18. Web开发day5:项目
  19. python pop() ,如何在Python的列表或数组中移除元素
  20. 求y=sinx反函数的导数

热门文章

  1. 网络营销专员浅析网络营销过程中如何做好网站权重流量的优化
  2. 网站优化四大优势必须了解
  3. 疫情之下的网站优化该怎样进行?
  4. vnc用户名 查看linux_linux 查看vnc服务器
  5. mysql 虚表_mysql虚拟表
  6. 开发日记-20190710 关键词 读书笔记 《Perl语言入门》Day 7
  7. LINUX 操作记录到syslog,并发送到syslog服务器上
  8. numpy 按照指定字段排序
  9. mysql检查备份数据脚本并在zabbix上告警
  10. mybatis面试题讲解1