目录(?)[-]

  1. 利用setTransition
  2. 利用setCustomAnimations
    1. 通过ObjectAnimator自定义动态效果
    2. 程序代码的编写

利用fragment transaction进行切换,很方便提供切换的效果。

利用setTransition()

Pro Android学习笔记(三九):Fragment(4):基础小例子-续的“Step 4:实现showDetail(int index),如何管理fragment”中,介绍了如何在容器FrameLayout中通过fragment管理器,利用fragment transaction实现fragment切换的实现。

通过setTransition()我们可以设置有限几个切换效果,代码如下:

protected void addFragmentToStack(int index){  
        DetailFragment detail = DetailFragment.newInstance(index);
        FragmentTransaction ft = getFragmentManager().beginTransaction(); 
        ft.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_FADE); 
        ft.replace(R.id.details, detail);        
        ft.addToBackStack("detail"); 
        ft.commit(); 
    }

代码设置的fade(渐变)效果。

利用setCustomAnimations()

通过ObjectAnimator自定义动态效果

在res/animator中设置两个动态效果,slide_in_left.xml如下。

<?xml version="1.0" encoding="utf-8"?> 
<objectAnimator xmlns:android="http://schemas.android.com/apk/res/android"
    android:interpolator="@android:interpolator/accelerate_decelerate" 
    android:valueFrom="-1280" 
    android:valueTo="0" 
    android:valueType="floatType" 
    android:propertyName="X" 
    android:duration="2000"  />

实现自定义动画的类是ObjectAnimator,不仅用于fragment,也可用于view。在xml中,定义了从“from”状态到“to”状态,时间间隔为duration(毫秒),所执行的变化规则称为interpolator。最简单的interpolator是linear,即@android:interpolator/linear,从状态From到to状态是均匀变化。缺省的interpolator是accelerate_decelerate,如本例,在状态变化中先是加速,后是减速,使用户视觉上平滑过渡。此外还有@android:interpolator/bounce为弹跳方式。系统提供的方式可以在源代码/data/res/interpolator中查看。android:propertyName用于动画的维度,在本例中X表示横向,根view的setX()中的参数是float,所以设置valueType为floatType。我们设置可以设置自己的维度。From设置为-1280,因为这个值对于终端设备而言,-1280个像素位可以确保从不可视的位置移入。如果我们没有设置From,系统会根据当前值来设定初始值。

另一个动态效果文件slide_out_right.xml如下:

<?xml version="1.0" encoding="utf-8"?> 
<objectAnimator xmlns:android="http://schemas.android.com/apk/res/android"
    android:interpolator="@android:interpolator/accelerate_decelerate" 
    android:valueFrom="0" 
    android:valueTo="1280" 
    android:valueType="floatType" 
    android:propertyName="X" 
    android:duration="2000" />

在看看其他动态效果。如要设置淡入淡出,维度是对象的透明度,即android:propertyName="alpha",淡入是from(0,不可视)到to(1),淡出是from(1)到to(0)。object animator会找到fragment的root view,然后不断地调用setAlpha()方法,来改变透明度,调用的频率和改变的值由interpolator来决定。

如果我们要在两个或者两个以上的维度设置变化,可以使用set tag,对应为Android的AnimatorSet类,下面的例子同时设置向下和淡出效果。set有一个属性android:ordering,缺省为together,即各个维度的变化同时发生,还可以设置为sequentially依次发生。

  1. <?xml version="1.0" encoding="utf-8"?>
  2. <set xmlns:android="http://schemas.android.com/apk/res/android" >
  3. <objectAnimator android:interpolator="@android:interpolator/accelerate_cubic"
  4. android:valueFrom="1"
  5. android:valueTo="0"
  6. android:valueType="floatType"
  7. android:propertyName="alpha"
  8. android:duration="1000"/>
  9. <objectAnimator android:interpolator="@android:interpolator/accelerate_cubic"
  10. android:valueFrom="0"
  11. android:valueTo="1280"
  12. android:valueType="floatType"
  13. android:propertyName="Y"
  14. android:duration="1000"/>
  15. </set>

程序代码的编写

代码如下:

protected void addFragmentToStack(int index){  
    DetailFragment detail = DetailFragment.newInstance(index);
    FragmentTransaction ft = getFragmentManager().beginTransaction(); 
    //setCustomAnimations()必须位于replace()之前,否则效果不起所中。它的两个参数分别为enter,exit的效果。系统目前提供两个效果,分别为android.R.animator.fade_in和android.R.animator.fade_out
    ft.setCustomAnimations(R.animator.slide_in_left,R.animator.slide_out_right); 
    ft.addToBackStack("detail");
    ft.replace(R.id.details,"detail"); 
    ft.commit(); 
}

注意,进入和退出的两个操作是同时进行的,并非先执行完exit再执行enter。

本博文涉及的例子代码,可以在Pro Android学习:Fragment中下载。

