在3.0及以后只需要在XML中设置animateLayoutChanges="true"或者在Java代码中添加一个LayoutTransition对象即可实现任何ViewGroup布局改变时的动画。

目前系统中支持以下5种状态变化,应用程序可以为下面任意一种状态设置自定义动画:

1、APPEARING:容器中出现一个视图。

2、DISAPPEARING:容器中消失一个视图。

3、CHANGING:布局改变导致某个视图随之改变,例如调整大小,但不包括添加或者移除视图。

4、CHANGE_APPEARING:其他视图的出现导致某个视图改变。

5、CHANGE_DISAPPEARING:其他视图的消失导致某个视图改变。

下面举个实例,动态的向容器中添加和移除组件来实现布局变化得动画效果,XML如下:

android:layout_width="match_parent"

android:layout_height="match_parent"

android:orientation="vertical" >

android:id="@+id/main_btn"

android:layout_width="match_parent"

android:layout_height="wrap_content"

android:text="添加控件"/>

android:layout_width="match_parent"

android:layout_height="match_parent"

android:animateLayoutChanges="true"

android:id="@+id/main_container"

android:orientation="vertical"/>

注意在容器中设置了属性android:animateLayoutChanges="true",这个时候容器布局改变就已经有动画效果了,只不过是系统默认的,比如添加一个按钮会出现渐入动画,移除一个按钮会出现渐出动画,而周围的视图则会平滑地填充移除时的空隙。

但是如果我们想自定义这些效果怎么办呢?使用LayoutTransition。代码如下:

public class MainActivity extends Activity implements OnClickListener {

private LinearLayout mContainer;

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.main);

mContainer = (LinearLayout) findViewById(R.id.main_container);

LayoutTransition transition = new LayoutTransition();

mContainer.setLayoutTransition(transition);

findViewById(R.id.main_btn).setOnClickListener(this);

//使用翻转进入的动画代替默认动画

Animator appearAnim = ObjectAnimator

.ofFloat(null, "rotationY", 90f, 0)

.setDuration(transition.getDuration(LayoutTransition.APPEARING));

transition.setAnimator(LayoutTransition.APPEARING, appearAnim);

//使用翻转消失的动画代替默认动画

Animator disappearAnim = ObjectAnimator.ofFloat(null, "rotationX", 0,

90f).setDuration(

transition.getDuration(LayoutTransition.DISAPPEARING));

transition.setAnimator(LayoutTransition.DISAPPEARING, disappearAnim);

//使用滑动动画代替默认布局改变的动画

//这个动画会让视图滑动进入并短暂地缩小一半,具有平滑和缩放的效果

PropertyValuesHolder pvhSlide = PropertyValuesHolder.ofFloat("y", 0, 1);

PropertyValuesHolder pvhScaleY = PropertyValuesHolder.ofFloat("scaleY",

1f, 0.5f, 1f);

PropertyValuesHolder pvhScaleX = PropertyValuesHolder.ofFloat("scaleX",

1f, 0.5f, 1f);

//这里将上面三个动画综合

Animator changingDisappearAnim = ObjectAnimator.ofPropertyValuesHolder(

this, pvhSlide, pvhScaleY, pvhScaleX);

changingDisappearAnim.setDuration(transition.getDuration(LayoutTransition.CHANGE_DISAPPEARING));

transition.setAnimator(LayoutTransition.CHANGE_DISAPPEARING,

changingDisappearAnim);

}

@Override

public void onClick(View view) {

Button btn = new Button(this);

btn.setText("移除自己");

btn.setOnClickListener(new OnClickListener() {

@Override

public void onClick(View v) {

mContainer.removeView(v);

}

});

mContainer.addView(btn, new LinearLayout.LayoutParams(

LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT));

}

mContainer.setLayoutTransition(transition)为容器绑定一个LayoutTransition对象。接下来为transition设置了几种系统支持类型的布局改变时动画,动画时间都是取系统默认的时间,另外关于属性动画ObjectAnimator的使用,可以参照guolin大神的博客Android

最后一个过渡动画稍微有点复杂,需要创建一个动画,让周围的视图可以平滑地运动到新的位置上,滑动的同时会产生缩放效果。为了实现这个效果,需要通过PropertyValuesHolder实例创建一个ObjectAnimator来设置一些属性。动画的每个属性都是单独的PropertyValuesHolder,并且通过ofPropertyValuesHolder工厂方法添加到Animator对象中。最后这个过渡动画使移除的按钮下面的所有按钮向上滑动到刚刚空出的位置,同时稍微收缩一下。

