編輯:關於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
類獲取視圖在屏幕坐標中的可視區域。
小結
好了,基本核心代碼就是以上的這些,是不是很簡單呢?感興趣的大家快快自己動手操作起來吧,希望這篇文章對大家能有所幫助,如果有疑問大家可以留言交流。
效果圖:源碼:package com.zihao.radar;import android.app.Activity;import android.os.Bundle;i
可伸縮的矢量圖片不會丟失清晰度,並且單一顏色的app-icon是完美的可定義一個bitmap作為透明度(alpha)和運行時的顏色可對一個bitmap image取色,會
最近看了很多動畫和一些效果很好的自定義控件,發現了一件事,就是Android的View層設計思想和古老的JavaSwing是如此的相似。這是在原來的基礎上加入了一些輸入移
任務棧簡單入門??最近又把兩本進階書看了一遍,但總感覺好記性不如爛筆頭,所以還是決定通過博客記錄一下,我們將分兩篇來全面深入地記錄Activity 啟動模式與任務棧的內容