源码网商城,靠谱的源码在线交易网站 我的订单 购物车 帮助

源码网商城

Android仿新浪微博/QQ空间滑动自动播放视频功能

  • 时间:2020-07-24 18:48 编辑: 来源: 阅读:
  • 扫一扫,手机访问
摘要:Android仿新浪微博/QQ空间滑动自动播放视频功能
[b]先来看看效果图[/b] [img]http://files.jb51.net/file_images/article/201609/201696103128486.gif?201686103140[/img] [img]http://files.jb51.net/file_images/article/201609/201696103212234.gif?201686103230[/img] [b]关键代码[/b] [b]1.监听滚动事件[/b] 首先要给[code]listview[/code]添加[code]setOnScrollListener[/code]监听,注意这个监听在[code]recyclerView[/code]上是[code]addOnScrollListener[/code],也就是说下面代码同时支持[code]recyclerView[/code]。
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;
    }
  });
监听里会有两个方法,我们用[code]onScroll[/code]方法记录 当前第一个可见[code]Item[/code],以及可见[code]Item[/code]总数,用[code]onScrollStateChanged[/code]来监听手滑动屏幕的整个过程。 当[code]onScrollStateChanged [/code]中的[code]scrollState[/code]字段值等于[code]SCROLL_STATE_IDLE [/code]时,代表本次滑动完毕并停止滚动🙄感兴趣的朋友可以自行百度另外两个参数的意思,没准对你的需求有帮助🙄。 [b]2.处理视频逻辑[/b]
  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;
}
首先是根据总数循环判断 [code]Item [/code]是否有视频,如果有再利用[code]Rect[/code]类获取视图在屏幕坐标中的可视区域。 [b]小结[/b] 好了,基本核心代码就是以上的这些,是不是很简单呢?感兴趣的大家快快自己动手操作起来吧,希望这篇文章对大家能有所帮助,如果有疑问大家可以留言交流。
  • 全部评论(0)
联系客服
客服电话:
400-000-3129
微信版

扫一扫进微信版
返回顶部