Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
NotesChapter
GSYVideoPlayer
提交
c5197b1c
G
GSYVideoPlayer
项目概览
NotesChapter
/
GSYVideoPlayer
与 Fork 源项目一致
从无法访问的项目Fork
通知
8
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
G
GSYVideoPlayer
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
c5197b1c
编写于
6月 21, 2018
作者:
S
shuyu
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
增加列表广告模式2
上级
28425772
变更
5
隐藏空白更改
内联
并排
Showing
5 changed file
with
415 addition
and
1 deletion
+415
-1
app/src/main/AndroidManifest.xml
app/src/main/AndroidManifest.xml
+7
-0
app/src/main/java/com/example/gsyvideoplayer/ListADVideoActivity2.java
...java/com/example/gsyvideoplayer/ListADVideoActivity2.java
+334
-0
app/src/main/java/com/example/gsyvideoplayer/utils/JumpUtils.java
...main/java/com/example/gsyvideoplayer/utils/JumpUtils.java
+3
-1
app/src/main/java/com/example/gsyvideoplayer/video/RequestListADVideoPlayer.java
...xample/gsyvideoplayer/video/RequestListADVideoPlayer.java
+52
-0
app/src/main/res/layout/list_video_item_ad2.xml
app/src/main/res/layout/list_video_item_ad2.xml
+19
-0
未找到文件。
app/src/main/AndroidManifest.xml
浏览文件 @
c5197b1c
...
...
@@ -138,6 +138,13 @@
android:screenOrientation=
"portrait"
android:theme=
"@style/Theme.AppCompat.Translucent"
/>
<activity
android:name=
".ListADVideoActivity2"
android:configChanges=
"orientation|keyboardHidden|screenSize"
android:screenOrientation=
"portrait"
android:theme=
"@style/Theme.AppCompat.Translucent"
/>
<activity
android:name=
".exo.DetailExoListPlayer"
android:configChanges=
"orientation|keyboardHidden|screenSize"
...
...
app/src/main/java/com/example/gsyvideoplayer/ListADVideoActivity2.java
0 → 100644
浏览文件 @
c5197b1c
package
com.example.gsyvideoplayer
;
import
android.content.Context
;
import
android.os.Build
;
import
android.os.Bundle
;
import
android.support.v7.app.AppCompatActivity
;
import
android.transition.Explode
;
import
android.view.LayoutInflater
;
import
android.view.View
;
import
android.view.ViewGroup
;
import
android.view.Window
;
import
android.widget.AbsListView
;
import
android.widget.BaseAdapter
;
import
android.widget.ListView
;
import
com.example.gsyvideoplayer.model.VideoModel
;
import
com.example.gsyvideoplayer.video.RequestListADVideoPlayer
;
import
com.example.gsyvideoplayer.video.SampleCoverVideo
;
import
com.shuyu.gsyvideoplayer.GSYVideoADManager
;
import
com.shuyu.gsyvideoplayer.GSYVideoManager
;
import
com.shuyu.gsyvideoplayer.listener.GSYSampleCallBack
;
import
com.shuyu.gsyvideoplayer.video.GSYADVideoPlayer
;
import
com.shuyu.gsyvideoplayer.video.StandardGSYVideoPlayer
;
import
java.util.ArrayList
;
import
java.util.List
;
import
butterknife.BindView
;
import
butterknife.ButterKnife
;
/**
* 带广告播放列表,支持中间插入广告模式
*/
public
class
ListADVideoActivity2
extends
AppCompatActivity
{
@BindView
(
R
.
id
.
video_list
)
ListView
videoList
;
ListADNormalAdapter
listADNormalAdapter
;
@Override
protected
void
onCreate
(
Bundle
savedInstanceState
)
{
// 设置一个exit transition
if
(
Build
.
VERSION
.
SDK_INT
>=
Build
.
VERSION_CODES
.
LOLLIPOP
)
{
getWindow
().
requestFeature
(
Window
.
FEATURE_CONTENT_TRANSITIONS
);
getWindow
().
setEnterTransition
(
new
Explode
());
getWindow
().
setExitTransition
(
new
Explode
());
}
super
.
onCreate
(
savedInstanceState
);
setContentView
(
R
.
layout
.
activity_list_video
);
ButterKnife
.
bind
(
this
);
listADNormalAdapter
=
new
ListADNormalAdapter
(
this
);
videoList
.
setAdapter
(
listADNormalAdapter
);
videoList
.
setOnScrollListener
(
new
AbsListView
.
OnScrollListener
()
{
@Override
public
void
onScrollStateChanged
(
AbsListView
view
,
int
scrollState
)
{
}
@Override
public
void
onScroll
(
AbsListView
view
,
int
firstVisibleItem
,
int
visibleItemCount
,
int
totalItemCount
)
{
int
lastVisibleItem
=
firstVisibleItem
+
visibleItemCount
;
//大于0说明有播放
if
(
GSYVideoManager
.
instance
().
getPlayPosition
()
>=
0
)
{
//当前播放的位置
int
position
=
GSYVideoManager
.
instance
().
getPlayPosition
();
//对应的播放列表TAG
if
(
GSYVideoManager
.
instance
().
getPlayTag
().
equals
(
ListADNormalAdapter
.
TAG
)
&&
(
position
<
firstVisibleItem
||
position
>
lastVisibleItem
))
{
//如果滑出去了上面和下面就是否,和今日头条一样
//释放广告和视频
if
(
GSYVideoADManager
.
instance
().
listener
()
!=
null
)
{
GSYVideoADManager
.
instance
().
listener
().
onAutoCompletion
();
}
GSYVideoADManager
.
releaseAllVideos
();
GSYVideoManager
.
releaseAllVideos
();
listADNormalAdapter
.
notifyDataSetChanged
();
}
}
}
});
}
@Override
public
void
onBackPressed
()
{
if
(
GSYVideoADManager
.
backFromWindowFull
(
this
))
{
return
;
}
if
(
GSYVideoManager
.
backFromWindowFull
(
this
))
{
return
;
}
super
.
onBackPressed
();
}
@Override
protected
void
onPause
()
{
super
.
onPause
();
GSYVideoManager
.
onPause
();
GSYVideoADManager
.
onPause
();
}
@Override
protected
void
onResume
()
{
super
.
onResume
();
GSYVideoManager
.
onResume
();
GSYVideoADManager
.
onResume
();
}
@Override
protected
void
onDestroy
()
{
super
.
onDestroy
();
GSYVideoManager
.
releaseAllVideos
();
GSYVideoADManager
.
releaseAllVideos
();
}
public
class
ListADNormalAdapter
extends
BaseAdapter
{
public
static
final
String
TAG
=
"ListADNormalAdapter"
;
private
List
<
VideoModel
>
list
=
new
ArrayList
<>();
private
LayoutInflater
inflater
=
null
;
private
Context
context
;
public
ListADNormalAdapter
(
Context
context
)
{
super
();
this
.
context
=
context
;
inflater
=
LayoutInflater
.
from
(
context
);
for
(
int
i
=
0
;
i
<
40
;
i
++)
{
list
.
add
(
new
VideoModel
());
}
}
@Override
public
int
getCount
()
{
return
list
.
size
();
}
@Override
public
Object
getItem
(
int
position
)
{
return
null
;
}
@Override
public
long
getItemId
(
int
position
)
{
return
0
;
}
@Override
public
View
getView
(
final
int
position
,
View
convertView
,
ViewGroup
parent
)
{
final
ViewHolder
holder
;
if
(
convertView
==
null
)
{
holder
=
new
ViewHolder
();
convertView
=
inflater
.
inflate
(
R
.
layout
.
list_video_item_ad2
,
null
);
holder
.
gsyVideoPlayer
=
(
SampleCoverVideo
)
convertView
.
findViewById
(
R
.
id
.
video_item_player
);
holder
.
adVideoPlayer
=
(
RequestListADVideoPlayer
)
convertView
.
findViewById
(
R
.
id
.
video_ad_player
);
convertView
.
setTag
(
holder
);
}
else
{
holder
=
(
ViewHolder
)
convertView
.
getTag
();
}
final
String
url
=
"http://9890.vod.myqcloud.com/9890_4e292f9a3dd011e6b4078980237cc3d3.f20.mp4"
;
final
String
urlAD
=
"http://video.7k.cn/app_video/20171202/6c8cf3ea/v.m3u8.mp4"
;
//多个播放时必须在setUpLazy、setUp和getGSYVideoManager()等前面设置
holder
.
gsyVideoPlayer
.
setPlayTag
(
TAG
);
holder
.
gsyVideoPlayer
.
setPlayPosition
(
position
);
boolean
isPlaying
=
holder
.
gsyVideoPlayer
.
getCurrentPlayer
().
isInPlayingState
();
if
(!
isPlaying
)
{
holder
.
gsyVideoPlayer
.
setUpLazy
(
url
,
false
,
null
,
null
,
"这是title"
);
}
boolean
isADPlaying
=
holder
.
adVideoPlayer
.
getCurrentPlayer
().
isInPlayingState
();
if
(!
isADPlaying
)
{
holder
.
adVideoPlayer
.
setUpLazy
(
urlAD
,
false
,
null
,
null
,
"这是title"
);
}
//增加title
holder
.
gsyVideoPlayer
.
getTitleTextView
().
setVisibility
(
View
.
GONE
);
//设置返回键
holder
.
gsyVideoPlayer
.
getBackButton
().
setVisibility
(
View
.
GONE
);
//设置全屏按键功能
holder
.
gsyVideoPlayer
.
getFullscreenButton
().
setOnClickListener
(
new
View
.
OnClickListener
()
{
@Override
public
void
onClick
(
View
v
)
{
resolveFullBtn
(
holder
.
gsyVideoPlayer
);
}
});
holder
.
adVideoPlayer
.
getFullscreenButton
().
setOnClickListener
(
new
View
.
OnClickListener
()
{
@Override
public
void
onClick
(
View
v
)
{
resolveFullBtn
(
holder
.
adVideoPlayer
);
}
});
holder
.
gsyVideoPlayer
.
setRotateViewAuto
(
false
);
holder
.
adVideoPlayer
.
setRotateViewAuto
(
false
);
holder
.
gsyVideoPlayer
.
setLockLand
(
true
);
holder
.
adVideoPlayer
.
setLockLand
(
true
);
holder
.
gsyVideoPlayer
.
setReleaseWhenLossAudio
(
false
);
holder
.
adVideoPlayer
.
setReleaseWhenLossAudio
(
false
);
holder
.
gsyVideoPlayer
.
setShowFullAnimation
(
false
);
holder
.
adVideoPlayer
.
setShowFullAnimation
(
false
);
holder
.
gsyVideoPlayer
.
setIsTouchWiget
(
false
);
holder
.
adVideoPlayer
.
setIsTouchWiget
(
false
);
holder
.
gsyVideoPlayer
.
setNeedLockFull
(
true
);
if
(
position
%
2
==
0
)
{
holder
.
gsyVideoPlayer
.
loadCoverImage
(
url
,
R
.
mipmap
.
xxx1
);
}
else
{
holder
.
gsyVideoPlayer
.
loadCoverImage
(
url
,
R
.
mipmap
.
xxx2
);
}
holder
.
gsyVideoPlayer
.
setVideoAllCallBack
(
new
GSYSampleCallBack
()
{
@Override
public
void
onClickStartIcon
(
String
url
,
Object
...
objects
)
{
super
.
onClickStartIcon
(
url
,
objects
);
if
(
holder
.
adVideoPlayer
.
getGSYVideoManager
().
listener
()
!=
null
)
{
holder
.
adVideoPlayer
.
getGSYVideoManager
().
listener
().
onAutoCompletion
();
}
}
@Override
public
void
onPrepared
(
String
url
,
Object
...
objects
)
{
super
.
onPrepared
(
url
,
objects
);
if
(
isNeedAdOnStart
())
{
holder
.
gsyVideoPlayer
.
getCurrentPlayer
().
onVideoPause
();
startAdPlay
(
holder
.
adVideoPlayer
,
holder
.
gsyVideoPlayer
);
}
}
@Override
public
void
onQuitFullscreen
(
String
url
,
Object
...
objects
)
{
super
.
onQuitFullscreen
(
url
,
objects
);
}
@Override
public
void
onEnterFullscreen
(
String
url
,
Object
...
objects
)
{
super
.
onEnterFullscreen
(
url
,
objects
);
holder
.
gsyVideoPlayer
.
getCurrentPlayer
().
getTitleTextView
().
setText
((
String
)
objects
[
0
]);
}
@Override
public
void
onAutoComplete
(
String
url
,
Object
...
objects
)
{
super
.
onAutoComplete
(
url
,
objects
);
}
});
holder
.
adVideoPlayer
.
setVideoAllCallBack
(
new
GSYSampleCallBack
()
{
@Override
public
void
onAutoComplete
(
String
url
,
Object
...
objects
)
{
//广告结束,释放
holder
.
adVideoPlayer
.
getCurrentPlayer
().
release
();
holder
.
adVideoPlayer
.
onVideoReset
();
holder
.
adVideoPlayer
.
setVisibility
(
View
.
GONE
);
//开始播放原视频,根据是否处于全屏状态判断
int
playPosition
=
holder
.
gsyVideoPlayer
.
getGSYVideoManager
().
getPlayPosition
();
if
(
position
==
playPosition
)
{
holder
.
gsyVideoPlayer
.
getCurrentPlayer
().
startAfterPrepared
();
}
if
(
holder
.
adVideoPlayer
.
getCurrentPlayer
().
isIfCurrentIsFullscreen
())
{
holder
.
adVideoPlayer
.
removeFullWindowViewOnly
();
if
(!
holder
.
gsyVideoPlayer
.
getCurrentPlayer
().
isIfCurrentIsFullscreen
())
{
resolveFullBtn
(
holder
.
gsyVideoPlayer
);
holder
.
gsyVideoPlayer
.
setSaveBeforeFullSystemUiVisibility
(
holder
.
adVideoPlayer
.
getSaveBeforeFullSystemUiVisibility
());
}
}
}
@Override
public
void
onQuitFullscreen
(
String
url
,
Object
...
objects
)
{
//退出全屏逻辑
if
(
holder
.
gsyVideoPlayer
.
isIfCurrentIsFullscreen
())
{
holder
.
gsyVideoPlayer
.
onBackFullscreen
();
}
}
});
return
convertView
;
}
/**
* 全屏幕按键处理
*/
private
void
resolveFullBtn
(
final
StandardGSYVideoPlayer
standardGSYVideoPlayer
)
{
standardGSYVideoPlayer
.
startWindowFullscreen
(
context
,
false
,
true
);
}
/**
* 显示播放广告
*/
public
void
startAdPlay
(
GSYADVideoPlayer
gsyadVideoPlayer
,
StandardGSYVideoPlayer
normalPlayer
)
{
gsyadVideoPlayer
.
setVisibility
(
View
.
VISIBLE
);
gsyadVideoPlayer
.
startPlayLogic
();
if
(
normalPlayer
.
getCurrentPlayer
().
isIfCurrentIsFullscreen
())
{
resolveFullBtn
(
gsyadVideoPlayer
);
gsyadVideoPlayer
.
setSaveBeforeFullSystemUiVisibility
(
normalPlayer
.
getSaveBeforeFullSystemUiVisibility
());
}
}
class
ViewHolder
{
SampleCoverVideo
gsyVideoPlayer
;
RequestListADVideoPlayer
adVideoPlayer
;
}
}
/**
* 需要片头广告
*/
public
boolean
isNeedAdOnStart
()
{
return
true
;
}
}
app/src/main/java/com/example/gsyvideoplayer/utils/JumpUtils.java
浏览文件 @
c5197b1c
...
...
@@ -19,6 +19,7 @@ import com.example.gsyvideoplayer.DetailPlayer;
import
com.example.gsyvideoplayer.FragmentVideoActivity
;
import
com.example.gsyvideoplayer.InputUrlDetailActivity
;
import
com.example.gsyvideoplayer.ListADVideoActivity
;
import
com.example.gsyvideoplayer.ListADVideoActivity2
;
import
com.example.gsyvideoplayer.ListMultiVideoActivity
;
import
com.example.gsyvideoplayer.ListVideo2Activity
;
import
com.example.gsyvideoplayer.ListVideoActivity
;
...
...
@@ -202,7 +203,8 @@ public class JumpUtils {
* @param activity
*/
public
static
void
goToADListVideoPlayer
(
Activity
activity
)
{
Intent
intent
=
new
Intent
(
activity
,
ListADVideoActivity
.
class
);
//Intent intent = new Intent(activity, ListADVideoActivity.class);
Intent
intent
=
new
Intent
(
activity
,
ListADVideoActivity2
.
class
);
ActivityOptionsCompat
activityOptions
=
ActivityOptionsCompat
.
makeSceneTransitionAnimation
(
activity
);
ActivityCompat
.
startActivity
(
activity
,
intent
,
activityOptions
.
toBundle
());
}
...
...
app/src/main/java/com/example/gsyvideoplayer/video/RequestListADVideoPlayer.java
0 → 100644
浏览文件 @
c5197b1c
package
com.example.gsyvideoplayer.video
;
import
android.content.Context
;
import
android.os.Handler
;
import
android.util.AttributeSet
;
import
com.shuyu.gsyvideoplayer.GSYVideoADManager
;
import
java.util.Random
;
public
class
RequestListADVideoPlayer
extends
ListADVideoPlayer
{
public
RequestListADVideoPlayer
(
Context
context
,
Boolean
fullFlag
)
{
super
(
context
,
fullFlag
);
}
public
RequestListADVideoPlayer
(
Context
context
)
{
super
(
context
);
}
public
RequestListADVideoPlayer
(
Context
context
,
AttributeSet
attrs
)
{
super
(
context
,
attrs
);
}
@Override
public
void
startPlayLogic
()
{
//模拟请求
new
Handler
().
postDelayed
(
new
Runnable
()
{
@Override
public
void
run
()
{
int
min
=
1
;
int
max
=
10
;
Random
random
=
new
Random
();
int
i
=
random
.
nextInt
(
max
)
%
(
max
-
min
+
1
)
+
min
;
if
(
i
%
3
==
0
)
{
mOriginUrl
=
"http://7xse1z.com1.z0.glb.clouddn.com/1491813192"
;
mUrl
=
"http://7xse1z.com1.z0.glb.clouddn.com/1491813192"
;
mTitle
=
"ggg2"
;
}
else
if
(
i
%
4
==
0
)
{
//模拟请求失败
onError
(
0
,
0
);
}
else
{
mOriginUrl
=
"http://video.7k.cn/app_video/20171202/6c8cf3ea/v.m3u8.mp4"
;
mUrl
=
"http://video.7k.cn/app_video/20171202/6c8cf3ea/v.m3u8.mp4"
;
mTitle
=
"ffff1"
;
}
mCache
=
false
;
RequestListADVideoPlayer
.
super
.
startPlayLogic
();
}
},
2000
);
}
}
app/src/main/res/layout/list_video_item_ad2.xml
0 → 100644
浏览文件 @
c5197b1c
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
xmlns:android=
"http://schemas.android.com/apk/res/android"
android:layout_width=
"match_parent"
android:layout_height=
"wrap_content"
>
<com.example.gsyvideoplayer.video.SampleCoverVideo
android:id=
"@+id/video_item_player"
android:layout_width=
"match_parent"
android:layout_height=
"@dimen/post_media_height"
/>
<com.example.gsyvideoplayer.video.RequestListADVideoPlayer
android:id=
"@+id/video_ad_player"
android:layout_width=
"match_parent"
android:layout_height=
"@dimen/post_media_height"
android:visibility=
"gone"
/>
</RelativeLayout>
\ No newline at end of file
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录