1.layout切换动画

代码:

本示例是fragment切换.在它的oncreateView中

  1. public class LayoutAnimationFrgmt extends Fragment {
  2. <span style="white-space:pre"> </span>@Override
  3. <span style="white-space:pre"> </span>public View onCreateView(LayoutInflater inflater, ViewGroup container,
  4. <span style="white-space:pre"> </span>Bundle savedInstanceState) {
  5. <span style="white-space:pre"> </span>super.onCreateView(inflater, container, savedInstanceState);
  6. <span style="white-space:pre"> </span>// TODO Auto-generated method stub
  7. <span style="white-space:pre"> </span>RelativeLayout rl = (RelativeLayout) inflater.inflate(R.layout.fragment_layout_animation, container,
  8. <span style="white-space:pre"> </span>false);
  9. <span style="white-space:pre"> </span>
  10. <span style="white-space:pre"> </span>ScaleAnimation sa = new ScaleAnimation(0,1,0,1);
  11. <span style="white-space:pre"> </span>sa.setDuration(350);
  12. <span style="white-space:pre"> </span>LayoutAnimationController lac = new LayoutAnimationController(sa,0.5f);//0.5f是第后续控件的间隔 
  13. <span style="white-space:pre"> </span>lac.setOrder(LayoutAnimationController.ORDER_REVERSE);//设置动画方向,ORDER_REVERSE是反向
  14. <span style="white-space:pre"> </span>rl.setLayoutAnimation(lac);
  15.  
  16. <span style="white-space:pre"> </span>return rl;
  17. <span style="white-space:pre"> </span>}
  18. }

2.layout内容变化时的动画

2.1 在相应的layout的xml里 android:animateLayoutChanges="true"
  1. <?xml version="1.0" encoding="utf-8"?>
  2. <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
  3. android:layout_width="match_parent"
  4. android:layout_height="match_parent"
  5. android:orientation="vertical"
  6. android:id="@+id/fragment_layout_changed_animation"
  7. <span style="color:#ff0000;">android:animateLayoutChanges="true"</span>>
  8. <TextView
  9. android:id="@+id/flatv"
  10. android:layout_width="wrap_content"
  11. android:layout_height="wrap_content"
  12. android:layout_alignParentTop="true"
  13. android:layout_centerHorizontal="true"
  14. android:text="@string/add_button" />
  15. </RelativeLayout>

