ListView 获取精确滚动值

ListView 获取精确滚动值

@[Android|listview|滚动]
场景

当我们要求listview一往上滚动的时候,下面的tab栏或者别的在下面浮空的东西,或者上面的ActionBar也是可以要求往上滚动(例如google plus),这个时候我们需要精确的ListView 滚动值,而不某个Item往上滚动了,毕竟是用了卡片设计后会出现一行会很高的情况,这时候过了一个在往下滑动明显就不合适了

获取的方法很简单看代码

package org.hangox.test;
import android.os.Bundle;
import android.support.v7.app.ActionBarActivity;
import android.view.View;
import android.widget.AbsListView;
import android.widget.ArrayAdapter;
import android.widget.ListView;
import android.widget.TextView;
import com.lidroid.xutils.util.LogUtils;
import java.util.ArrayList;
import butterknife.ButterKnife;
import butterknife.InjectView;
/**
* Created With Android Studio
* User 47
* Date 2014-10-28
* Time 23:27
*/
public class ListViewScrollTest extends ActionBarActivity{
@InjectView(R.id.listView)
ListView listView;
View headView ;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_list_scroll);
ButterKnife.inject(this);
ArrayList<String> stringArrayList = new ArrayList<String>();
for(int i = 0 ;i < 10000; i ++){
stringArrayList.add(i+"");
}
listView.setAdapter(new ArrayAdapter<String>(this,android.R.layout.simple_list_item_1, stringArrayList));
headView = new TextView(this);
// listView.addHeaderView(headView);
listView.setOnScrollListener(new AbsListView.OnScrollListener() {
@Override
public void onScrollStateChanged(AbsListView view, int scrollState) {
}
@Override
public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) {
LogUtils.i(getScrollY()+"");
}
});
}
public int getScrollY() {//获取滚动距离
View c = listView.getChildAt(0);
if (c == null) {
return 0;
}
int firstVisiblePosition = listView.getFirstVisiblePosition();
int top = c.getTop();
int headerHeight = 0;
if (firstVisiblePosition >= 1) {
headerHeight = listView.getHeight();
}
return -top + firstVisiblePosition * c.getHeight() + headerHeight;
}
}

不要问我为什么,只是知道这样可以获取到滚动距离,但是具体原因还没有分析

posted @   hangox  阅读(1870)  评论(0编辑  收藏  举报
编辑推荐:
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
阅读排行:
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!
点击右上角即可分享
微信分享提示