android 布局变化动画效果,使用LayoutTransition实现布局变化时的动画相关推荐

  1. html动画效果代码模板,7款绚丽的jQuery/HTML5动画及源码

    jQuery是一款非常流行的JavaScript框架,利用jQuery,我们可以制作简单的动画效果,但是结合HTML5,这样的动画效果就会变得更加出彩.本文分享了7款jQuery结合HTML5的动画以 ...

  2. CSS animation动画效果实现精灵图、雪碧图动画,多动画应用

    CSS animation动画效果实现精灵图.雪碧图动画,多动画应用 素材下载 分析图片动画过程 图片可以分成4*6=24 小图片也就是24帧 方法1 可以把每一行成一个动画,所以可以拆分4个动画 方 ...

  3. android ui动画效果怎么做,AndroidUI 布局动画-为列表添加布局动画效果

    新建一个Android project ,使MainActivity 继承自 ListActivity: public class MainActivity extends ListActivity ...

  4. android 三维动画效果,9款令人惊叹的HTML5 3D动画应用

    原标题:9款令人惊叹的HTML5 3D动画应用 之前我们已经向大家分享了很多HTML5动画应用了,大部分都非常炫酷,也有一小部分是很实用的.今天我们要向各位HTML5动画爱好者介绍更多的HTML5 3 ...

  5. android京东加入购物车效果,京东360buy 手机项目的“加入购物车”动画效果研究...

    JingDong: When it render the "search result" page ,(every item has the picture) ,it will b ...

  6. android麦克风监听动画效果,微信小程序实现录音时的麦克风动画效果实例

    前言 这个简单的麦克风demo的创意是来源于"包你说"中的录音效果,实现的方式其实也并不难,但对于小程序中的简易动画的使用的确很实用. 效果 先来看个demo,gif帧数比较低,实 ...

  7. html实现图片加载动画效果,HTML5+javascript实现图片加载进度动画效果

    在网上找资料的时候,看到网上有图片加载进度的效果,手痒就自己也写了一个. 图片加载完后,隐藏loading效果. 想看加载效果,请ctrel+F5强制刷新或者清理缓存. 效果预览: 0% 代码如下: ...

  8. html数字动画效果,原生JavaScript代码实现数字更新的动画效果

    前言 在很多数据统计类型网站的首页,经常会看到数据在动态的更新,而且会以动画的效果呈现. 今天这篇文章我们就来看看这个效果如何实现吧. 文中的代码已经放到github上了,感兴趣的同学可以自取.htt ...

  9. 【幻灯片动画效果制作】Focusky教程 | 设置录音和动画同步

    通过添加多媒体效果和动画效果,您的演示内容将会更加生动.丰富.Focusky(以下简称为"FS软件") 支持轻松设置录音和动画同步,让您的展示更精彩! 两种方法设置录音和动画同步, ...

最新文章

  1. springmvc 拦截器、国际化、验证
  2. pycharm flask 设置端口号和开启debug
  3. DHCP服务器在企业里的各种应用方案
  4. 微信开发七(配置js-SDK,步骤2)
  5. [译] Vue: scoped 样式与 CSS Module 对比
  6. 用VS2008做博客¥(^_^)¥
  7. Java高级编程之URL处理
  8. Wannafly交流赛1: D. 白兔的字符串(随机+EXKMP)
  9. break lab c语言,C语言printf详解
  10. Samba共享目录的多用户权限设置案例
  11. php 进销存 源代码_PHP 进销存源码
  12. 使用命令查看linux编码,如何利用命令查看linux 系统汉字编码
  13. 虚函数表构成、地址详细说明
  14. 00002-微信小游戏--触摸事件
  15. IDEA 中如何完成 Git 版本回退?
  16. 疯狂模渲大师链接永久是最新版|怎么安装客户端并激活素材库联系作者加载自营专属素材扩展包高效使用超一流辅助插件脚本工具的步骤教程?...
  17. python中plt.cm.Paired
  18. MVNO忽略国内漫游(ignore national roaming)
  19. 说说android端实现Airplay多屏互动(一)
  20. 2022张宇考研基础30讲 线性代数 第二讲 矩阵

热门文章

  1. Financial Managemen
  2. 补遗篇之volatile
  3. container_of宏定义分析---linux内核
  4. idea解决lombok注解失效问题
  5. Android 中View仅仅能接收到ACTION_DOWN无法接收ACTION_MOVE和ACTION_UP解决的方法
  6. 解决Docker容器时区不一致的问题
  7. java学习中,异常和错误的简介、捕获异常、抛出异常、自定义异常、finally关键字(java 学习中的小记录)
  8. 【网友投稿】大家都在谈裁员,我却默默干倒了3家公司!
  9. BST:Transformer在推荐领域的应用
  10. 简单代码大全_VBA爱好者请进:VBA代码宝概述