美文网首页
判断ListView的item已经滑出屏幕

判断ListView的item已经滑出屏幕

作者: Doikki | 来源:发表于2017-06-19 18:10 被阅读805次

在做将视频播放器放到ListView进行播放时往往会遇到如下问题:
如何判断listview的item已经滑出屏幕,以便将正在播放的视频停止?
通过listView.setOnScrollListener(new AbsListView.OnScrollListener())监听ListView的滑动事件即可实现此功能。
完整代码如下:

listView.setOnScrollListener(new AbsListView.OnScrollListener() {

            private View firstView; //记录当前屏幕中第一个可见的item对象
            private View lastView; //记录当前屏幕中最后个可见的item对象
            private int lastFirstVisibleItem; //记录当前屏幕中第一个可见的item的position
            private int lastVisibleItem; // 记录屏幕中最后一个可见的item的position
            private boolean scrollFlag;// 记录滑动状态

            @Override
            public void onScrollStateChanged(AbsListView view, int scrollState) {
                switch (scrollState) {
                    case AbsListView.OnScrollListener.SCROLL_STATE_IDLE:
                        scrollFlag = false;
                        break;
                    case AbsListView.OnScrollListener.SCROLL_STATE_TOUCH_SCROLL:
                        scrollFlag = true;
                        break;
                    case AbsListView.OnScrollListener.SCROLL_STATE_FLING:
                        scrollFlag = true;
                        break;
                }

            }

            @Override
            public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) {
                if (scrollFlag) { // 避免不必要的执行
                    //如果上一个 屏幕中第一个可见的item的position已经小于当前屏幕中第一个可见item的position,表示item已经完全滑出屏幕了
                    //这种情况一般出现在ListView上滑的时候,故此时我们可以把firstView上的播放器停止
                    if (lastFirstVisibleItem < firstVisibleItem) { 
                        gcView(firstView);
                    //通过firstVisibleItem + visibleItemCount - 1我们可以得到当前屏幕上最后一个item的position
                    //如果屏幕中最后一个可见的item的position已经大于当前屏幕上最后一个item的position,表示item已经完全滑出屏幕了
                    //这种情况一般出现在ListView下滑的时候,故此时我们可以把lastView上的播放器停止
                    } else if (lastVisibleItem > firstVisibleItem + visibleItemCount - 1) {
                        gcView(lastView);
                    }
                    lastFirstVisibleItem = firstVisibleItem;
                    lastVisibleItem = firstVisibleItem + visibleItemCount - 1;
                    firstView = view.getChildAt(0);
                    lastView = view.getChildAt(visibleItemCount - 1);
                }
            }

            private void gcView(View gcView) {
                if (gcView != null) {
                    //stop player
                }
            }
        });

相关文章

网友评论

      本文标题:判断ListView的item已经滑出屏幕

      本文链接:https://www.haomeiwen.com/subject/hnqnqxtx.html