原本使用firstVisibleItem来判断滚动方向的,但是如果一个item充满屏幕的时候这个就不能用了,需要判断gettop的距离。
代码如下:
View topChild = view.getChildAt(0);
int newScrollPosition = 0;
if (topChild == null) {
newScrollPosition = 0;
} else {
newScrollPosition = -topChild.getTop() + view.getFirstVisiblePosition() * topChild.getHeight();
}
if (newScrollPosition < mScrollPosition) {
// 上滑 显示布局
if (addgouwuche_img.getVisibility() == View.GONE) {
GouwucheAnimation();
Log.d("dc", "上滑");
}
} else if (newScrollPosition > mScrollPosition) {
// 下滑 隐藏布局
if (addgouwuche_img.getVisibility() == View.VISIBLE) {
GouwucheAnimation();
Log.d("dc", "下滑");
}
}
mScrollPosition = newScrollPosition;
那通过上面的代码 我们就比较容易来处理listview位置的保存了
listivew有一个方法setSelectionFromTop(int position, int y) 也就是将listview调到指定的位置
int position=view.getFirstVisiblePosition()
View v = mList.getChildAt(0);
int y= (v == null) ? 0 : (v.getTop() - mList.getPaddingTop());