Android ListView平滑的滑动 smoothScrollTo

Android ListView平滑的滑动 smoothScrollTo

最近做环信IM,用的easeui 直接跳过自定义消息 接受离线消息的步骤。上面的说是环信当有新消息加入最下面的时候没有动画效果,让我改出滑动的效果出来,好吧 小意思 直接用 smoothScrollToPosition 就完事了。

but 几分钟之后 上面说是有滚动效果了 但是太快了 让我改慢一点

我是没有听说过 smoothScrollToPosition 可以设置时间的,于是不停地看ListView的源码,发现 smoothScrollToPosition 其实是调的 smoothScrollBy 方法,两个参数分别是 滑动的距离和时间 。

思路瞬间有了 计算出滑动的距离和时间 调用就完事了 下面贴出方法

int distanceHeight = 0;
for (int i = startIndex; i < length; i++) {
View listItem = getView(i, null, listView);
listItem.measure(0, 0);//取wrap_content的大小的高
distanceHeight += listItem.getMeasuredHeight();
 }

listitem 就是通过position 获取到的itemView distanceHeight 就是itemView的高度

高度出来了时间也就快了 等等 要是之显示出部分的高度 不就 gg 了嘛

淡定 getChildAt 可以获取到可见的View 记住是可见的 GONE 也是不可见的,getChildAt后面跟一个int参数 这个int不是一般的position 而是可见的第几项 ,等到View之后通过getHeight()获取可见的高度 ,用getMeasuredHeight()减去getHeight() 就是不可见的高度了

高度已经计算完毕 调用 smoothScrollBy 愉快的让他滚吧

这里有点注意:smoothScrollToPosition 滚动到指定position显示到屏幕中 并不一定滚动到顶部

getMeasuredHeight 获取的是itemView 应该有的高度 而 getHeight 是获取可见的高度

总感觉更好的方法很多啊

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值