判断ListView的item已经滑出屏幕

在做将视频播放器放到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
                }
            }
        });
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 174,379评论 25 709
  • 早给世界安给你👄
    Carrie_WXT阅读 215评论 0 1
  • #宛风解忧画画打卡#day149 节奏。 生活需要节奏。 线条需要节奏。 情绪一样需要节奏。 在漫不经心的线条里找...
    宛小风阅读 321评论 1 4
  • 人们常说好学生是好老师培养的,学生好的行为是好老师塑造的,老师除了传道授业解惑之外,还通过因材施教成为学生的灵魂工...
    奔跑吧洛奇阅读 1,026评论 1 2