ScrollView 嵌套ListView 会使ScrollView 获取焦点,所以不能使用ListView自带的方法来获取item移出屏幕的数量
首先 第一步,自定义scrollView (这个类复制就好)
public class MyScrollView extends ScrollView { private OnScrollListener listener; /** * 设置滑动距离监听器 */ public void setOnScrollListener(OnScrollListener listener) { this.listener = listener; } public MyScrollView(Context context) { super(context); } public MyScrollView(Context context, AttributeSet attrs) { super(context, attrs); } public MyScrollView(Context context, AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr); } // 滑动距离监听器 public interface OnScrollListener{ /** * 在滑动的时候调用,scrollY为已滑动的距离 */ void onScroll(int scrollY); } @Override public void computeScroll() { super.computeScroll(); if(listener!=null){ listener.onScroll(getScrollY()); } } }
第二步 获取你的item的高度 (获取高度的代码必须在listView已经绘制完成后在可以调用,不然会出现异常。)
ListAdapter listAdapter = listView.getAdapter();
if (listAdapter == null) {
return;
}
View listItem = listAdapter.getView(0, null, listView);
listItem.measure(0, 0);
int height=listItem.getMeasuredHeight();
这个height 便是listView item 的height
第三步 在用到的activity中实现ScrollView的滑动方法
ScrollView.setOnScrollListener(new MyScrollView.OnScrollListener() { @Override public void onScroll(int scrollY) { scrollY = scrollY / height; //listView item 的height Log.e("tag","ScrollY==="+scrollY); //移出屏幕的数量 } });
完成!