listview分析

重点都在onlayout中,第一次没有child,所以第一次调用fulldown,里面调用getview将view 添加到listview中

因为每个onlayout都得调用两次,那么第二次就用的是activeview[]来进行缓存

里面有个机制就是有个active数组,是存放当前显示的view,然后detach,然后再full,就从这里面取。

滑动还是靠scrollto,监听滑动事件调用trackmotionscroll(abslistview),这个方法里面调用fillgap,来复用在scrapview中的view,将这个对象传入getview()中复用,移出屏幕的加入scrap中,这个操作同样是在trackmotionscroll中完成的。

另外它是根据type来回收的

将要显示的view调用obtianview,如果此时scrapview中有就复用,没有就创建。

如果移出屏幕,那么它就会被加入到scrapview中,

缓存view的个数,如果都是一种类型,那么一开始向下滑,创建一个(这时还没有缓存的),然后回收一个(最上面那个已经看不到了),下一个再显示的时候就复用了。

每种type都是一个数组,所以存在一个arraylist[]中

滑动的时候动态添加view(进入到屏幕内的),是fillgap机制,计算空隙,然后添加的时候根据position来layout到正确的位置

他会判断上下方向,然后根据这个来回收,然后fillgap。回收会detach,然后加入到scrapview中,fillgap会复用,然后attach。

其实listview主体是一个viewgroup,recyclebin是负责回收重用的,负责惯性滑动的volectiytacker,负责滑动的overscrollby,负责显示的addviewinLayout,attach,detach。

你可能感兴趣的:(listview分析)