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

 更新时间:2016年09月06日 10:37:11   投稿:daisy  
相信用过新浪微博或者QQ空间的朋友都看到过滑动自动播放视频的效果,那么这篇文章跟大家分享下如何利用Android实现这一个功能,有需要的朋友们可以参考借鉴。

先来看看效果图


关键代码

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类获取视图在屏幕坐标中的可视区域。

小结

好了,基本核心代码就是以上的这些,是不是很简单呢?感兴趣的大家快快自己动手操作起来吧,希望这篇文章对大家能有所帮助,如果有疑问大家可以留言交流。

相关文章

  • AndroidStudio集成OpenCV的实现教程

    AndroidStudio集成OpenCV的实现教程

    本文主要介绍了Android Studio集成OpenCV的实现教程,文中通过图文介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-12-12
  • Android单片机与蓝牙模块通信实例代码

    Android单片机与蓝牙模块通信实例代码

    这篇文章主要介绍了Android单片机与蓝牙模块通信实例代码,非常实用,特此分享给大家,需要的朋友可以参考下
    2016-05-05
  • Android中点击事件的四种写法详解

    Android中点击事件的四种写法详解

    本篇文章主要介绍了Android中点击事件的四种写法详解,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-05-05
  • Android仿微信公众号文章页面加载进度条

    Android仿微信公众号文章页面加载进度条

    这篇文章主要为大家详细介绍了Android仿微信公众号文章页面加载进度条,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-06-06
  • Notification与NotificationManager详细介绍

    Notification与NotificationManager详细介绍

    在Android系统中,发一个状态栏通知还是很方便的。下面我们就来看一下,怎么发送状态栏通知,状态栏通知又有哪些参数可以设置
    2012-11-11
  • Android线程间通信 Handler使用详解

    Android线程间通信 Handler使用详解

    这篇文章主要为大家介绍了Android线程间通信Handler使用详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-10-10
  • Android编程实现自定义toast示例

    Android编程实现自定义toast示例

    这篇文章主要介绍了Android编程实现自定义toast,结合简单实例形式分析了自定义布局toast核心实现技巧,具有一定参考借鉴价值,需要的朋友可以参考下
    2017-01-01
  • SharedPreference 初始化源码解析

    SharedPreference 初始化源码解析

    这篇文章主要为大家介绍了SharedPreference 初始化源码解析,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-03-03
  • 详解Android的内存优化--LruCache

    详解Android的内存优化--LruCache

    LruCache是基于Lru算法实现的一种缓存机制。本文对LruCache的概念和实现原理进行介绍,通过实例分析和使用介绍,让大家更好的了解LruCache,下面跟着小编一起来看下吧
    2016-12-12
  • Android创建文件时出现java.io.IOException: Operation not permitted异常的解决方法

    Android创建文件时出现java.io.IOException: Operation not permitte

    最近使用android10创建文件失败,并抛出权限异常,这篇文章主要给大家介绍了Android创建文件时出现java.io.IOException: Operation not permitted异常的解决方法,需要的朋友可以参考下
    2023-05-05

最新评论