Pro Android学习笔记(四二):Fragment(7):切换效果
来源:互联网 发布:网络熟女桃花姐 编辑:程序博客网 时间:2024/05/22 17:37
利用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依次发生。
<?xml version="1.0" encoding="utf-8"?><set xmlns:android="http://schemas.android.com/apk/res/android" ><objectAnimator android:interpolator="@android:interpolator/accelerate_cubic" android:valueFrom="1" android:valueTo="0" android:valueType="floatType" android:propertyName="alpha" android:duration="1000"/> <objectAnimator android:interpolator="@android:interpolator/accelerate_cubic" android:valueFrom="0" android:valueTo="1280" android:valueType="floatType" android:propertyName="Y" android:duration="1000"/></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):切换效果
- Pro Android学习笔记(四二):Fragment(7):切换效果
- Pro Android学习笔记(四一):Fragment(6):数据保留
- Pro Android学习笔记(四三):Fragment(8):再谈Transaction和管理器
- Pro Android学习笔记(二四):用户界面和控制(12):Style和Theme
- Android Fragment学习笔记(二)
- Android Fragment学习笔记(二)
- Android Fragment学习笔记(二)
- Android学习笔记四(二) 为Activity添加Fragment
- Pro Android学习笔记(三六):Fragment(1):基本概念
- Pro Android学习笔记(三七):Fragment(2):基础小例子
- Pro Android学习笔记(三八):Fragment(3):基础小例子-续
- Pro Android学习笔记(三九):Fragment(4):基础小例子-续
- Pro Android学习笔记(四十):Fragment(5):适应不同屏幕或排版
- Android学习笔记(四)碎片(Fragment)
- Pro Git学习笔记(二)
- Pro Android学习笔记(四四):Dialog(1):触发Dialog
- Pro Android学习笔记(一一二):2D动画(7):Property Animation(上)
- 消息处理模型
- South - 在 Django 中 Migrate Database
- applicationcontext.xml里面导入别的xml的方法<import resource="/bean.xml"/>(一)
- 安装Oracle 11g R2 For Win7 旗舰版
- java log
- Pro Android学习笔记(四二):Fragment(7):切换效果
- 解决:an error occurred while processing your request 访问开发者网站报错
- D-BUS基础知识
- 使用QueryPerformanceFrequency 计算程序执行时间
- 创建模式
- Linux下的sudo及其配置文件/etc/sudoers的详细配置说明
- asp.net网站打包(包含数据库建库脚本 oracle) 成安装程序 exe 或msi
- SELinux是什么意思,如何关闭?Linux下的防火墙用什么命令打开?
- ffmpeg开发中出现的问题(七)