안 드 로 이 드 모방 시 나 웨 이 보/QQ 공간 슬라이딩 자동 재생 영상 기능

일단 효과 도 를 볼 게 요.


키 코드
1.스크롤 이벤트 감청
우선listview에 감청setOnScrollListener을 추가 해 야 한다.이 감청 은recyclerViewaddOnScrollListener,즉 아래 코드 가 동시에 지원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클래스 가 있 으 면 화면 좌표 에 보 이 는 시각 영역 을 가 져 옵 니 다.
작은 매듭
자,기본 핵심 코드 는 이상 의 것 입 니 다.간단 하지 않 습 니까?관심 있 는 분 들 은 빨리 직접 조작 하 세 요.이 글 이 여러분 에 게 도움 이 되 기 를 바 랍 니 다.궁금 한 점 이 있 으 면 댓 글 을 남 겨 주 십시오.

좋은 웹페이지 즐겨찾기