美文网首页AndroidAndroid知识Android
Android仿微博实现列表滑动播放/暂停视频

Android仿微博实现列表滑动播放/暂停视频

作者: 人失忆 | 来源:发表于2016-09-05 18:48 被阅读3196次

    本文仿照新浪微博/QQ空间实现了滑动自动播放视频的功能。

    本文来自个人博客:http://www.zhangliwei.date

    如有疑问欢迎讨论,感谢您的关注。

    先上效果图

    滑动自动播放1
    滑动自动播放2

    关键代码

    1.监听滚动事件

    首先要给listview添加setOnScrollListener监听,注意这个监听在recyclerView上是addOnScrollListener,也就是说下面代码同时支持recyclerView。

    public int firstVisible=0,visibleCount=0, totalCount=0;
      videoList.setOnScrollListener(new AbsListView.OnScrollListener() {
            @Override
            public void onScrollStateChanged(AbsListView view, int scrollState) {
                switch (scrollState) {
                
                    case AbsListView.OnScrollListener.SCROLL_STATE_FLING:
                        Log.e("videoTest", "SCROLL_STATE_FLING");
                        break;
                        
                    case AbsListView.OnScrollListener.SCROLL_STATE_IDLE:
                        Log.e("videoTest", "SCROLL_STATE_IDLE");
                        autoPlayVideo(view);
                        break;
                        
                    case AbsListView.OnScrollListener.SCROLL_STATE_TOUCH_SCROLL:
                        Log.e("videoTest", "SCROLL_STATE_TOUCH_SCROLL");
                        break;
                        
                    default:
                        break;
                }
            }   
            @Override
            public void onScroll(AbsListView view, int firstVisibleItem,
                                 int visibleItemCount, int totalItemCount) {
                // firstVisibleItem   当前第一个可见的item
                // visibleItemCount   当前可见的item个数
                if (firstVisible == firstVisibleItem) {
                    return;
                }
                firstVisible = firstVisibleItem;
                visibleCount = visibleItemCount;
                totalCount = totalItemCount;
            }
        });
    

    监听里会有两个方法,我们用onScroll方法记录 当前第一个可见Item,以及可见Item总数,用onScrollStateChanged来监听手滑动屏幕的整个过程。 当onScrollStateChanged 中的scrollState字段值等于SCROLL_STATE_IDLE 时,代表本次滑动完毕并停止滚动🙄感兴趣的朋友可以自行百度另外两个参数的意思,没准对你的需求有帮助🙄。

    2.处理视频逻辑

      void autoPlayVideo(AbsListView view){
        Log.e("videoTest", "firstVisiblePos  =  " + firstVisible + "visibleItemCount =  " + visibleCount);
        for (int i = 0; i < visibleCount; i++) {
            if (view!=null&&view.getChildAt(i)!=null&&view.getChildAt(i).findViewById(R.id.videoplayer) != null) {
                JCVideoPlayerStandard videoPlayerStandard1 = (JCVideoPlayerStandard) view.getChildAt(i).findViewById(R.id.videoplayer);
                Rect rect = new Rect();
                videoPlayerStandard1.getLocalVisibleRect(rect);
                int videoheight3 = videoPlayerStandard1.getHeight();
                Log.e("videoTest","i="+i+"==="+"videoheight3:"+videoheight3+"==="+"rect.top:"+rect.top+"==="+"rect.bottom:"+rect.bottom);
                if (rect.top==0&&rect.bottom==videoheight3)
                {
                    if (videoPlayerStandard1.currentState == JCVideoPlayer.CURRENT_STATE_NORMAL || videoPlayerStandard1.currentState == JCVideoPlayer.CURRENT_STATE_ERROR) {
                        Log.e("videoTest", videoPlayerStandard1.currentState + "======================performClick======================");
                        videoPlayerStandard1.startButton.performClick();
                        VPApplication.instance.VideoPlaying=videoPlayerStandard1;
                    }
                    return;
                }
    
            }
        }
        Log.e("videoTest", "======================releaseAllVideos=====================");
        JCVideoPlayer.releaseAllVideos();
        VPApplication.instance.VideoPlaying=null;
    }
    

    首先是根据总数循环判断 Item 是否有视频,如果有再利用Rect类获取每个Item视图在屏幕坐标中的可视区域,再根据Item显示尺寸觉得播放或停止视频。基本核心代码就这些,是不是非常简单,剩下的就去源码看看吧⬇️⬇️?


    项目源码 autovideoplay

    技术博客 Wells'Note

    视频播放器

       //一个没怎么有节操的开源播放器🙄。
    compile 'fm.jiecao:jiecaovideoplayer:4.6.3'
    

    喜欢请给个赞⬇️⬇️

    相关文章

      网友评论

      • 梦华芳秋:请问这个可以用HorizontalScrollView来实现左右滑动播放视频吗?
        人失忆:可以用recyclerView 实现

      本文标题:Android仿微博实现列表滑动播放/暂停视频

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