0%

对于视频飘窗功能实现整理

1.mCommonRecyclerView.addOnChildAttachStateChangeListener(this);

mCommonRecyclerView.addOnChildAttachStateChangeListener(this);

通过重写onChildViewAttachedToWindow与onChildViewDetachedFromWindow方法

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
@Override
public void onChildViewAttachedToWindow(View view) {
int index = mCommonRecyclerView.getChildAdapterPosition(view);
if (index >= 0) {
int itemViewType = mCommonRecyclerView.getAdapter().getItemViewType(index);
if (itemViewType == 4 || itemViewType == 7) {
view.findViewById(R.id.showview).setVisibility(View.VISIBLE);
if (index == position) {
FrameLayout frameLayout = view.findViewById(R.id.layout_video);
frameLayout.removeAllViews();
if (mVideoItemView != null && ((mVideoItemView.isCurrentPlay())
|| mVideoItemView.currentState == JZVideoPlayer.CURRENT_STATE_PAUSE
|| mVideoItemView.currentState == JZVideoPlayer.CURRENT_STATE_PREPARING)) {
view.findViewById(R.id.showview).setVisibility(View.GONE);
}
if (mVideoItemView.currentState == JZVideoPlayer.CURRENT_STATE_PAUSE) {
if (mVideoItemView.getParent() != null)
((ViewGroup) mVideoItemView.getParent()).removeAllViews();
frameLayout.addView(mVideoItemView);
return;
}
if (mSmallLayout.getVisibility() == View.VISIBLE && mVideoItemView != null
&& (mVideoItemView.isCurrentPlay()
|| mVideoItemView.currentState == JZVideoPlayer.CURRENT_STATE_PREPARING)) {
mSmallLayout.setVisibility(View.GONE);
mVideoLayout.removeAllViews();
frameLayout.addView(mVideoItemView);
}
}
}
}
}

@Override
public void onChildViewDetachedFromWindow(View view) {
int index = mCommonRecyclerView.getChildAdapterPosition(view);
if (index >= 0) {
int itemViewType = mCommonRecyclerView.getAdapter().getItemViewType(index);
if (itemViewType == 4 || itemViewType == 7) {
if (index == position) {
FrameLayout frameLayout = view.findViewById(R.id.layout_video);
frameLayout.removeAllViews();
if (mSmallLayout.getVisibility() == View.GONE && mVideoItemView != null
&& (mVideoItemView.isCurrentPlay()
|| mVideoItemView.currentState == JZVideoPlayer.CURRENT_STATE_PREPARING)) {

mSmallLayout.setVisibility(View.VISIBLE);
mVideoLayout.removeAllViews();
mVideoLayout.addView(mVideoItemView);
}
}
}
}
}

private void playVideoForSmallOrFull(int position) {
INewsyunBaseFragment.this.position = position;
// 点击播放进行阅读进度请求
if (!ListUtils.isEmpty(mCommonList) && position != -1) {
String contentId = String.valueOf(mCommonList.get(position).getContentId());
//updateContentCount(contentId);
//uploadReadProgress(contentId);
}

if (mVideoItemView.currentState == JZVideoPlayer.CURRENT_STATE_PAUSE || mVideoItemView.currentState == JZVideoPlayer.CURRENT_STATE_PLAYING) {
if (position != lastPosition) {
JZVideoPlayer.releaseAllVideos();
}
}

if (mSmallLayout.getVisibility() == View.VISIBLE) {
mSmallLayout.setVisibility(View.GONE);
mVideoLayout.removeAllViews();
}

if (lastPosition != -1) {
// 找到videoitemview的父类,然后remove
ViewGroup last = (ViewGroup) mVideoItemView.getParent();
if (last != null) {
last.removeAllViews();
View itemView = (View) last.getParent();
if (itemView != null) {
itemView.findViewById(R.id.showview).setVisibility(View.VISIBLE);
}
}
}

View view = mCommonRecyclerView.findViewHolderForAdapterPosition(position).itemView;
FrameLayout frameLayout = view.findViewById(R.id.layout_video);
frameLayout.removeAllViews();
frameLayout.addView(mVideoItemView);
//Glide.with(context).asBitmap().load(mCommonList.get(position).getContentTitleImg()).into(mVideoItemView.thumbImageView);
mVideoItemView.setUp(mCommonList.get(position).getContentVideo(), JZVideoPlayerStandard.SCREEN_WINDOW_NORMAL, "");
mVideoItemView.startVideo();
lastPosition = position;
}
  1. 视频播放功能实现
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
private void playVideoForSmallOrFull(int position) {
INewsyunBaseFragment.this.position = position;
// 点击播放进行阅读进度请求
if (!ListUtils.isEmpty(mCommonList) && position != -1) {
String contentId = String.valueOf(mCommonList.get(position).getContentId());
//updateContentCount(contentId);
//uploadReadProgress(contentId);
}

if (mVideoItemView.currentState == JZVideoPlayer.CURRENT_STATE_PAUSE || mVideoItemView.currentState == JZVideoPlayer.CURRENT_STATE_PLAYING) {
if (position != lastPosition) {
JZVideoPlayer.releaseAllVideos();
}
}

if (mSmallLayout.getVisibility() == View.VISIBLE) {
mSmallLayout.setVisibility(View.GONE);
mVideoLayout.removeAllViews();
}

if (lastPosition != -1) {
// 找到videoitemview的父类,然后remove
ViewGroup last = (ViewGroup) mVideoItemView.getParent();
if (last != null) {
last.removeAllViews();
View itemView = (View) last.getParent();
if (itemView != null) {
itemView.findViewById(R.id.showview).setVisibility(View.VISIBLE);
}
}
}

View view = mCommonRecyclerView.findViewHolderForAdapterPosition(position).itemView;
FrameLayout frameLayout = view.findViewById(R.id.layout_video);
frameLayout.removeAllViews();
frameLayout.addView(mVideoItemView);
//Glide.with(context).asBitmap().load(mCommonList.get(position).getContentTitleImg()).into(mVideoItemView.thumbImageView);
mVideoItemView.setUp(mCommonList.get(position).getContentVideo(), JZVideoPlayerStandard.SCREEN_WINDOW_NORMAL, "");
mVideoItemView.startVideo();
lastPosition = position;
}
  1. 关闭视频播放的操作
1
2
3
4
5
6
7
8
9
10
11
12
/**
* 关闭视频播放的操作
*/
public void closePlayer() {
if (mVideoItemView.isCurrentPlay() || mSmallLayout.getVisibility() == View.VISIBLE
|| mVideoItemView.currentState == JZVideoPlayer.CURRENT_STATE_PAUSE || mVideoItemView.currentState == JZVideoPlayer.CURRENT_STATE_PLAYING) {
mVideoLayout.removeAllViews();
mSmallLayout.setVisibility(View.GONE);
}
JZVideoPlayer.releaseAllVideos();
mCommonAdapter.notifyDataSetChanged();
}