listview滑动到指定坐标位置

我们都知道让listview滑动到指定的item位置有两个直接调用的方法setSelection(int position)和
smoothScrollToPosition(int position),第二个smooth方法是带平滑滑动动画的,看起来更顺滑一些,不过他要在线程中调用才能起作用。

他们两个共同的弊端就是只能滑动到某个item,不能指定滑动到某个固定的坐标位置,
在这里我们可以通过lv.smoothScrollBy(int distance, int duration)方法来解决这个弊端,
第一个参数distance是滑动的距离,正数是向上滑动,负数是向下滑动。
第二个参数duration是滑动的时间

知道调用smoothScrollBy需要传入滑动的距离,下边我们就来看一下滑动的距离怎么获取,在listview中我们通过实现OnScrollListener接口,在方法中
@Override
public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount,int totalItemCount) {
//获取滑动的高度
int scrollHeight = getScrollYs();
}
//用来记录每一个item的高度
private HashMap<Integer,Integer> itemHeight = new HashMap<>();

/**
* 获取ListView的ScrollY
* @return
*/
public int getScrollYs() {
View c = getChildAt(0);
if (c == null) {
return 0;
}
int firstVisiblePosition = getFirstVisiblePosition();
if (!itemHeight.containsKey(firstVisiblePosition)){
itemHeight.put(firstVisiblePosition,c.getHeight());
}
int top = c.getTop();
int height = 0;
Set<HashMap.Entry<Integer,Integer>> entry = itemHeight.entrySet();
for (HashMap.Entry<Integer,Integer> entrys: entry){
if (entrys.getKey()<firstVisiblePosition){
height += entrys.getValue();
}
}
return -top + height ;
}

这样获取到滑动的高度(- scrollY)- 需要到达的高度坐标(y)=需要滑动的距离distance。
注意: 这里获取到的高度是取的正数,是加了“ - ”的,在计算距离的时候可以根据需要在scrollY 前 加上 “ - ”转换成真实头部坐标来计算距离。

只要了解了调用方法,使用起来还是比较简单的,相信看完的程序猿们应该都清楚怎么使用了。


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值