效果图:
gif.gifxml文件
在res目录下新建文件夹命名为anim,在anim中新建xml文件
item_anim.xml
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
<translate
android:duration="500"
android:fromXDelta="100%"
android:fromYDelta="0"
android:toXDelta="0"
android:toYDelta="0" />
<alpha
android:duration="500"
android:fromAlpha="0"
android:toAlpha="1" />
</set>
translate 位置转移动画效果
整型值:
- fromXDelta 属性为动画起始时X坐标上的位置
- toXDelta 属性为动画结束时X坐标上的位置
- fromYDelta 属性为动画起始时Y坐标上的位置
- toYDelta 属性为动画结束时Y坐标上的位置
注意: 没有指定参照物时,默认是以自己为相对参照物
长整型值:
- duration 属性为动画持续时间时间以毫秒为单位
alpha 透明度渐变效果
- fromAlpha 开始时透明度
- toAlpha 结束时透明度
- 数值范围(0~1)
在Activity或Fragment中
//设置动画效果
private void initAnim() {
//通过加载XML动画设置文件来创建一个Animation对象;
Animation animation = AnimationUtils.loadAnimation(getContext(), R.anim.item_anim);
//得到一个LayoutAnimationController对象;
LayoutAnimationController lac = new LayoutAnimationController(animation);
//设置控件显示的顺序;
lac.setOrder(LayoutAnimationController.ORDER_NORMAL);
//设置控件显示间隔时间;
lac.setDelay(0.3f);
//为ListView设置LayoutAnimationController属性;
mXRecyclerView.setLayoutAnimation(lac);
}
获取到数据后调用,首次进入和刷新都会触发动画
public void initRecyclerViewAnim(List<ItemBean> list) {
initAnim();
if (list != null && list.size() > 0) {
if (mAdapter == null) {
mAdapter = new RVBeanAdapter(getActivity());
getActivity().runOnUiThread(() -> {
mXRecyclerView.setAdapter(mAdapter);
//刷新逻辑
mAdapter.refreshData(list);
});
} else {
getActivity().runOnUiThread(() -> mAdapter.refreshData(list));
}
}
}
/**
* 刷新数据
*
* @param data 数据源
*/
public void refreshData(List<T> data) {
mList.clear();
mList.addAll(data);
notifyDataSetChanged();
}
demo地址:https://github.com/fr1014/LoadAndRefresh
注:此次的代码是基于上篇文章(RecyclerView + DataBinding实现的下拉刷新与加载更多)中添加,文章地址:https://www.jianshu.com/p/491dbf93e448
网友评论