🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
# 1. LayoutAnimation 用于为`ViewGroup`指定一个动画,其子元素也就具有了它的出场动画效果。这种效果常用在`ListView`上。 # 2. 属性 在`res/anim`目录下新建一个`layoutanimation01.xml`的文件: ~~~ <?xml version="1.0" encoding="utf-8"?> <layoutAnimation xmlns:android="http://schemas.android.com/apk/res/android" android:delay="0.5" android:animationOrder="normal" android:interpolator="@android:anim/linear_interpolator" android:animation="@anim/item_anim" > </layoutAnimation> ~~~ * `android:delay`指定子元素开始动画的时间延迟,如果元素入场的时间周期为300ms,那么`android:delay="0.5"`就表示150ms。 * `android:animationOrder`指定子元素的动画顺序,有三种取值,`normal`表示顺序出现,`reverse`表示反序,`random`表示随机。 * `android:interpolator`用来指定后影响动画的播放速度。 * `android:animation`指定具体的每个子元素的播放动画,这里指定为一个动画文件,即:`res/anim/item_anim.xml`文件。 `item_anim.xml`文件内容如下: ~~~ <?xml version="1.0" encoding="utf-8"?> <set xmlns:android="http://schemas.android.com/apk/res/android" android:duration="200" android:interpolator="@android:anim/accelerate_decelerate_interpolator" android:shareInterpolator="true" > <alpha android:fromAlpha="0.0" android:toAlpha="1.0"/> <scale android:fromXScale="1" android:toXScale="1.2" android:fromYScale="1" android:toYScale="1.2"/> </set> ~~~ 应用了透明度动画,从不可见到可见,同时进行了略微的缩放。指定时间为200ms。当然,这里的应用为,直接在布局文件的`ListView`标签中指定`android:layoutAnimation`: ~~~ <ListView android:id="@+id/list_view" android:layout_width="match_parent" android:layout_height="wrap_content" android:layoutAnimation="@anim/layoutanimation01" android:background="#ffEEEEEE" android:divider="#dddbdb" android:dividerHeight="1dp" /> ~~~ 然后在`Activity`中进行数据装填即可: ~~~ list_view.adapter = ArrayAdapter<String>( this, android.R.layout.simple_list_item_1, listOf("123", "测试项", "123", "测试项") ) ~~~ 效果为从第一个`item`到最后一个,依次显现到略微放大的动态效果。`gif`转化会丢失这个效果,这里就不贴图了。 # 3. 代码动态指定 类似的,也可以使用`kotlin`代码来直接指定,首先在`layoutanimation01.xml`中删除对应的`android:animation`: ~~~ <?xml version="1.0" encoding="utf-8"?> <layoutAnimation xmlns:android="http://schemas.android.com/apk/res/android" android:delay="0.5" android:animationOrder="normal" android:interpolator="@android:anim/linear_interpolator" > </layoutAnimation> ~~~ 代码设置: ~~~ val loadAnimation = AnimationUtils.loadAnimation(this, R.anim.item_anim) val layoutAnimationController = LayoutAnimationController(loadAnimation) layoutAnimationController.delay = 0.5f layoutAnimationController.order = LayoutAnimationController.ORDER_NORMAL list_view.layoutAnimation = layoutAnimationController list_view.adapter = ArrayAdapter<String>( this, android.R.layout.simple_list_item_1, listOf("123", "测试项", "123", "测试项") ) ~~~