tyc*_*czj 7 android android-listview android-adapter android-gridview
无论何时更新GridView/ListView,都要调用notifyDatasetChanged适配器,该适配器使用新数据重新填充列表,删除当前列表中的所有内容.
现在以设计指南中的这个小视频为例L Preview
是否有可能实现同样的效果,你看到的唯一变化是当适配器重新加载时没有任何"闪烁"的新项目,或者这是现在只能在L中完成的事情?
Google Keep添加新笔记时,也可以在应用程序中找到此效果
我担心它的所有视觉技巧 - 也就是动画.
...删除列表中当前的所有内容.
实际上,没有.
notifyDataSetChanged只告诉基础观察者数据已经改变.而已.作为响应,getView(...)为每个可见视图调用- 可访问的数字ListView#getChildCount().由于任一索引都已更改(添加/删除项目),或者这些索引中的对象中保存的数据已更改(^)(一个或多个项目已更改),因此后续调用可以在视觉上刷新数据(^)ListView#getView(...).
"Android开发者"有一个有趣的视频,解释了如何产生你想要的效果:DevBytes:ListView Cell Insertion Animation.
视频/示例仅讨论单个项目插入.但它应该可以扩展到具有一些时间和数学技能的所有数据操作.
我能够扩展示例代码以插入多个项目.我将动画更改为更简单的alpha-f-in.单击该Add row按钮可将随机数(1到3之间)添加到列表视图中.这是它的样子:

伪的工作流程:
在将新项目传递给适配器之前,循环遍历列表视图中的所有可见项目并保存其边界(in Rect)和snapshot(in BitmapDrawables)
将项目传递给适配器
添加OnPreDrawListener到ListView的ViewTreeObserver.
当onPreDraw(...)被调用时,新的项目即可提取.我们可以views使用ListView#getChildAt(...)相应的索引访问它们.
所有新项目都设置为不可见,并且分配了alpha动画师
所有旧项目都分配了translation_y动画师
将无法再访问的getChildAt(..)项目 - 因为添加新项目 - 被分配了translation_y动画师 - 以使其脱离屏幕(或超出列表视图范围)
translation_y动画师被解雇了.当这些动画师完成运行时,将启动alpha动画师.
请注意,动画的类型(alpha,翻译,缩放或这些动画的任意组合)相对无关紧要.我想这会在的情况下更难GridView或StaggeredGridView(保持) -不仅是因为数学会涉及两个翻译X 和 Y.但工作流程应保持不变.
(^) - 语法错误,但自然的IMO.
| 归档时间: |
|
| 查看次数: |
1954 次 |
| 最近记录: |