国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 系統 > Android > 正文

Android仿新浪微博/QQ空間滑動自動播放視頻功能

2019-12-12 05:23:09
字體:
來源:轉載
供稿:網友

先來看看效果圖


關鍵代碼

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類獲取視圖在屏幕坐標中的可視區域。

小結

好了,基本核心代碼就是以上的這些,是不是很簡單呢?感興趣的大家快快自己動手操作起來吧,希望這篇文章對大家能有所幫助,如果有疑問大家可以留言交流。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 恩施市| 潜江市| 雷州市| 西青区| 田东县| 咸阳市| 伊川县| 石屏县| 罗定市| 忻州市| 肥西县| 平谷区| 舞钢市| 泸州市| 山丹县| 古丈县| 图木舒克市| 金沙县| 木兰县| 依兰县| 灵宝市| 钟祥市| 织金县| 天门市| 广平县| 望都县| 宜川县| 昆明市| 安陆市| 吉林省| 正宁县| 饶平县| 辽源市| 崇州市| 左权县| 桂林市| 兴国县| 衡阳县| 福建省| 汾阳市| 酉阳|