ScrollBarDrawable

ScrollBarDrawable位于/frameworks/base/core/widget/中,是ListView用于画scrollBar的类。


垂直scrollBar调用流程:View.onDrawScrollBars()==>onDrawVerticalScrollBar() ==> ScrollBarDrawable.draw() ==> drawThumb(); 


drawThumb()的参数offset就是scrollBar的垂直偏移量,决定scrollBar的位置。注意在draw() 中计算完offset后,重新调整了一回offset和length,如下所示:


            // avoid the tiny thumb 防止索引太小,看不见
            int minLength = thickness * 2;

            if (length < minLength) {
                length = minLength;
            }
            // avoid the too-big thumb 防止索引过小,超过ListView的Size
            if (offset + length > size) {
                offset = size - length;
            }

尤其是对length调整后,并未更新offset,导致drawThumb()中使用的length与draw()中计算offset时,使用的并非同一值,这会产生一个结果:

    当ListView项目数过多时(多到length小于minLength),移动至最后若干个项目时,scrollBar过早到达底部,没有scrollBar应有的效果,而且数量越多,效果越显著。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值