2.2 自定义layoutChanged动画

  1. public class LayoutChangedAnimationFrgmt extends Fragment implements OnClickListener {
  2. private RelativeLayout rl;
  3. private TextView tv;
  4. LayoutTransition mTransition;
  5. @Override
  6. public View onCreateView(LayoutInflater inflater, ViewGroup container,
  7. Bundle savedInstanceState) {
  8. // TODO Auto-generated method stub
  9. super.onCreateView(inflater, container, savedInstanceState);
  10. rl = (RelativeLayout) inflater.inflate(R.layout.fragment_layout_changed_animation, container,false);
  11. mTransition = new LayoutTransition();
  12. rl.setLayoutTransition(mTransition);
  13. <span style="color:#ff0000;">setupCustomAnimations</span>();//初始化动画
  14. tv = (TextView) rl.findViewById(R.id.flatv);
  15. return rl;
  16. }
  17. // LayoutTransition 生成自定义动画
  18. private void <span style="color:#ff0000;">setupCustomAnimations</span>() {
  19. // 动画:CHANGE_APPEARING
  20. // Changing while Adding
  21. PropertyValuesHolder pvhLeft = PropertyValuesHolder.ofInt("left", 0, 1);
  22. PropertyValuesHolder pvhTop = PropertyValuesHolder.ofInt("top", 0, 1);
  23. PropertyValuesHolder pvhRight = PropertyValuesHolder.ofInt("right", 0,
  24. 1);
  25. PropertyValuesHolder pvhBottom = PropertyValuesHolder.ofInt("bottom",
  26. 0, 1);
  27. PropertyValuesHolder pvhScaleX = PropertyValuesHolder.ofFloat("scaleX",
  28. 1f, 0f, 1f);
  29. PropertyValuesHolder pvhScaleY = PropertyValuesHolder.ofFloat("scaleY",
  30. 1f, 0f, 1f);
  31.  
  32. final ObjectAnimator changeIn = ObjectAnimator.ofPropertyValuesHolder(
  33. this, pvhLeft, pvhTop, pvhRight, pvhBottom, pvhScaleX,
  34. pvhScaleY).setDuration(
  35. mTransition.getDuration(LayoutTransition.CHANGE_APPEARING));
  36. mTransition.setAnimator(LayoutTransition.CHANGE_APPEARING, changeIn);
  37. changeIn.addListener(new AnimatorListenerAdapter() {
  38. public void onAnimationEnd(Animator anim) {
  39. View view = (View) ((ObjectAnimator) anim).getTarget();
  40. // View也支持此种动画执行方式了
  41. view.setScaleX(1f);
  42. view.setScaleY(1f);
  43. }
  44. });
  45.  
  46. // 动画:CHANGE_DISAPPEARING
  47. // Changing while Removing
  48. Keyframe kf0 = Keyframe.ofFloat(0f, 0f);
  49. Keyframe kf1 = Keyframe.ofFloat(.9999f, 360f);
  50. Keyframe kf2 = Keyframe.ofFloat(1f, 0f);
  51. PropertyValuesHolder pvhRotation = PropertyValuesHolder.ofKeyframe(
  52. "rotation", kf0, kf1, kf2);
  53. final ObjectAnimator changeOut = ObjectAnimator
  54. .ofPropertyValuesHolder(this, pvhLeft, pvhTop, pvhRight,
  55. pvhBottom, pvhRotation)
  56. .setDuration(
  57. mTransition
  58. .getDuration(LayoutTransition.CHANGE_DISAPPEARING));
  59. mTransition
  60. .setAnimator(LayoutTransition.CHANGE_DISAPPEARING, changeOut);
  61. changeOut.addListener(new AnimatorListenerAdapter() {
  62. public void onAnimationEnd(Animator anim) {
  63. View view = (View) ((ObjectAnimator) anim).getTarget();
  64. view.setRotation(0f);
  65. }
  66. });
  67.  
  68. // 动画:APPEARING
  69. // Adding
  70. ObjectAnimator animIn = ObjectAnimator.ofFloat(null, "rotationY", 90f,
  71. 0f).setDuration(
  72. mTransition.getDuration(LayoutTransition.APPEARING));
  73. mTransition.setAnimator(LayoutTransition.APPEARING, animIn);
  74. animIn.addListener(new AnimatorListenerAdapter() {
  75. public void onAnimationEnd(Animator anim) {
  76. View view = (View) ((ObjectAnimator) anim).getTarget();
  77. view.setRotationY(0f);
  78. }
  79. });
  80.  
  81. // 动画:DISAPPEARING
  82. // Removing
  83. ObjectAnimator animOut = ObjectAnimator.ofFloat(null, "rotationX", 0f,
  84. 90f).setDuration(
  85. mTransition.getDuration(LayoutTransition.DISAPPEARING));
  86. mTransition.setAnimator(LayoutTransition.DISAPPEARING, animOut);
  87. animOut.addListener(new AnimatorListenerAdapter() {
  88. public void onAnimationEnd(Animator anim) {
  89. View view = (View) ((ObjectAnimator) anim).getTarget();
  90. view.setRotationX(0f);
  91. }
  92. });
  93.  
  94. }//其它方法略...
  95. }


3.ListViewLayout的动画(用代码和xml配置两个方法实现)

3.1 代码实现
  1. public class LayoutAnimInListViewCodeAty extends ListActivity {
  2. private ArrayAdapter<String> adapter;
  3. private String [] datas;
  4. private LayoutAnimationController lac;
  5. private TranslateAnimation ta;
  6. private ScaleAnimation sa;
  7. @Override
  8. protected void onCreate(Bundle savedInstanceState) {
  9. super.onCreate(savedInstanceState);
  10.  
  11. // setContentView(R.layout.activity_layout_list_view);ListActivity不用它.
  12.  
  13. datas = new String[]{"hei","bai","hooo","lvv","lann"};
  14.  
  15. adapter = new ArrayAdapter<String>(this,android.R.layout.simple_list_item_1,datas);
  16.  
  17. setListAdapter(adapter);
  18.  
  19. ta = new TranslateAnimation(0,1,0,1);
  20.  
  21. sa = new ScaleAnimation(0,1,0,1);
  22. sa.setDuration(1000);
  23.  
  24. // lac = new LayoutAnimationController(ta,0.5f);
  25. lac = new LayoutAnimationController(sa,0.5f);
  26. getListView().setLayoutAnimation(lac);
  27. }
  28. <span style="white-space:pre"> </span>//其它略...
  29. }