相关链接: 我的Android开发相关文章

【转】 Pro Android学习笔记(四二):Fragment(7):切换效果的更多相关文章

  1. 【转】 Pro Android学习笔记(二二):用户界面和控制(10):自定义Adapter

    目录(?)[-] 设计Adapter的布局 代码部分 Activity的代码 MyAdapter的代码数据源和构造函数 MyAdapter的代码实现自定义的adapter MyAdapter的代码继续 ...

  2. 【转】 Pro Android学习笔记(二九):用户界面和控制(17):include和merge

    目录(?)[-] xml控件代码重用include xml控件代码重用merge 横屏和竖屏landsacpe portrait xml控件代码重用:include 如果我们定义一个控件,需要在不同的 ...

  3. 【转】Pro Android学习笔记(二):开发环境:基础概念、连接真实设备、生命周期

    在Android学习笔记(二):安装环境中已经有相应的内容.看看何为新.这是在source网站上的Android架构图,和标准图没有区别,只是这张图颜色好看多了,录之.本笔记主要讲述Android开发 ...

  4. 【转】Pro Android学习笔记(二五):用户界面和控制(13):LinearLayout和TableLayout

    目录(?)[-] 布局Layout 线性布局LinearLayout 表格布局TableLayout 布局Layout Layout是容器,用于对所包含的view进行布局.layout是view的子类 ...

  5. 【转】 Pro Android学习笔记(二十):用户界面和控制(8):GridView和Spinner

    目录(?)[-] GridView Spinner GridView GridView是网格状布局,如图所示.在了解ListView后,很容易了解GridView.下面是例子的XML文件. <? ...

  6. 【转】Pro Android学习笔记(二四):用户界面和控制(12):Style和Theme

    目录(?)[-] 静态格式 代码中设定 Style Theme 静态格式 在res/values中设置静态的Style,在资源中设置静态Style可使用的HTML格式有<i> <u& ...

  7. 【转】Pro Android学习笔记(二六):用户界面和控制(14):RelativeLayout

    相对布局:RelativeLayout RelativeLayout也是非常常用的布局,能够精确对控件的位置进行网格对齐,可以设置在控件与其他控件的相对位置,以及控件在容器中的位置.缺省控件的位置为最 ...

  8. 【转】 Pro Android学习笔记(二一):用户界面和控制(9):Gallery和SimpleAdapter

    Gallery画廊式控件,如图所示,但是在API level 16,也即Android 4.1,被deprecated,可以使用HorizontableScroolView和ViewPager.但是后 ...

  9. 【转】 Pro Android学习笔记(五二):ActionBar(5):list模式

    可以在action bar中加入spinner的下来菜单,有关spinner,可以参考Pro Android学习笔记(二十):用户界面和控制(8):GridView和Spinner. list的样式和 ...

随机推荐

  1. JS饼状图表数据分布插件

    在线演示 本地下载

  2. 日期类(C++实现)

    //-------------------------------------------------------------------------- /* **功能:实现日期的简单操作 ** ** ...

  3. java访问控制---java编程语言

  4. Java强引用、 软引用、 弱引用、虚引用

    Java强引用. 软引用. 弱引用.虚引用 2012-07-09     1.对象的强.软.弱和虚引用    在JDK 1.2以前的版本中,若一个对象不被任何变量引用,那么程序就无法再使用这个对象.也 ...

  5. WCF REST开启Cors 解决 No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'http://localhost' is therefore not allowed access. The response had HTTP status code 405.

    现象: 编写了REST接口: [ServiceContract] public interface IService1 { [OperationContract] [WebInvoke(UriTemp ...

  6. electron—Chromium有酒,Node有肉

    谷歌V8引擎的出现,Node.js的诞生注定要把开发模式“搅乱”. 基于云应用,服务化,定制化的应用需求不断增加后使得传统的winform开发空间越来越小,而原来做前端的空间越来越大,Node.js ...

  7. JS正则表达式,记录自己所学所用的内容

    还没接触正则表达式感觉确实有那么点难度,但接触到后自己琢磨了几天也没发现那么难. 现在教教刚学的或者还没接触正则表达式的同学们入入门,一起学习. 正则表达式基本语法 ***************** ...

  8. BZOJ 2058 [Usaco2010 Nov]Cow Photographs:逆序对【环上最小逆序对】

    题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=2058 题意: 给你一个由1~n组成的排列,首尾相接围成一个环. 你可以任意次交换其中两个相 ...

  9. js 禁止用户使用Ctrl+鼠标滚轮缩放网页

    为什么会有人会使用ctrl+鼠标滚轮缩放网页?坚决禁止! <html> <head> <title>测试</title> <script lang ...

  10. php构造函数的继承方法

    第一种情况:子类没有定义构造函数时,默认继承.例子: ? 1 2 3 4 5 6 7 8 9 10 11 12 <?php class A{  public $name;  function _ ...