Android Launcher是基于水平的视图容器(ViewGroup)。最外面的是workspace,是一个viewgroup. 每一屏幕就是一个celllayout.,也是一个Viewgroup。Celllayout管理每个View,即cell.. 原生的android Launcher源代码里面对屏数有一定限制,是基于内存考虑的。
目前的我对Launcher改进,能满足对无限制数量的需求。 大概的思路如下:
启动一个后台线程,用于后台构建View. 将数据赋予View 的Tag里面。保持五屏的视图(即五个celllayout). 当向右或向左滑动的时候,会将向前或向后的一屏View清空,所启动的后台线程同时向后或向前生成新一屏的视图。这样就可以满足无限数量的限制。
横竖屏切换的时候,由于横竖屏的布局和每屏数目不一样,所以数据要重新构建,先构建当前屏的视图,然后再向左和向右构建视图,以保持五屏的视图Celllayout。这样就保证了横竖屏幕切换的时候不会慢。
搜索功能和横竖屏切换差不多,都是要重新构建workspace.也是构建当前屏的视图,然后再向左和向右构建视图。
目前基于Launcher代码改进的水平视图容器,还存在以下不足:
1. 还不是真正意义上的无限数量,数据源越大,celllayout就越大,目前只对Cell这块进行旧视图的清空和新视图的构造。因为cell是最耗内存资源。