3.2 xmls配置文件实现

代码部分:
  1. public class LayoutAnimInListViewXmlAty extends ListActivity {
  2. private ArrayAdapter<String> adapter;
  3. private String[] datas;
  4.  
  5. @Override
  6. protected void onCreate(Bundle savedInstanceState) {
  7. super.onCreate(savedInstanceState);
  8. setContentView(R.layout.activity_layout_anim_in_list_xml_aty);
  9. datas = new String[] { "hei", "bai", "hooo", "lvv", "lann" };
  10.  
  11. adapter = new ArrayAdapter<String>(this,
  12. android.R.layout.simple_list_item_1, datas);
  13.  
  14. setListAdapter(adapter);
  15. }
  16.  
  17. @Override

aty对应的布局xml: 注意 android:id="@android:id/list" 是必需


  1. <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
  2. xmlns:tools="http://schemas.android.com/tools"
  3. android:layout_width="match_parent"
  4. android:layout_height="match_parent"
  5. android:paddingBottom="@dimen/activity_vertical_margin"
  6. android:paddingLeft="@dimen/activity_horizontal_margin"
  7. android:paddingRight="@dimen/activity_horizontal_margin"
  8. android:paddingTop="@dimen/activity_vertical_margin"
  9. tools:context="com.example.layoutanimation.LayoutAnimInListViewXmlAty" >
  10.  
  11. <ListView
  12. <span style="font-size:24px;color:#ff0000;">android:id="@android:id/list"</span>
  13. android:layout_width="match_parent"
  14. android:layout_height="match_parent"
  15. <span style="color:#ff0000;">android:layoutAnimation="@anim/listview_anim"</span> >
  16. </ListView>
  17. </RelativeLayout>

layout动画配置文件:listview_anim.xml

  1. <?xml version="1.0" encoding="utf-8"?>
  2. <layoutAnimation xmlns:android="http://schemas.android.com/apk/res/android"
  3. android:animation="@anim/scale_xml_anim"
  4. android:delay="0.5" >
  5.  
  6. </layoutAnimation>

具体动画效果配置文件:scale_xml_anim.xml

  1. <?xml version="1.0" encoding="utf-8"?>
  2. <scale xmlns:android="http://schemas.android.com/apk/res/android"
  3. android:duration="1000"
  4. android:fromXScale="0"
  5. android:fromYScale="0"
  6. android:toXScale="1"
  7. android:toYScale="1" >
  8.  
  9. </scale>







android动画(3)layout动画,layoutChanged动画及算定义它,ListViewActivity的Layout动画(代码和xm配置两种实现l)的更多相关文章

  1. Android中BroadcastReceiver的两种注册方式(静态和动态)详解

    今天我们一起来探讨下安卓中BroadcastReceiver组件以及详细分析下它的两种注册方式. BroadcastReceiver也就是"广播接收者"的意思,顾名思义,它就是用来 ...

  2. android中的OnClickListener两种实现方式

    android的activity点击事件中,通过OnClickListener来实现,要实现点击事件有两种方式 1.通过定义一个OnClickListener的内部类来实现 The example b ...

  3. Android仿腾讯手机管家实现桌面悬浮窗小火箭发射的动画效果

    功能分析: 1.小火箭游离在activity之外,不依附于任何activity,不管activity是否开启,不影响小火箭的代码逻辑,所以小火箭的代码逻辑是要写在服务中: 2.小火箭挂载在手机窗体之上 ...

  4. Android动画之仿美团加载数据等待时,小人奔跑进度动画对话框(附顺丰快递员奔跑效果)

    Android动画之仿美团加载数据等待时,小人奔跑进度动画对话框(附顺丰快递员奔跑效果) 首句依然是那句老话,你懂得! finddreams :(http://blog.csdn.net/finddr ...

  5. android位移动画的两种实现方式

    在android开发,我们会常常使用到位移动画,普通情况下位移动画有两种实现方式.一种是直接通过java代码去实现,第二种是通过配置文件实现动画,以下是两种动画的基本是用法: 纯Java代码实现: / ...

  6. android旋转动画的两种实现方式

    在android开发,我们会常常使用到旋转动画,普通情况下旋转动画有两种实现方式,一种是直接通过java代码去实现,第二种是通过配置文件实现动画.以下是两种动画的基本是用法: 纯Java代码实现: / ...

  7. Android系统移植与调试之------->如何修改开机动画的两种方式剖析

    首先,我们先来分析一下源码: frameworks/base/cmds/bootanimation/BootAnimation.cpp 首先看一下定义的常量: BootAnimation::ready ...

  8. android动画(1)各种动画属性表,简单代码,xml配置

    1.动画的属性表 1.1 常用属性 它们可以通过代码setXXX,getXXX,也可在xml中配置. 属性[类型] 功能 备注 Duration[long] 属性为动画持续时间 时间以毫秒为单位 fi ...

  9. android缩放动画的两种实现方法

    在android开发.我们会常常使用到缩放动画,普通情况下缩放动画有两种实现方式.一种是直接通过java代码去实现,第二种是通过配置文件实现动画,以下是两种动画的基本是用法: Java代码实现: // ...

随机推荐

  1. 火焰灯menu修改之后,可以实现数遍点击小方块停留在当前页面

    下载地址:http://www.cnblogs.com/RightDear/admin/Files.aspx 调用方式,传入一个参数 首页传入0,关于联盟传入1,产品展示传入2,依此类推 <sc ...

  2. yum lock

    状态 :睡眠中,进程ID:18439Another app is currently holding the yum lock; waiting for it to exit... 另一个应用程序是: ...

  3. 开启 J2EE(六)— Servlet之Filter具体解释及乱码处理实例

    版权声明:本文为博主原创文章,未经博主同意不得转载. https://blog.csdn.net/akkzhjj/article/details/36471477 定义和功能 Filter:过滤器,它 ...

  4. vscode——配置终端集成bash和cmd

    前言 配置后bash和cmd是集成的,输入bash回车则进入bash,输入cmd回车则进入cmd 步骤 首先肯定是需要打开我们的vscode咯~ 进入终端设置 配置shell路径 根据自己的系统来复制 ...

  5. Bug不能重现的原因分析及其对策

    摘 要:本文简要分析了无法重现的Bug的可能产生原因,包括环境不一致.缺少最准确的描述和浏览器的不当设置.针对这些原因,本文给出了相应的对策.通过这些措施,可以重现许多以前认为不可重现的Bug.    ...

  6. Intel® Media SDK Media Samples Linux 学习笔记(转)

    最近折腾intel media sdk,主要硬件平台是在HD4600的核显上进行测试,intel media sdk是intel提供的一种基于核显的硬件编解码的解决方案,之前已经有使用ffmpeg进行 ...

  7. UVA-10827(前缀和降维)

    题意: 给一个n*n的正方形,第一行和最后一行粘在一块,第一列和最后一列粘在一块,求这个环面上的最大的子矩形; 思路: 直接暴力是O(n^6)的复杂度,可以把前缀和求出来,这样就可以只用枚举四条边界就 ...

  8. IOS AutoLayout 代码实现约束—VFL

    在autolayout下,尽管使用IB来拖放控件,但仍然避免不了用代码来创建控件,这是约束需要代码来实现. IOS 提供了两种添加约束的方法 第一种: +(instancetype)constrain ...

  9. Superprime Rib

    链接 分析:满足题目条件的必然是1,2,3,5,7,9这几个数字的组合,DFS按位进行即可,边组合边判断是否合法. /* PROB:sprime ID:wanghan LANG:C++ */ #inc ...

  10. NOIP2004题解

    传送门 考查题型 dp 搜索 模拟 数据结构堆 贪心 T1   津津的储蓄计划 题目描述 津津的零花钱一直都是自己管理.每个月的月初妈妈给津津300元钱,津津会预算这个月的花销,并且总能做到实际花销和 ...