Android好奇宝宝_番外篇_看脸的世界_08

废话少说,先上效果图:

Android好奇宝宝_番外篇_看脸的世界_08(中间加上一个日期就行了,这可是我用画图软件,耗费了将近40秒画的,花了我很多精力的!所以请勿随便拿去用,起码得先点赞和评论嘛)。


声明:

接下来称那些特殊位置的item为sticky(粘性的),即左侧显示十字型背景的为sticky,显示两条竖线的为普通item。


例子:

有数据数组为:(15-03-01,A),(15-03-01,B),(15-03-02,C),(15-03-02,D),(15-03-02,E)

则位置0(15-03-01,A)和位置2(15-03-02,C)为sticky的,分别为日期15-03-01和15-03-02的起始item。


高清源码:


(1)自定义ListView

首先先自定义一个JJJListView继承ListView,写下构造方法什么的,没啥好说的。

(2)定义接口

JJJListView要把HeadView画出来,它得知道HeadView长怎么样,要画多大吧。所以定义一个接口给外部设置,JJJListView通过外部设置的接口获取HeadView的信息。

之前的看过的开源库是不要求外部传入HeadView的宽和高的,但那个开源库的HeadView是横向布满ListView的,我们不是,还是固定死宽高方便点。


(3)测量HeadView的大小

在ListView进行测量时,也对HeadView进行测量:

getHeadViewWidth()和getHeadViewHeight()只是简单的进行dp和px的转换,xml里我们一般会设置大小单位为dp在不同分辨率的手机上获得更好的效果,但是在代码设置中都是以px为单位的,这方面网上文章很多,讲的也很详细,我就不废话了。


(4)布局HeadView的位置

同上,在ListView的布局过程中对HeadView进行布局到左上角。

注意这里用的是getMeasuredWidth()而不是getWidth(),前面我们自己对HeadView进行过测量,所以getMeasuredWidth()是有值的,但是getWidth()在HeadView真正被绘制出来后才有值,高度同理。

(一个View的显示流程是:测量大小–>位置布局–>绘制)


(5)绘制HeadView

这个不用解释吧。


(6)HeadView内容的改变

经过上面的步骤,HeadView已经以确定的大小和位置被画在ListView上了。但是当ListView滚动时,要对HeadView的内容进行修改,以上面效果图的例子就是修改TextView显示的日期。


那么,首先,要知道HeadView在什么时候需要进行修改:

当ListView第一个可见的item为sticky时,需要对HeadView进行修改。


不知道为什么的请发动你们的大脑,仔细想一想。

在第一步初始化时我们已经设置了滚动监听了,现在我们在滚动时进行判断:

来源:while-living

声明:本站部分文章及图片转载于互联网,内容版权归原作者所有,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!

上一篇 2015年2月4日
下一篇 2015年2月4日

相关推荐