先来看看效果图
关键代码
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
类获取视图在屏幕坐标中的可视区域。
小结
好了,基本核心代码就是以上的这些,是不是很简单呢?感兴趣的大家快快自己动手 *** 作起来吧,希望这篇文章对大家能有所帮助,如果有疑问大家可以留言交流。
总结以上是内存溢出为你收集整理的Android仿新浪微博/QQ空间滑动自动播放视频功能全部内容,希望文章能够帮你解决Android仿新浪微博/QQ空间滑动自动播放视频功能所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)