一、系统自带简单实现

自带的效果图:
iShot2020-12-08 22.56.32.gif
实现方法:
在布局文件中加上android:animateLayoutChanges=”true”, 即可,如下:

  1. <LinearLayout
  2. android:id="@+id/ll_layout_one"
  3. android:layout_width="match_parent"
  4. android:layout_height="wrap_content"
  5. android:animateLayoutChanges="true">
  6. <Button
  7. android:layout_width="wrap_content"
  8. android:layout_height="wrap_content"
  9. android:text="one"/>
  10. <Button
  11. android:layout_width="wrap_content"
  12. android:layout_height="wrap_content"
  13. android:text="two"/>
  14. </LinearLayout>

二、显示时,让子元素有动画效果

简单实现渐变效果图:
iShot2020-12-08 23.09.48 (1).gif

  • 1、xml 实现

布局:

  1. <LinearLayout
  2. android:id="@+id/ll_layout_two"
  3. android:layout_width="match_parent"
  4. android:layout_height="wrap_content"
  5. android:layoutAnimation="@anim/layout_anim">
  6. <Button
  7. android:layout_width="wrap_content"
  8. android:layout_height="wrap_content"
  9. android:text="one"/>
  10. <Button
  11. android:layout_width="wrap_content"
  12. android:layout_height="wrap_content"
  13. android:text="two"/>
  14. <Button
  15. android:layout_width="wrap_content"
  16. android:layout_height="wrap_content"
  17. android:text="one"/>
  18. </LinearLayout>

layout_anim:

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

layout_anim_alpha:

  1. <?xml version="1.0" encoding="utf-8"?>
  2. <alpha xmlns:android="http://schemas.android.com/apk/res/android"
  3. android:fromAlpha="0.2"
  4. android:toAlpha="1.0"
  5. android:duration="1000"
  6. android:fillAfter="true"
  7. >
  8. </alpha>
  • 2、 代码实现

布局中可以去除layoutAnimation,效果如下:
iShot2020-12-08 23.20.59.gif
实现方法如下:

  1. //通过代码设置
  2. //设置过渡动画
  3. val scaleAnimation = ScaleAnimation(0f, 1f, 0f, 1f)
  4. scaleAnimation.duration = 2000
  5. //设置布局动画的显示属性,第一个参数是动画,第二个参数是每个控件完成动画的延迟,为0时不能设置执行顺序
  6. //设置布局动画的显示属性,第一个参数是动画,第二个参数是每个控件完成动画的延迟,为0时不能设置执行顺序
  7. val layoutAnimationController =
  8. LayoutAnimationController(scaleAnimation, 0.5f)
  9. //设置执行顺序,LayoutAnimationController.ORDER_NORMAL,顺序;ORDER_RANDOM,随机;ORDER_REVERSE逆序
  10. //设置执行顺序,LayoutAnimationController.ORDER_NORMAL,顺序;ORDER_RANDOM,随机;ORDER_REVERSE逆序
  11. layoutAnimationController.order = LayoutAnimationController.ORDER_NORMAL
  12. ll_layout_two.layoutAnimation = layoutAnimationController

三、参考

Layout动画:在android布局发生变化时添加动画效果
Android LayoutAnimation使用及扩展