Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
ac13
GSYVideoPlayer
提交
33b26bdf
G
GSYVideoPlayer
项目概览
ac13
/
GSYVideoPlayer
与 Fork 源项目一致
从无法访问的项目Fork
通知
7
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,体验更适合开发者的 AI 搜索 >>
提交
33b26bdf
编写于
6月 04, 2018
作者:
G
guoshuyu
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
update demo
上级
5514f4f8
变更
19
隐藏空白更改
内联
并排
Showing
19 changed file
with
1122 addition
and
89 deletion
+1122
-89
README.md
README.md
+1
-0
app/src/main/AndroidManifest.xml
app/src/main/AndroidManifest.xml
+33
-3
app/src/main/java/com/example/gsyvideoplayer/MainActivity.java
...rc/main/java/com/example/gsyvideoplayer/MainActivity.java
+7
-1
app/src/main/java/com/example/gsyvideoplayer/simple/SimpleActivity.java
...ava/com/example/gsyvideoplayer/simple/SimpleActivity.java
+68
-0
app/src/main/java/com/example/gsyvideoplayer/simple/SimpleDetailActivityMode1.java
...mple/gsyvideoplayer/simple/SimpleDetailActivityMode1.java
+87
-0
app/src/main/java/com/example/gsyvideoplayer/simple/SimpleDetailActivityMode2.java
...mple/gsyvideoplayer/simple/SimpleDetailActivityMode2.java
+148
-0
app/src/main/java/com/example/gsyvideoplayer/simple/SimpleListVideoActivityMode1.java
...e/gsyvideoplayer/simple/SimpleListVideoActivityMode1.java
+84
-0
app/src/main/java/com/example/gsyvideoplayer/simple/SimpleListVideoActivityMode2.java
...e/gsyvideoplayer/simple/SimpleListVideoActivityMode2.java
+131
-0
app/src/main/java/com/example/gsyvideoplayer/simple/SimplePlayer.java
.../java/com/example/gsyvideoplayer/simple/SimplePlayer.java
+96
-0
app/src/main/java/com/example/gsyvideoplayer/simple/adapter/SimpleListVIdeoModel1Adapter.java
...eoplayer/simple/adapter/SimpleListVIdeoModel1Adapter.java
+113
-0
app/src/main/java/com/example/gsyvideoplayer/simple/adapter/SimpleListVideoModel2Adapter.java
...eoplayer/simple/adapter/SimpleListVideoModel2Adapter.java
+110
-0
app/src/main/res/layout/activity_main.xml
app/src/main/res/layout/activity_main.xml
+7
-0
app/src/main/res/layout/activity_simple.xml
app/src/main/res/layout/activity_simple.xml
+55
-0
app/src/main/res/layout/activity_simple_detail_player.xml
app/src/main/res/layout/activity_simple_detail_player.xml
+37
-0
app/src/main/res/layout/activity_simple_play.xml
app/src/main/res/layout/activity_simple_play.xml
+14
-0
app/src/main/res/layout/list_video_simple_model1.xml
app/src/main/res/layout/list_video_simple_model1.xml
+11
-0
app/src/main/res/layout/list_video_simple_model2.xml
app/src/main/res/layout/list_video_simple_model2.xml
+23
-0
app/src/main/res/values/styles.xml
app/src/main/res/values/styles.xml
+3
-0
doc/USE.md
doc/USE.md
+94
-85
未找到文件。
README.md
浏览文件 @
33b26bdf
...
...
@@ -88,6 +88,7 @@ compile 'com.shuyu:gsyVideoPlayer-ex_so:5.0.0-beta'
文档 | 传送门
-------- | ---
**使用说明**
|
***[--- 简单使用,快速上手文档](https://github.com/CarGuo/GSYVideoPlayer/blob/master/doc/USE.md)**
*
**项目解析说明**
|
***[--- 项目解析说明、包含项目架构和解析](https://github.com/CarGuo/GSYVideoPlayer/blob/master/doc/GSYVIDEO_PLAYER_PROJECT_INFO.md)**
*
接口文档入口|
**[--- 使用说明、接口文档 - 入口](https://github.com/CarGuo/GSYVideoPlayer/wiki)**
**问题集锦入口**
|
***[--- 问题集锦 - 入口(大部分你遇到的问题都在这里解决) ](https://github.com/CarGuo/GSYVideoPlayer/blob/master/doc/QUESTION.md)**
*
...
...
app/src/main/AndroidManifest.xml
浏览文件 @
33b26bdf
...
...
@@ -130,24 +130,54 @@
android:name=
".ListMultiVideoActivity"
android:configChanges=
"orientation|keyboardHidden|screenSize"
android:screenOrientation=
"portrait"
android:theme=
"@style/Theme.AppCompat.Translucent"
/>
android:theme=
"@style/Theme.AppCompat.Translucent"
/>
<activity
android:name=
".ListADVideoActivity"
android:configChanges=
"orientation|keyboardHidden|screenSize"
android:screenOrientation=
"portrait"
android:theme=
"@style/Theme.AppCompat.Translucent"
/>
android:theme=
"@style/Theme.AppCompat.Translucent"
/>
<activity
android:name=
".exo.DetailExoListPlayer"
android:configChanges=
"orientation|keyboardHidden|screenSize"
android:screenOrientation=
"portrait"
/>
<activity
android:name=
".simple.SimplePlayer"
android:configChanges=
"orientation|keyboardHidden|screenSize"
android:theme=
"@style/Theme.AppCompat.Full"
android:screenOrientation=
"portrait"
/>
<activity
android:name=
".simple.SimpleDetailActivityMode1"
android:configChanges=
"orientation|keyboardHidden|screenSize"
android:screenOrientation=
"portrait"
/>
<activity
android:name=
".simple.SimpleDetailActivityMode2"
android:configChanges=
"orientation|keyboardHidden|screenSize"
android:screenOrientation=
"portrait"
/>
<activity
android:name=
".simple.SimpleListVideoActivityMode1"
android:theme=
"@style/Theme.AppCompat.Translucent"
android:configChanges=
"orientation|keyboardHidden|screenSize"
android:screenOrientation=
"portrait"
/>
<activity
android:name=
".simple.SimpleListVideoActivityMode2"
android:theme=
"@style/Theme.AppCompat.Translucent"
android:configChanges=
"orientation|keyboardHidden|screenSize"
android:screenOrientation=
"portrait"
/>
<activity
android:name=
".simple.SimpleActivity"
android:configChanges=
"orientation|keyboardHidden|screenSize"
android:screenOrientation=
"portrait"
/>
<meta-data
android:name=
"android.max_aspect"
android:value=
"2.1"
/>
</application>
</manifest>
\ No newline at end of file
app/src/main/java/com/example/gsyvideoplayer/MainActivity.java
浏览文件 @
33b26bdf
package
com.example.gsyvideoplayer
;
import
android.Manifest
;
import
android.content.Intent
;
import
android.os.Build
;
import
android.os.Bundle
;
import
android.support.annotation.NonNull
;
...
...
@@ -9,6 +10,7 @@ import android.view.View;
import
android.widget.Button
;
import
android.widget.Toast
;
import
com.example.gsyvideoplayer.simple.SimpleActivity
;
import
com.example.gsyvideoplayer.utils.JumpUtils
;
import
com.shuyu.gsyvideoplayer.GSYVideoManager
;
import
com.shuyu.gsyvideoplayer.utils.Debuger
;
...
...
@@ -53,9 +55,13 @@ public class MainActivity extends AppCompatActivity {
@OnClick
({
R
.
id
.
open_btn
,
R
.
id
.
list_btn
,
R
.
id
.
list_btn_2
,
R
.
id
.
list_detail
,
R
.
id
.
clear_cache
,
R
.
id
.
recycler
,
R
.
id
.
recycler_2
,
R
.
id
.
list_detail_list
,
R
.
id
.
web_detail
,
R
.
id
.
danmaku_video
,
R
.
id
.
fragment_video
,
R
.
id
.
more_type
,
R
.
id
.
input_type
,
R
.
id
.
open_btn_empty
,
R
.
id
.
open_control
,
R
.
id
.
open_filter
,
R
.
id
.
open_btn_pick
,
R
.
id
.
open_btn_auto
,
R
.
id
.
open_scroll
,
R
.
id
.
open_window
,
R
.
id
.
open_btn_ad
,
R
.
id
.
open_btn_multi
,
R
.
id
.
open_btn_ad2
,
R
.
id
.
open_list_ad
,
R
.
id
.
open_custom_exo
})
R
.
id
.
open_btn_multi
,
R
.
id
.
open_btn_ad2
,
R
.
id
.
open_list_ad
,
R
.
id
.
open_custom_exo
,
R
.
id
.
open_simple
})
public
void
onClick
(
View
view
)
{
switch
(
view
.
getId
())
{
case
R
.
id
.
open_simple
:
//简单的播放
startActivity
(
new
Intent
(
this
,
SimpleActivity
.
class
));
break
;
case
R
.
id
.
open_btn
:
//直接一个页面播放的
JumpUtils
.
goToVideoPlayer
(
this
,
openBtn
);
...
...
app/src/main/java/com/example/gsyvideoplayer/simple/SimpleActivity.java
0 → 100644
浏览文件 @
33b26bdf
package
com.example.gsyvideoplayer.simple
;
import
android.Manifest
;
import
android.content.Intent
;
import
android.os.Build
;
import
android.os.Bundle
;
import
android.support.annotation.NonNull
;
import
android.support.v7.app.AppCompatActivity
;
import
android.view.View
;
import
android.widget.Button
;
import
android.widget.Toast
;
import
com.example.gsyvideoplayer.R
;
import
com.example.gsyvideoplayer.utils.JumpUtils
;
import
com.shuyu.gsyvideoplayer.GSYVideoManager
;
import
com.shuyu.gsyvideoplayer.utils.Debuger
;
import
butterknife.BindView
;
import
butterknife.ButterKnife
;
import
butterknife.OnClick
;
import
permissions.dispatcher.PermissionUtils
;
public
class
SimpleActivity
extends
AppCompatActivity
{
final
String
[]
permissions
=
{
Manifest
.
permission
.
WRITE_EXTERNAL_STORAGE
};
@Override
protected
void
onCreate
(
Bundle
savedInstanceState
)
{
super
.
onCreate
(
savedInstanceState
);
setContentView
(
R
.
layout
.
activity_simple
);
ButterKnife
.
bind
(
this
);
boolean
hadPermission
=
PermissionUtils
.
hasSelfPermissions
(
this
,
permissions
);
if
(
Build
.
VERSION
.
SDK_INT
>=
Build
.
VERSION_CODES
.
M
&&
!
hadPermission
)
{
String
[]
permissions
=
{
Manifest
.
permission
.
WRITE_EXTERNAL_STORAGE
};
requestPermissions
(
permissions
,
1110
);
}
}
@Override
public
void
onRequestPermissionsResult
(
int
requestCode
,
@NonNull
String
[]
permissions
,
@NonNull
int
[]
grantResults
)
{
super
.
onRequestPermissionsResult
(
requestCode
,
permissions
,
grantResults
);
boolean
sdPermissionResult
=
PermissionUtils
.
verifyPermissions
(
grantResults
);
if
(!
sdPermissionResult
)
{
Toast
.
makeText
(
this
,
"没获取到sd卡权限,无法播放本地视频哦"
,
Toast
.
LENGTH_LONG
).
show
();
}
}
@OnClick
({
R
.
id
.
simple_list_1
,
R
.
id
.
simple_list_2
,
R
.
id
.
simple_detail_1
,
R
.
id
.
simple_detail_2
,
R
.
id
.
simple_player
})
public
void
onClick
(
View
view
)
{
switch
(
view
.
getId
())
{
case
R
.
id
.
simple_player
:
startActivity
(
new
Intent
(
this
,
SimplePlayer
.
class
));
break
;
case
R
.
id
.
simple_list_1
:
startActivity
(
new
Intent
(
this
,
SimpleListVideoActivityMode1
.
class
));
break
;
case
R
.
id
.
simple_list_2
:
startActivity
(
new
Intent
(
this
,
SimpleListVideoActivityMode2
.
class
));
break
;
case
R
.
id
.
simple_detail_1
:
startActivity
(
new
Intent
(
this
,
SimpleDetailActivityMode1
.
class
));
break
;
case
R
.
id
.
simple_detail_2
:
startActivity
(
new
Intent
(
this
,
SimpleDetailActivityMode2
.
class
));
break
;
}
}
}
app/src/main/java/com/example/gsyvideoplayer/simple/SimpleDetailActivityMode1.java
0 → 100644
浏览文件 @
33b26bdf
package
com.example.gsyvideoplayer.simple
;
import
android.os.Bundle
;
import
android.view.View
;
import
android.widget.ImageView
;
import
com.bumptech.glide.Glide
;
import
com.bumptech.glide.request.RequestOptions
;
import
com.example.gsyvideoplayer.R
;
import
com.shuyu.gsyvideoplayer.GSYBaseActivityDetail
;
import
com.shuyu.gsyvideoplayer.builder.GSYVideoOptionBuilder
;
import
com.shuyu.gsyvideoplayer.video.StandardGSYVideoPlayer
;
/**
* 简单详情实现模式1
*/
public
class
SimpleDetailActivityMode1
extends
GSYBaseActivityDetail
<
StandardGSYVideoPlayer
>
{
StandardGSYVideoPlayer
detailPlayer
;
private
String
url
=
"http://9890.vod.myqcloud.com/9890_4e292f9a3dd011e6b4078980237cc3d3.f20.mp4"
;
@Override
protected
void
onCreate
(
Bundle
savedInstanceState
)
{
super
.
onCreate
(
savedInstanceState
);
setContentView
(
R
.
layout
.
activity_simple_detail_player
);
detailPlayer
=
(
StandardGSYVideoPlayer
)
findViewById
(
R
.
id
.
detail_player
);
//增加title
detailPlayer
.
getTitleTextView
().
setVisibility
(
View
.
GONE
);
detailPlayer
.
getBackButton
().
setVisibility
(
View
.
GONE
);
initVideoBuilderMode
();
}
@Override
public
StandardGSYVideoPlayer
getGSYVideoPlayer
()
{
return
detailPlayer
;
}
@Override
public
GSYVideoOptionBuilder
getGSYVideoOptionBuilder
()
{
//内置封面可参考SampleCoverVideo
ImageView
imageView
=
new
ImageView
(
this
);
loadCover
(
imageView
,
url
);
return
new
GSYVideoOptionBuilder
()
.
setThumbImageView
(
imageView
)
.
setUrl
(
url
)
.
setCacheWithPlay
(
true
)
.
setVideoTitle
(
" "
)
.
setIsTouchWiget
(
true
)
.
setRotateViewAuto
(
false
)
.
setLockLand
(
false
)
.
setShowFullAnimation
(
false
)
//打开动画
.
setNeedLockFull
(
true
)
.
setSeekRatio
(
1
);
}
@Override
public
void
clickForFullScreen
()
{
}
/**
* 是否启动旋转横屏,true表示启动
*/
@Override
public
boolean
getDetailOrientationRotateAuto
()
{
return
true
;
}
private
void
loadCover
(
ImageView
imageView
,
String
url
)
{
imageView
.
setScaleType
(
ImageView
.
ScaleType
.
CENTER_CROP
);
imageView
.
setImageResource
(
R
.
mipmap
.
xxx1
);
Glide
.
with
(
this
.
getApplicationContext
())
.
setDefaultRequestOptions
(
new
RequestOptions
()
.
frame
(
3000000
)
.
centerCrop
()
.
error
(
R
.
mipmap
.
xxx2
)
.
placeholder
(
R
.
mipmap
.
xxx1
))
.
load
(
url
)
.
into
(
imageView
);
}
}
app/src/main/java/com/example/gsyvideoplayer/simple/SimpleDetailActivityMode2.java
0 → 100644
浏览文件 @
33b26bdf
package
com.example.gsyvideoplayer.simple
;
import
android.content.res.Configuration
;
import
android.os.Bundle
;
import
android.support.v7.app.AppCompatActivity
;
import
android.view.View
;
import
android.widget.ImageView
;
import
com.example.gsyvideoplayer.R
;
import
com.shuyu.gsyvideoplayer.GSYVideoManager
;
import
com.shuyu.gsyvideoplayer.builder.GSYVideoOptionBuilder
;
import
com.shuyu.gsyvideoplayer.listener.GSYSampleCallBack
;
import
com.shuyu.gsyvideoplayer.listener.LockClickListener
;
import
com.shuyu.gsyvideoplayer.utils.OrientationUtils
;
import
com.shuyu.gsyvideoplayer.video.StandardGSYVideoPlayer
;
/**
* 简单详情实现模式2
*/
public
class
SimpleDetailActivityMode2
extends
AppCompatActivity
{
StandardGSYVideoPlayer
detailPlayer
;
private
boolean
isPlay
;
private
boolean
isPause
;
private
OrientationUtils
orientationUtils
;
@Override
protected
void
onCreate
(
Bundle
savedInstanceState
)
{
super
.
onCreate
(
savedInstanceState
);
setContentView
(
R
.
layout
.
activity_simple_detail_player
);
detailPlayer
=
(
StandardGSYVideoPlayer
)
findViewById
(
R
.
id
.
detail_player
);
String
url
=
"http://7xse1z.com1.z0.glb.clouddn.com/1491813192"
;
//增加封面
ImageView
imageView
=
new
ImageView
(
this
);
imageView
.
setScaleType
(
ImageView
.
ScaleType
.
CENTER_CROP
);
imageView
.
setImageResource
(
R
.
mipmap
.
xxx1
);
//增加title
detailPlayer
.
getTitleTextView
().
setVisibility
(
View
.
GONE
);
detailPlayer
.
getBackButton
().
setVisibility
(
View
.
GONE
);
//外部辅助的旋转,帮助全屏
orientationUtils
=
new
OrientationUtils
(
this
,
detailPlayer
);
//初始化不打开外部的旋转
orientationUtils
.
setEnable
(
false
);
GSYVideoOptionBuilder
gsyVideoOption
=
new
GSYVideoOptionBuilder
();
gsyVideoOption
.
setThumbImageView
(
imageView
)
.
setIsTouchWiget
(
true
)
.
setRotateViewAuto
(
false
)
.
setLockLand
(
false
)
.
setAutoFullWithSize
(
true
)
.
setShowFullAnimation
(
false
)
.
setNeedLockFull
(
true
)
.
setUrl
(
url
)
.
setCacheWithPlay
(
false
)
.
setVideoTitle
(
"测试视频"
)
.
setVideoAllCallBack
(
new
GSYSampleCallBack
()
{
@Override
public
void
onPrepared
(
String
url
,
Object
...
objects
)
{
super
.
onPrepared
(
url
,
objects
);
//开始播放了才能旋转和全屏
orientationUtils
.
setEnable
(
true
);
isPlay
=
true
;
}
@Override
public
void
onQuitFullscreen
(
String
url
,
Object
...
objects
)
{
super
.
onQuitFullscreen
(
url
,
objects
);
if
(
orientationUtils
!=
null
)
{
orientationUtils
.
backToProtVideo
();
}
}
}).
setLockClickListener
(
new
LockClickListener
()
{
@Override
public
void
onClick
(
View
view
,
boolean
lock
)
{
if
(
orientationUtils
!=
null
)
{
//配合下方的onConfigurationChanged
orientationUtils
.
setEnable
(!
lock
);
}
}
}).
build
(
detailPlayer
);
detailPlayer
.
getFullscreenButton
().
setOnClickListener
(
new
View
.
OnClickListener
()
{
@Override
public
void
onClick
(
View
v
)
{
//直接横屏
orientationUtils
.
resolveByClick
();
//第一个true是否需要隐藏actionbar,第二个true是否需要隐藏statusbar
detailPlayer
.
startWindowFullscreen
(
SimpleDetailActivityMode2
.
this
,
true
,
true
);
}
});
}
@Override
public
void
onBackPressed
()
{
if
(
orientationUtils
!=
null
)
{
orientationUtils
.
backToProtVideo
();
}
if
(
GSYVideoManager
.
backFromWindowFull
(
this
))
{
return
;
}
super
.
onBackPressed
();
}
@Override
protected
void
onPause
()
{
detailPlayer
.
getCurrentPlayer
().
onVideoPause
();
super
.
onPause
();
isPause
=
true
;
}
@Override
protected
void
onResume
()
{
detailPlayer
.
getCurrentPlayer
().
onVideoResume
(
false
);
super
.
onResume
();
isPause
=
false
;
}
@Override
protected
void
onDestroy
()
{
super
.
onDestroy
();
if
(
isPlay
)
{
detailPlayer
.
getCurrentPlayer
().
release
();
}
if
(
orientationUtils
!=
null
)
orientationUtils
.
releaseListener
();
}
@Override
public
void
onConfigurationChanged
(
Configuration
newConfig
)
{
super
.
onConfigurationChanged
(
newConfig
);
//如果旋转了就全屏
if
(
isPlay
&&
!
isPause
)
{
detailPlayer
.
onConfigurationChanged
(
this
,
newConfig
,
orientationUtils
,
true
,
true
);
}
}
}
app/src/main/java/com/example/gsyvideoplayer/simple/SimpleListVideoActivityMode1.java
0 → 100644
浏览文件 @
33b26bdf
package
com.example.gsyvideoplayer.simple
;
import
android.os.Bundle
;
import
android.support.v7.app.AppCompatActivity
;
import
android.widget.AbsListView
;
import
android.widget.ListView
;
import
com.example.gsyvideoplayer.R
;
import
com.example.gsyvideoplayer.simple.adapter.SimpleListVideoModel1Adapter
;
import
com.shuyu.gsyvideoplayer.GSYVideoManager
;
/**
* 简单列表实现模式1
*/
public
class
SimpleListVideoActivityMode1
extends
AppCompatActivity
{
ListView
videoList
;
SimpleListVideoModel1Adapter
listNormalAdapter
;
@Override
protected
void
onCreate
(
Bundle
savedInstanceState
)
{
super
.
onCreate
(
savedInstanceState
);
setContentView
(
R
.
layout
.
activity_list_video
);
videoList
=
(
ListView
)
findViewById
(
R
.
id
.
video_list
);
listNormalAdapter
=
new
SimpleListVideoModel1Adapter
(
this
);
videoList
.
setAdapter
(
listNormalAdapter
);
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
(
SimpleListVideoModel1Adapter
.
TAG
)
&&
(
position
<
firstVisibleItem
||
position
>
lastVisibleItem
))
{
if
(
GSYVideoManager
.
isFullState
(
SimpleListVideoActivityMode1
.
this
))
{
return
;
}
//如果滑出去了上面和下面就是否,和今日头条一样
GSYVideoManager
.
releaseAllVideos
();
listNormalAdapter
.
notifyDataSetChanged
();
}
}
}
});
}
@Override
public
void
onBackPressed
()
{
if
(
GSYVideoManager
.
backFromWindowFull
(
this
))
{
return
;
}
super
.
onBackPressed
();
}
@Override
protected
void
onPause
()
{
super
.
onPause
();
GSYVideoManager
.
onPause
();
}
@Override
protected
void
onResume
()
{
super
.
onResume
();
GSYVideoManager
.
onResume
();
}
@Override
protected
void
onDestroy
()
{
super
.
onDestroy
();
GSYVideoManager
.
releaseAllVideos
();
}
}
app/src/main/java/com/example/gsyvideoplayer/simple/SimpleListVideoActivityMode2.java
0 → 100644
浏览文件 @
33b26bdf
package
com.example.gsyvideoplayer.simple
;
import
android.graphics.Point
;
import
android.os.Bundle
;
import
android.support.v7.app.AppCompatActivity
;
import
android.widget.AbsListView
;
import
android.widget.ListView
;
import
android.widget.RelativeLayout
;
import
com.example.gsyvideoplayer.R
;
import
com.example.gsyvideoplayer.simple.adapter.SimpleListVideoModel2Adapter
;
import
com.shuyu.gsyvideoplayer.GSYVideoManager
;
import
com.shuyu.gsyvideoplayer.listener.GSYSampleCallBack
;
import
com.shuyu.gsyvideoplayer.utils.CommonUtil
;
import
com.shuyu.gsyvideoplayer.utils.GSYVideoHelper
;
/**
* 简单列表实现模式2
*/
public
class
SimpleListVideoActivityMode2
extends
AppCompatActivity
{
ListView
videoList
;
RelativeLayout
activityListVideo
;
GSYVideoHelper
smallVideoHelper
;
SimpleListVideoModel2Adapter
listVideoAdapter
;
GSYVideoHelper
.
GSYVideoHelperBuilder
gsySmallVideoHelperBuilder
;
int
lastVisibleItem
;
int
firstVisibleItem
;
@Override
protected
void
onCreate
(
Bundle
savedInstanceState
)
{
super
.
onCreate
(
savedInstanceState
);
setContentView
(
R
.
layout
.
activity_list_video2
);
videoList
=
(
ListView
)
findViewById
(
R
.
id
.
video_list
)
;
activityListVideo
=
(
RelativeLayout
)
findViewById
(
R
.
id
.
activity_list_video
)
;
//创建小窗口帮助类
smallVideoHelper
=
new
GSYVideoHelper
(
this
);
//配置
gsySmallVideoHelperBuilder
=
new
GSYVideoHelper
.
GSYVideoHelperBuilder
();
gsySmallVideoHelperBuilder
.
setHideStatusBar
(
true
)
.
setNeedLockFull
(
true
)
.
setCacheWithPlay
(
true
)
.
setShowFullAnimation
(
false
)
.
setRotateViewAuto
(
false
)
.
setLockLand
(
true
)
.
setVideoAllCallBack
(
new
GSYSampleCallBack
(){
@Override
public
void
onQuitSmallWidget
(
String
url
,
Object
...
objects
)
{
super
.
onQuitSmallWidget
(
url
,
objects
);
//大于0说明有播放,//对应的播放列表TAG
if
(
smallVideoHelper
.
getPlayPosition
()
>=
0
&&
smallVideoHelper
.
getPlayTAG
().
equals
(
SimpleListVideoModel2Adapter
.
TAG
))
{
//当前播放的位置
int
position
=
smallVideoHelper
.
getPlayPosition
();
//不可视的是时候
if
((
position
<
firstVisibleItem
||
position
>
lastVisibleItem
))
{
//释放掉视频
smallVideoHelper
.
releaseVideoPlayer
();
listVideoAdapter
.
notifyDataSetChanged
();
}
}
}
});
smallVideoHelper
.
setGsyVideoOptionBuilder
(
gsySmallVideoHelperBuilder
);
listVideoAdapter
=
new
SimpleListVideoModel2Adapter
(
this
,
smallVideoHelper
,
gsySmallVideoHelperBuilder
);
listVideoAdapter
.
setRootView
(
activityListVideo
);
videoList
.
setAdapter
(
listVideoAdapter
);
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
)
{
SimpleListVideoActivityMode2
.
this
.
firstVisibleItem
=
firstVisibleItem
;
lastVisibleItem
=
firstVisibleItem
+
visibleItemCount
;
//大于0说明有播放,//对应的播放列表TAG
if
(
smallVideoHelper
.
getPlayPosition
()
>=
0
&&
smallVideoHelper
.
getPlayTAG
().
equals
(
SimpleListVideoModel2Adapter
.
TAG
))
{
//当前播放的位置
int
position
=
smallVideoHelper
.
getPlayPosition
();
//不可视的是时候
if
((
position
<
firstVisibleItem
||
position
>
lastVisibleItem
))
{
//如果是小窗口就不需要处理
if
(!
smallVideoHelper
.
isSmall
())
{
//小窗口
int
size
=
CommonUtil
.
dip2px
(
SimpleListVideoActivityMode2
.
this
,
150
);
smallVideoHelper
.
showSmallVideo
(
new
Point
(
size
,
size
),
false
,
true
);
}
}
else
{
if
(
smallVideoHelper
.
isSmall
())
{
smallVideoHelper
.
smallVideoToNormal
();
}
}
}
}
});
}
@Override
public
void
onBackPressed
()
{
if
(
smallVideoHelper
.
backFromFull
())
{
return
;
}
super
.
onBackPressed
();
}
@Override
protected
void
onDestroy
()
{
super
.
onDestroy
();
smallVideoHelper
.
releaseVideoPlayer
();
GSYVideoManager
.
releaseAllVideos
();
}
}
app/src/main/java/com/example/gsyvideoplayer/simple/SimplePlayer.java
0 → 100644
浏览文件 @
33b26bdf
package
com.example.gsyvideoplayer.simple
;
import
android.content.pm.ActivityInfo
;
import
android.os.Bundle
;
import
android.support.v7.app.AppCompatActivity
;
import
android.view.View
;
import
android.widget.ImageView
;
import
com.example.gsyvideoplayer.R
;
import
com.shuyu.gsyvideoplayer.GSYVideoManager
;
import
com.shuyu.gsyvideoplayer.utils.OrientationUtils
;
import
com.shuyu.gsyvideoplayer.video.StandardGSYVideoPlayer
;
public
class
SimplePlayer
extends
AppCompatActivity
{
StandardGSYVideoPlayer
videoPlayer
;
OrientationUtils
orientationUtils
;
@Override
protected
void
onCreate
(
Bundle
savedInstanceState
)
{
super
.
onCreate
(
savedInstanceState
);
setContentView
(
R
.
layout
.
activity_simple_play
);
init
();
}
private
void
init
()
{
videoPlayer
=
(
StandardGSYVideoPlayer
)
findViewById
(
R
.
id
.
video_player
);
String
source1
=
"http://9890.vod.myqcloud.com/9890_4e292f9a3dd011e6b4078980237cc3d3.f20.mp4"
;
videoPlayer
.
setUp
(
source1
,
true
,
"测试视频"
);
//增加封面
ImageView
imageView
=
new
ImageView
(
this
);
imageView
.
setScaleType
(
ImageView
.
ScaleType
.
CENTER_CROP
);
imageView
.
setImageResource
(
R
.
mipmap
.
xxx1
);
videoPlayer
.
setThumbImageView
(
imageView
);
//增加title
videoPlayer
.
getTitleTextView
().
setVisibility
(
View
.
VISIBLE
);
//设置返回键
videoPlayer
.
getBackButton
().
setVisibility
(
View
.
VISIBLE
);
//设置旋转
orientationUtils
=
new
OrientationUtils
(
this
,
videoPlayer
);
//设置全屏按键功能,这是使用的是选择屏幕,而不是全屏
videoPlayer
.
getFullscreenButton
().
setOnClickListener
(
new
View
.
OnClickListener
()
{
@Override
public
void
onClick
(
View
v
)
{
orientationUtils
.
resolveByClick
();
}
});
//是否可以滑动调整
videoPlayer
.
setIsTouchWiget
(
true
);
//设置返回按键功能
videoPlayer
.
getBackButton
().
setOnClickListener
(
new
View
.
OnClickListener
()
{
@Override
public
void
onClick
(
View
v
)
{
onBackPressed
();
}
});
videoPlayer
.
startPlayLogic
();
}
@Override
protected
void
onPause
()
{
super
.
onPause
();
videoPlayer
.
onVideoPause
();
}
@Override
protected
void
onResume
()
{
super
.
onResume
();
videoPlayer
.
onVideoResume
();
}
@Override
protected
void
onDestroy
()
{
super
.
onDestroy
();
GSYVideoManager
.
releaseAllVideos
();
if
(
orientationUtils
!=
null
)
orientationUtils
.
releaseListener
();
}
@Override
public
void
onBackPressed
()
{
//先返回正常状态
if
(
orientationUtils
.
getScreenType
()
==
ActivityInfo
.
SCREEN_ORIENTATION_LANDSCAPE
)
{
videoPlayer
.
getFullscreenButton
().
performClick
();
return
;
}
//释放所有
videoPlayer
.
setVideoAllCallBack
(
null
);
super
.
onBackPressed
();
}
}
app/src/main/java/com/example/gsyvideoplayer/simple/adapter/SimpleListVIdeoModel1Adapter.java
0 → 100644
浏览文件 @
33b26bdf
package
com.example.gsyvideoplayer.simple.adapter
;
import
android.content.Context
;
import
android.view.LayoutInflater
;
import
android.view.View
;
import
android.view.ViewGroup
;
import
android.widget.BaseAdapter
;
import
com.example.gsyvideoplayer.R
;
import
com.example.gsyvideoplayer.model.VideoModel
;
import
com.example.gsyvideoplayer.video.SampleCoverVideo
;
import
com.shuyu.gsyvideoplayer.utils.OrientationUtils
;
import
com.shuyu.gsyvideoplayer.video.StandardGSYVideoPlayer
;
import
java.util.ArrayList
;
import
java.util.List
;
public
class
SimpleListVideoModel1Adapter
extends
BaseAdapter
{
public
static
final
String
TAG
=
"ListNormalAdapter22"
;
private
List
<
VideoModel
>
list
=
new
ArrayList
<>();
private
LayoutInflater
inflater
=
null
;
private
Context
context
;
private
StandardGSYVideoPlayer
curPlayer
;
protected
OrientationUtils
orientationUtils
;
protected
boolean
isPlay
;
protected
boolean
isFull
;
public
SimpleListVideoModel1Adapter
(
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_simple_model1
,
null
);
holder
.
gsyVideoPlayer
=
(
SampleCoverVideo
)
convertView
.
findViewById
(
R
.
id
.
video_item_player
);
convertView
.
setTag
(
holder
);
}
else
{
holder
=
(
ViewHolder
)
convertView
.
getTag
();
}
final
String
urlH
=
"http://9890.vod.myqcloud.com/9890_4e292f9a3dd011e6b4078980237cc3d3.f20.mp4"
;
final
String
urlV
=
"http://7xse1z.com1.z0.glb.clouddn.com/1491813192"
;
final
String
url
=
(
position
%
2
==
0
)
?
urlH
:
urlV
;
if
(
position
%
2
==
0
)
{
holder
.
gsyVideoPlayer
.
loadCoverImage
(
url
,
R
.
mipmap
.
xxx1
);
}
else
{
holder
.
gsyVideoPlayer
.
loadCoverImage
(
url
,
R
.
mipmap
.
xxx2
);
}
holder
.
gsyVideoPlayer
.
setUpLazy
(
url
,
true
,
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
)
{
holder
.
gsyVideoPlayer
.
startWindowFullscreen
(
context
,
false
,
true
);
}
});
//防止错位设置
holder
.
gsyVideoPlayer
.
setPlayTag
(
TAG
);
holder
.
gsyVideoPlayer
.
setPlayPosition
(
position
);
//是否根据视频尺寸,自动选择竖屏全屏或者横屏全屏
holder
.
gsyVideoPlayer
.
setAutoFullWithSize
(
true
);
//音频焦点冲突时是否释放
holder
.
gsyVideoPlayer
.
setReleaseWhenLossAudio
(
false
);
//全屏动画
holder
.
gsyVideoPlayer
.
setShowFullAnimation
(
true
);
//小屏时不触摸滑动
holder
.
gsyVideoPlayer
.
setIsTouchWiget
(
false
);
//全屏是否需要lock功能
return
convertView
;
}
class
ViewHolder
{
SampleCoverVideo
gsyVideoPlayer
;
}
}
app/src/main/java/com/example/gsyvideoplayer/simple/adapter/SimpleListVideoModel2Adapter.java
0 → 100644
浏览文件 @
33b26bdf
package
com.example.gsyvideoplayer.simple.adapter
;
import
android.content.Context
;
import
android.view.LayoutInflater
;
import
android.view.View
;
import
android.view.ViewGroup
;
import
android.widget.BaseAdapter
;
import
android.widget.FrameLayout
;
import
android.widget.ImageView
;
import
com.example.gsyvideoplayer.R
;
import
com.example.gsyvideoplayer.model.VideoModel
;
import
com.shuyu.gsyvideoplayer.utils.GSYVideoHelper
;
import
com.shuyu.gsyvideoplayer.utils.OrientationUtils
;
import
java.util.ArrayList
;
import
java.util.List
;
public
class
SimpleListVideoModel2Adapter
extends
BaseAdapter
{
public
final
static
String
TAG
=
"TT22"
;
private
List
<
VideoModel
>
list
=
new
ArrayList
<>();
private
LayoutInflater
inflater
=
null
;
private
Context
context
;
private
ViewGroup
rootView
;
private
OrientationUtils
orientationUtils
;
private
boolean
isFullVideo
;
private
GSYVideoHelper
smallVideoHelper
;
private
GSYVideoHelper
.
GSYVideoHelperBuilder
gsySmallVideoHelperBuilder
;
public
SimpleListVideoModel2Adapter
(
Context
context
,
GSYVideoHelper
smallVideoHelper
,
GSYVideoHelper
.
GSYVideoHelperBuilder
gsySmallVideoHelperBuilder
)
{
super
();
this
.
context
=
context
;
this
.
smallVideoHelper
=
smallVideoHelper
;
this
.
gsySmallVideoHelperBuilder
=
gsySmallVideoHelperBuilder
;
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_simple_model2
,
null
);
holder
.
videoContainer
=
(
FrameLayout
)
convertView
.
findViewById
(
R
.
id
.
list_item_container
);
holder
.
playerBtn
=
(
ImageView
)
convertView
.
findViewById
(
R
.
id
.
list_item_btn
);
holder
.
imageView
=
new
ImageView
(
context
);
convertView
.
setTag
(
holder
);
}
else
{
holder
=
(
ViewHolder
)
convertView
.
getTag
();
}
//增加封面
holder
.
imageView
.
setScaleType
(
ImageView
.
ScaleType
.
CENTER_CROP
);
holder
.
imageView
.
setImageResource
(
R
.
mipmap
.
xxx1
);
smallVideoHelper
.
addVideoPlayer
(
position
,
holder
.
imageView
,
TAG
,
holder
.
videoContainer
,
holder
.
playerBtn
);
holder
.
playerBtn
.
setOnClickListener
(
new
View
.
OnClickListener
()
{
@Override
public
void
onClick
(
View
v
)
{
notifyDataSetChanged
();
smallVideoHelper
.
setPlayPositionAndTag
(
position
,
TAG
);
final
String
url
=
"http://9890.vod.myqcloud.com/9890_4e292f9a3dd011e6b4078980237cc3d3.f20.mp4"
;
gsySmallVideoHelperBuilder
.
setVideoTitle
(
"title "
+
position
)
.
setUrl
(
url
);
smallVideoHelper
.
startPlay
();
}
});
return
convertView
;
}
class
ViewHolder
{
FrameLayout
videoContainer
;
ImageView
playerBtn
;
ImageView
imageView
;
}
public
void
setRootView
(
ViewGroup
rootView
)
{
this
.
rootView
=
rootView
;
}
}
app/src/main/res/layout/activity_main.xml
浏览文件 @
33b26bdf
...
...
@@ -15,10 +15,17 @@
android:paddingTop=
"@dimen/activity_vertical_margin"
tools:context=
"com.example.gsyvideoplayer.MainActivity"
>
<Button
android:id=
"@+id/open_simple"
android:layout_width=
"240dp"
android:layout_height=
"wrap_content"
android:text=
"简单播放"
/>
<Button
android:id=
"@+id/open_btn"
android:layout_width=
"240dp"
android:layout_height=
"wrap_content"
android:layout_marginTop=
"20dp"
android:text=
"打开Video"
/>
<Button
...
...
app/src/main/res/layout/activity_simple.xml
0 → 100644
浏览文件 @
33b26bdf
<?xml version="1.0" encoding="utf-8"?>
<ScrollView
xmlns:android=
"http://schemas.android.com/apk/res/android"
xmlns:tools=
"http://schemas.android.com/tools"
android:layout_width=
"match_parent"
android:layout_height=
"match_parent"
>
<LinearLayout
android:id=
"@+id/activity_main"
android:layout_width=
"match_parent"
android:layout_height=
"match_parent"
android:orientation=
"vertical"
android:paddingBottom=
"@dimen/activity_vertical_margin"
android:paddingLeft=
"@dimen/activity_horizontal_margin"
android:paddingRight=
"@dimen/activity_horizontal_margin"
android:paddingTop=
"@dimen/activity_vertical_margin"
>
<Button
android:id=
"@+id/simple_player"
android:layout_width=
"240dp"
android:layout_height=
"wrap_content"
android:layout_marginTop=
"20dp"
android:text=
"简单直接播放"
/>
<Button
android:id=
"@+id/simple_list_1"
android:layout_width=
"240dp"
android:layout_height=
"wrap_content"
android:layout_marginTop=
"20dp"
android:text=
"简单列表1"
/>
<Button
android:id=
"@+id/simple_list_2"
android:layout_width=
"240dp"
android:layout_height=
"wrap_content"
android:layout_marginTop=
"20dp"
android:text=
"简单列表2"
/>
<Button
android:id=
"@+id/simple_detail_1"
android:layout_width=
"240dp"
android:layout_height=
"wrap_content"
android:layout_marginTop=
"20dp"
android:text=
"简单详情1"
/>
<Button
android:id=
"@+id/simple_detail_2"
android:layout_width=
"240dp"
android:layout_height=
"wrap_content"
android:layout_marginTop=
"20dp"
android:text=
"简单详情2"
/>
</LinearLayout>
</ScrollView>
\ No newline at end of file
app/src/main/res/layout/activity_simple_detail_player.xml
0 → 100644
浏览文件 @
33b26bdf
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
xmlns:android=
"http://schemas.android.com/apk/res/android"
android:id=
"@+id/activity_detail_player"
android:layout_width=
"match_parent"
android:layout_height=
"match_parent"
>
<android.support.v4.widget.NestedScrollView
android:id=
"@+id/post_detail_nested_scroll"
android:layout_width=
"match_parent"
android:layout_height=
"wrap_content"
android:fillViewport=
"true"
>
<LinearLayout
android:layout_width=
"match_parent"
android:layout_height=
"wrap_content"
android:orientation=
"vertical"
>
<View
android:layout_width=
"match_parent"
android:layout_height=
"@dimen/post_media_height"
/>
<TextView
android:layout_width=
"match_parent"
android:layout_height=
"wrap_content"
android:text=
"@string/detail_text"
android:textSize=
"16sp"
/>
</LinearLayout>
</android.support.v4.widget.NestedScrollView>
<com.shuyu.gsyvideoplayer.video.StandardGSYVideoPlayer
android:id=
"@+id/detail_player"
android:layout_width=
"match_parent"
android:layout_height=
"@dimen/post_media_height"
/>
</RelativeLayout>
app/src/main/res/layout/activity_simple_play.xml
0 → 100644
浏览文件 @
33b26bdf
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
xmlns:android=
"http://schemas.android.com/apk/res/android"
android:id=
"@+id/activity_play"
android:layout_width=
"match_parent"
android:layout_height=
"match_parent"
android:background=
"#000000"
>
<com.shuyu.gsyvideoplayer.video.StandardGSYVideoPlayer
android:id=
"@+id/video_player"
android:layout_width=
"match_parent"
android:layout_height=
"match_parent"
android:layout_centerInParent=
"true"
/>
</RelativeLayout>
app/src/main/res/layout/list_video_simple_model1.xml
0 → 100644
浏览文件 @
33b26bdf
<?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"
/>
</RelativeLayout>
\ No newline at end of file
app/src/main/res/layout/list_video_simple_model2.xml
0 → 100644
浏览文件 @
33b26bdf
<?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"
>
<FrameLayout
android:id=
"@+id/list_item_container"
android:layout_width=
"match_parent"
android:layout_height=
"@dimen/post_media_height"
android:scaleType=
"centerCrop"
android:src=
"@mipmap/xxx1"
/>
<ImageView
android:id=
"@+id/list_item_btn"
android:layout_width=
"60dp"
android:layout_height=
"60dp"
android:layout_centerHorizontal=
"true"
android:layout_centerVertical=
"true"
android:layout_gravity=
"center_vertical"
android:src=
"@drawable/video_click_play_selector"
/>
</RelativeLayout>
\ No newline at end of file
app/src/main/res/values/styles.xml
浏览文件 @
33b26bdf
...
...
@@ -16,6 +16,9 @@
<item
name=
"windowActionBar"
>
false
</item>
<item
name=
"windowNoTitle"
>
true
</item>
</style>
<style
name=
"Theme.AppCompat.Full"
parent=
"Theme.AppCompat.Translucent"
>
<item
name=
"android:windowFullscreen"
>
true
</item>
</style>
<style
name=
"dialog_style"
parent=
"@android:style/Theme.Dialog"
>
<item
name=
"android:windowBackground"
>
@android:color/transparent
</item>
...
...
doc/USE.md
浏览文件 @
33b26bdf
##
两
种简单的使用方法
##
三
种简单的使用方法
### 一、列表中使用
#### 模式一 [ListVideoActivity](https://github.com/CarGuo/GSYVideoPlayer/blob/master/app/src/main/java/com/example/gsyvideoplayer/ListVideoActivity.java)
*注意:下面几种方式所在的Activity不要忘记配置manifest的config。*
```
<activity
android:name=".xxxxx"
android:configChanges="orientation|keyboardHidden|screenSize"
android:screenOrientation="portrait" />
```
### 一、直接播放
[
SimplePlayer
](
https://github.com/CarGuo/GSYVideoPlayer/blob/master/app/src/main/java/com/example/gsyvideoplayer/simple/SimplePlayer.java
)
### 二、列表中使用
#### 模式一 [SimpleListVideoActivityMode1](https://github.com/CarGuo/GSYVideoPlayer/blob/master/app/src/main/java/com/example/gsyvideoplayer/simple/SimpleListVideoActivityMode1.java)
1、adapter布局中添加播放控件
```
...
...
@@ -15,15 +29,16 @@
2、配置播放控件(也可以使用builder模式,详见下方detail模式中)
```
holder.gsyVideoPlayer.setUpLazy(url, true, null, null, "这是title");
//增加title
holder.gsyVideoPlayer.getTitleTextView().setVisibility(View.GONE);
//设置返回键
holder.gsyVideoPlayer.getBackButton().setVisibility(View.GONE);
//设置全屏按键功能 holder.gsyVideoPlayer.getFullscreenButton().setOnClickListener(new View.OnClickListener() {
//设置全屏按键功能
holder.gsyVideoPlayer.getFullscreenButton().setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
holder.gsyVideoPlayer.startWindowFullscreen(context, false, true);
holder.gsyVideoPlayer.startWindowFullscreen(context, false, true);
}
});
//防止错位设置
...
...
@@ -37,8 +52,6 @@ holder.gsyVideoPlayer.setReleaseWhenLossAudio(false);
holder.gsyVideoPlayer.setShowFullAnimation(true);
//小屏时不触摸滑动
holder.gsyVideoPlayer.setIsTouchWiget(false);
//全屏是否需要lock功能
holder.gsyVideoPlayer.setNeedLockFull(true);
```
3、Activity中配置生命周期
...
...
@@ -100,7 +113,7 @@ holder.gsyVideoPlayer.setNeedLockFull(true);
```
#### 模式二 [
ListVideo2Activity](https://github.com/CarGuo/GSYVideoPlayer/blob/master/app/src/main/java/com/example/gsyvideoplayer/ListVideo2Activity
.java)
#### 模式二 [
SimpleListVideoActivityMode2](https://github.com/CarGuo/GSYVideoPlayer/blob/master/app/src/main/java/com/example/gsyvideoplayer/simple/SimpleListVideoActivityMode2
.java)
一、item布局中添加
```
...
...
@@ -229,6 +242,7 @@ holder.gsyVideoPlayer.setNeedLockFull(true);
3、adapter中使用helper
```
···
smallVideoHelper.addVideoPlayer(position, holder.imageView, TAG, holder.videoContainer, holder.playerBtn);
holder.playerBtn.setOnClickListener(new View.OnClickListener() {
...
...
@@ -242,12 +256,14 @@ holder.playerBtn.setOnClickListener(new View.OnClickListener() {
smallVideoHelper.startPlay();
}
});
···
```
###
二
、详情页播放
###
三
、详情页播放
#### 模式一 [
DetailControlActivity](https://github.com/CarGuo/GSYVideoPlayer/blob/master/app/src/main/java/com/example/gsyvideoplayer/DetailControlActivity
.java)
#### 模式一 [
SimpleDetailActivityMode1](https://github.com/CarGuo/GSYVideoPlayer/blob/master/app/src/main/java/com/example/gsyvideoplayer/simple/SimpleDetailActivityMode1
.java)
1、布局中添加播放控件
```
...
...
@@ -266,14 +282,20 @@ public class DetailControlActivity extends GSYBaseActivityDetail<StandardGSYVide
3、重载配置
```
@Override
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
···
//调用父类方法
setContentView(R.layout.activity_detail_player);
detailPlayer = (StandardGSYVideoPlayer) findViewById(R.id.detail_player);
//增加title
detailPlayer.getTitleTextView().setVisibility(View.GONE);
detailPlayer.getBackButton().setVisibility(View.GONE);
initVideoBuilderMode();
···
});
}
@Override
public StandardGSYVideoPlayer getGSYVideoPlayer() {
return detailPlayer;
...
...
@@ -292,17 +314,27 @@ public class DetailControlActivity extends GSYBaseActivityDetail<StandardGSYVide
.setIsTouchWiget(true)
.setRotateViewAuto(false)
.setLockLand(false)
.setShowFullAnimation(
true)//打开动画
.setShowFullAnimation(
false)
.setNeedLockFull(true)
.setSeekRatio(1);
}
@Override
public void clickForFullScreen() {
}
/**
* 是否启动旋转横屏,true表示启动
*/
@Override
public boolean getDetailOrientationRotateAuto() {
return true;
}
```
#### 模式二 [
DetailPlayer](https://github.com/CarGuo/GSYVideoPlayer/blob/master/app/src/main/java/com/example/gsyvideoplayer/DetailPlayer
.java)
#### 模式二 [
SimpleDetailActivityMode2](https://github.com/CarGuo/GSYVideoPlayer/blob/master/app/src/main/java/com/example/gsyvideoplayer/simple/SimpleDetailActivityMode2
.java)
1、布局中添加播放控件
```
...
...
@@ -313,9 +345,8 @@ public class DetailControlActivity extends GSYBaseActivityDetail<StandardGSYVide
```
2、
配置播放器、添加旋转外部旋转支持、增加监听。(可以用builder模式,也可以会直接通过player设置
)
2、
onCreate中配置播放器、添加旋转外部旋转支持、增加监听。(也可以会直接通过player设置,不用builder
)
```
//外部辅助的旋转,帮助全屏
orientationUtils = new OrientationUtils(this, detailPlayer);
//初始化不打开外部的旋转
...
...
@@ -335,25 +366,11 @@ gsyVideoOption.setThumbImageView(imageView)
.setVideoAllCallBack(new GSYSampleCallBack() {
@Override
public void onPrepared(String url, Object... objects) {
Debuger.printfError("***** onPrepared **** " + objects[0]);//title
Debuger.printfError("***** onPrepared **** " + objects[1]);//当前全屏player
super.onPrepared(url, objects);
//开始播放了才能旋转和全屏
orientationUtils.setEnable(true);
//记录是否播放标记位
isPlay = true;
}
@Override
public void onEnterFullscreen(String url, Object... objects) {
super.onEnterFullscreen(url, objects);
Debuger.printfError("***** onEnterFullscreen **** " + objects[0]);//title
Debuger.printfError("***** onEnterFullscreen **** " + objects[1]);//当前全屏player
}
@Override
public void onAutoComplete(String url, Object... objects) {
super.onAutoComplete(url, objects);
}
@Override
public void onQuitFullscreen(String url, Object... objects) {
...
...
@@ -372,13 +389,8 @@ gsyVideoOption.setThumbImageView(imageView)
orientationUtils.setEnable(!lock);
}
}
}).setGSYVideoProgressListener(new GSYVideoProgressListener() {
@Override
public void onProgress(int progress, int secProgress, int currentPosition, int duration) {
Debuger.printfLog(" progress " + progress + " secProgress " + secProgress + " currentPosition " + currentPosition + " duration " + duration);
}
}) .build(detailPlayer);
//全屏方法
}).build(detailPlayer);
detailPlayer.getFullscreenButton().setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
...
...
@@ -386,7 +398,7 @@ detailPlayer.getFullscreenButton().setOnClickListener(new View.OnClickListener()
orientationUtils.resolveByClick();
//第一个true是否需要隐藏actionbar,第二个true是否需要隐藏statusbar
detailPlayer.startWindowFullscreen(
DetailPlayer
.this, true, true);
detailPlayer.startWindowFullscreen(
SimpleDetailActivityMode2
.this, true, true);
}
});
```
...
...
@@ -394,53 +406,50 @@ detailPlayer.getFullscreenButton().setOnClickListener(new View.OnClickListener()
3、配置生命周期
```
@Override
public void onBackPressed() {
//配置返回
if (orientationUtils != null) {
orientationUtils.backToProtVideo();
}
if (GSYVideoManager.backFromWindowFull(this)) {
return;
}
super.onBackPressed();
@Override
public void onBackPressed() {
if (orientationUtils != null) {
orientationUtils.backToProtVideo();
}
@Override
protected void onPause() {
//暂停
detailPlayer.getFullWindowPlayer().onVideoPause();
super.onPause();
isPause = true;
if (GSYVideoManager.backFromWindowFull(this)) {
return;
}
@Override
protected void onResume() {
//恢复播放
detailPlayer.getFullWindowPlayer().onVideoResume(false);
super.onResume();
isPause = false;
super.onBackPressed();
}
@Override
protected void onPause() {
detailPlayer.getCurrentPlayer().onVideoPause();
super.onPause();
isPause = true;
}
@Override
protected void onResume() {
detailPlayer.getCurrentPlayer().onVideoResume(false);
super.onResume();
isPause = false;
}
@Override
protected void onDestroy() {
super.onDestroy();
if (isPlay) {
detailPlayer.getCurrentPlayer().release();
}
if (orientationUtils != null)
orientationUtils.releaseListener();
}
@Override
protected void onDestroy() {
//销毁
super.onDestroy();
if (isPlay) {
detailPlayer.getFullWindowPlayer().release();
}
if (orientationUtils != null)
orientationUtils.releaseListener();
}
@Override
public void onConfigurationChanged(Configuration newConfig) {
super.onConfigurationChanged(newConfig);
//如果旋转了就全屏
if (isPlay && !isPause) {
detailPlayer.onConfigurationChanged(this, newConfig, orientationUtils, true, true);
}
@Override
public void onConfigurationChanged(Configuration newConfig) {
super.onConfigurationChanged(newConfig);
//如果旋转了就全屏
if (isPlay && !isPause) {
detailPlayer.onConfigurationChanged(this, newConfig, orientationUtils, true, true);
}
}
```
\ No newline at end of file
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录