Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
NotesChapter
GSYVideoPlayer
提交
5e5ae182
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,体验更适合开发者的 AI 搜索 >>
提交
5e5ae182
编写于
12月 06, 2019
作者:
G
guoshuyu
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
增加音频播放样例
上级
92d13fab
变更
10
隐藏空白更改
内联
并排
Showing
10 changed file
with
689 addition
and
6 deletion
+689
-6
app/src/main/AndroidManifest.xml
app/src/main/AndroidManifest.xml
+6
-0
app/src/main/java/com/example/gsyvideoplayer/AudioDetailPlayer.java
...in/java/com/example/gsyvideoplayer/AudioDetailPlayer.java
+230
-0
app/src/main/java/com/example/gsyvideoplayer/MainActivity.java
...rc/main/java/com/example/gsyvideoplayer/MainActivity.java
+6
-1
app/src/main/java/com/example/gsyvideoplayer/utils/JumpUtils.java
...main/java/com/example/gsyvideoplayer/utils/JumpUtils.java
+14
-5
app/src/main/java/com/example/gsyvideoplayer/video/AudioSampleVideo.java
...va/com/example/gsyvideoplayer/video/AudioSampleVideo.java
+224
-0
app/src/main/res/drawable-xhdpi/lololo.png
app/src/main/res/drawable-xhdpi/lololo.png
+0
-0
app/src/main/res/layout/activity_detail_audio_player.xml
app/src/main/res/layout/activity_detail_audio_player.xml
+37
-0
app/src/main/res/layout/activity_main.xml
app/src/main/res/layout/activity_main.xml
+6
-0
app/src/main/res/layout/audio_layout_cover.xml
app/src/main/res/layout/audio_layout_cover.xml
+166
-0
app/src/main/res/raw/test3.mp3
app/src/main/res/raw/test3.mp3
+0
-0
未找到文件。
app/src/main/AndroidManifest.xml
浏览文件 @
5e5ae182
...
...
@@ -213,6 +213,12 @@
android:theme=
"@style/Theme.AppCompat.Transitions"
android:screenOrientation=
"portrait"
/>
<activity
android:name=
".AudioDetailPlayer"
android:configChanges=
"keyboard|orientation|keyboardHidden|screenSize"
android:theme=
"@style/Theme.AppCompat.Transitions"
android:screenOrientation=
"portrait"
/>
<meta-data
android:name=
"android.max_aspect"
android:value=
"2.1"
/>
...
...
app/src/main/java/com/example/gsyvideoplayer/AudioDetailPlayer.java
0 → 100644
浏览文件 @
5e5ae182
package
com.example.gsyvideoplayer
;
import
android.content.res.Configuration
;
import
android.os.Bundle
;
import
android.view.View
;
import
android.widget.ImageView
;
import
android.widget.RelativeLayout
;
import
androidx.appcompat.app.AppCompatActivity
;
import
androidx.core.widget.NestedScrollView
;
import
com.example.gsyvideoplayer.video.AudioSampleVideo
;
import
com.example.gsyvideoplayer.video.LandLayoutVideo
;
import
com.google.android.exoplayer2.SeekParameters
;
import
com.shuyu.gsyvideoplayer.GSYVideoManager
;
import
com.shuyu.gsyvideoplayer.builder.GSYVideoOptionBuilder
;
import
com.shuyu.gsyvideoplayer.listener.GSYSampleCallBack
;
import
com.shuyu.gsyvideoplayer.listener.GSYVideoProgressListener
;
import
com.shuyu.gsyvideoplayer.listener.LockClickListener
;
import
com.shuyu.gsyvideoplayer.utils.Debuger
;
import
com.shuyu.gsyvideoplayer.utils.OrientationUtils
;
import
com.shuyu.gsyvideoplayer.video.base.GSYVideoPlayer
;
import
java.util.HashMap
;
import
java.util.Map
;
import
butterknife.BindView
;
import
butterknife.ButterKnife
;
import
tv.danmaku.ijk.media.exo2.Exo2PlayerManager
;
public
class
AudioDetailPlayer
extends
AppCompatActivity
{
@BindView
(
R
.
id
.
post_detail_nested_scroll
)
NestedScrollView
postDetailNestedScroll
;
//推荐使用StandardGSYVideoPlayer,功能一致
//CustomGSYVideoPlayer部分功能处于试验阶段
@BindView
(
R
.
id
.
detail_player
)
AudioSampleVideo
detailPlayer
;
@BindView
(
R
.
id
.
activity_detail_player
)
RelativeLayout
activityDetailPlayer
;
private
boolean
isPlay
;
private
boolean
isPause
;
private
OrientationUtils
orientationUtils
;
@Override
protected
void
onCreate
(
Bundle
savedInstanceState
)
{
super
.
onCreate
(
savedInstanceState
);
setContentView
(
R
.
layout
.
activity_detail_audio_player
);
ButterKnife
.
bind
(
this
);
String
url
=
getUrl
();
resolveNormalVideoUI
();
//外部辅助的旋转,帮助全屏
orientationUtils
=
new
OrientationUtils
(
this
,
detailPlayer
);
//初始化不打开外部的旋转
orientationUtils
.
setEnable
(
false
);
detailPlayer
.
loadCoverImage
(
""
,
R
.
drawable
.
lololo
);
Map
<
String
,
String
>
header
=
new
HashMap
<>();
header
.
put
(
"ee"
,
"33"
);
header
.
put
(
"allowCrossProtocolRedirects"
,
"true"
);
GSYVideoOptionBuilder
gsyVideoOption
=
new
GSYVideoOptionBuilder
();
gsyVideoOption
.
setIsTouchWiget
(
true
)
.
setRotateViewAuto
(
false
)
.
setLockLand
(
false
)
.
setAutoFullWithSize
(
false
)
.
setShowFullAnimation
(
false
)
.
setNeedLockFull
(
true
)
.
setUrl
(
url
)
.
setMapHeadData
(
header
)
.
setCacheWithPlay
(
false
)
.
setVideoTitle
(
"测试视频"
)
.
setVideoAllCallBack
(
new
GSYSampleCallBack
()
{
@Override
public
void
onPrepared
(
String
url
,
Object
...
objects
)
{
Debuger
.
printfError
(
"***** onPrepared **** "
+
objects
[
0
]);
Debuger
.
printfError
(
"***** onPrepared **** "
+
objects
[
1
]);
super
.
onPrepared
(
url
,
objects
);
//开始播放了才能旋转和全屏
orientationUtils
.
setEnable
(
true
);
isPlay
=
true
;
//设置 seek 的临近帧。
if
(
detailPlayer
.
getGSYVideoManager
().
getPlayer
()
instanceof
Exo2PlayerManager
)
{
((
Exo2PlayerManager
)
detailPlayer
.
getGSYVideoManager
().
getPlayer
()).
setSeekParameter
(
SeekParameters
.
NEXT_SYNC
);
Debuger
.
printfError
(
"***** setSeekParameter **** "
);
}
}
@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
onClickStartError
(
String
url
,
Object
...
objects
)
{
super
.
onClickStartError
(
url
,
objects
);
}
@Override
public
void
onQuitFullscreen
(
String
url
,
Object
...
objects
)
{
super
.
onQuitFullscreen
(
url
,
objects
);
Debuger
.
printfError
(
"***** onQuitFullscreen **** "
+
objects
[
0
]);
//title
Debuger
.
printfError
(
"***** onQuitFullscreen **** "
+
objects
[
1
]);
//当前非全屏player
if
(
orientationUtils
!=
null
)
{
orientationUtils
.
backToProtVideo
();
}
}
})
.
setLockClickListener
(
new
LockClickListener
()
{
@Override
public
void
onClick
(
View
view
,
boolean
lock
)
{
if
(
orientationUtils
!=
null
)
{
//配合下方的onConfigurationChanged
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
);
detailPlayer
.
getFullscreenButton
().
setOnClickListener
(
new
View
.
OnClickListener
()
{
@Override
public
void
onClick
(
View
v
)
{
//直接横屏
orientationUtils
.
resolveByClick
();
//第一个true是否需要隐藏actionbar,第二个true是否需要隐藏statusbar
detailPlayer
.
startWindowFullscreen
(
AudioDetailPlayer
.
this
,
true
,
true
);
}
});
}
@Override
public
void
onBackPressed
()
{
if
(
orientationUtils
!=
null
)
{
orientationUtils
.
backToProtVideo
();
}
if
(
GSYVideoManager
.
backFromWindowFull
(
this
))
{
return
;
}
super
.
onBackPressed
();
}
@Override
protected
void
onPause
()
{
getCurPlay
().
onVideoPause
();
super
.
onPause
();
isPause
=
true
;
}
@Override
protected
void
onResume
()
{
getCurPlay
().
onVideoResume
(
false
);
super
.
onResume
();
isPause
=
false
;
}
@Override
protected
void
onDestroy
()
{
super
.
onDestroy
();
if
(
isPlay
)
{
getCurPlay
().
release
();
}
//GSYPreViewManager.instance().releaseMediaPlayer();
if
(
orientationUtils
!=
null
)
orientationUtils
.
releaseListener
();
}
@Override
public
void
onConfigurationChanged
(
Configuration
newConfig
)
{
super
.
onConfigurationChanged
(
newConfig
);
//如果旋转了就全屏
if
(
isPlay
&&
!
isPause
)
{
detailPlayer
.
onConfigurationChanged
(
this
,
newConfig
,
orientationUtils
,
true
,
true
);
}
}
private
void
resolveNormalVideoUI
()
{
//增加title
detailPlayer
.
getTitleTextView
().
setVisibility
(
View
.
GONE
);
detailPlayer
.
getBackButton
().
setVisibility
(
View
.
GONE
);
}
private
GSYVideoPlayer
getCurPlay
()
{
if
(
detailPlayer
.
getFullWindowPlayer
()
!=
null
)
{
return
detailPlayer
.
getFullWindowPlayer
();
}
return
detailPlayer
;
}
private
String
getUrl
()
{
String
url
=
"android.resource://"
+
getPackageName
()
+
"/"
+
R
.
raw
.
test3
;
//注意,用ijk模式播放raw视频,这个必须打开
GSYVideoManager
.
instance
().
enableRawPlay
(
getApplicationContext
());
///exo raw 支持
//String url = RawResourceDataSource.buildRawResourceUri(R.raw.test).toString();
return
url
;
}
}
app/src/main/java/com/example/gsyvideoplayer/MainActivity.java
浏览文件 @
5e5ae182
...
...
@@ -4,8 +4,10 @@ import android.Manifest;
import
android.content.Intent
;
import
android.os.Build
;
import
android.os.Bundle
;
import
androidx.annotation.NonNull
;
import
androidx.appcompat.app.AppCompatActivity
;
import
android.view.View
;
import
android.widget.Button
;
import
android.widget.Toast
;
...
...
@@ -54,7 +56,7 @@ 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_simple
,
R
.
id
.
open_switch
,
R
.
id
.
media_codec
,
R
.
id
.
detail_normal_activity
,
R
.
id
.
detail_download_activity
})
R
.
id
.
open_btn_multi
,
R
.
id
.
open_btn_ad2
,
R
.
id
.
open_list_ad
,
R
.
id
.
open_custom_exo
,
R
.
id
.
open_simple
,
R
.
id
.
open_switch
,
R
.
id
.
media_codec
,
R
.
id
.
detail_normal_activity
,
R
.
id
.
detail_download_activity
,
R
.
id
.
detail_audio_activity
})
public
void
onClick
(
View
view
)
{
switch
(
view
.
getId
())
{
case
R
.
id
.
open_simple
:
...
...
@@ -165,6 +167,9 @@ public class MainActivity extends AppCompatActivity {
case
R
.
id
.
detail_download_activity
:
JumpUtils
.
goToDetailDownloadActivity
(
this
);
break
;
case
R
.
id
.
detail_audio_activity
:
JumpUtils
.
goToDetailAudioActivity
(
this
);
break
;
case
R
.
id
.
clear_cache
:
//清理缓存
GSYVideoManager
.
instance
().
clearAllDefaultCache
(
MainActivity
.
this
);
...
...
app/src/main/java/com/example/gsyvideoplayer/utils/JumpUtils.java
浏览文件 @
5e5ae182
...
...
@@ -2,11 +2,14 @@ package com.example.gsyvideoplayer.utils;
import
android.app.Activity
;
import
android.content.Intent
;
import
androidx.core.app.ActivityCompat
;
import
androidx.core.app.ActivityOptionsCompat
;
import
androidx.core.util.Pair
;
import
android.view.View
;
import
com.example.gsyvideoplayer.AudioDetailPlayer
;
import
com.example.gsyvideoplayer.AutoPlayRecyclerViewActivity
;
import
com.example.gsyvideoplayer.DanmkuVideoActivity
;
import
com.example.gsyvideoplayer.DetailADPlayer
;
...
...
@@ -224,8 +227,6 @@ public class JumpUtils {
}
/**
* 跳转到详情播放
*
...
...
@@ -255,6 +256,7 @@ public class JumpUtils {
Intent
intent
=
new
Intent
(
activity
,
DetailNormalActivityPlayer
.
class
);
activity
.
startActivity
(
intent
);
}
/**
* 跳转到详情播放
*
...
...
@@ -265,6 +267,16 @@ public class JumpUtils {
activity
.
startActivity
(
intent
);
}
/**
* 跳转到详情播放
*
* @param activity
*/
public
static
void
goToDetailAudioActivity
(
Activity
activity
)
{
Intent
intent
=
new
Intent
(
activity
,
AudioDetailPlayer
.
class
);
activity
.
startActivity
(
intent
);
}
/**
* 跳转到详情播放
...
...
@@ -277,7 +289,6 @@ public class JumpUtils {
}
/**
* 跳转到带广告的
*
...
...
@@ -289,8 +300,6 @@ public class JumpUtils {
}
/**
* 跳转到详情播放
*
...
...
app/src/main/java/com/example/gsyvideoplayer/video/AudioSampleVideo.java
0 → 100644
浏览文件 @
5e5ae182
package
com.example.gsyvideoplayer.video
;
import
android.content.Context
;
import
android.graphics.Point
;
import
android.util.AttributeSet
;
import
android.view.View
;
import
android.view.ViewGroup
;
import
android.view.Window
;
import
android.widget.ImageView
;
import
com.bumptech.glide.Glide
;
import
com.bumptech.glide.request.RequestOptions
;
import
com.example.gsyvideoplayer.R
;
import
com.shuyu.gsyvideoplayer.utils.CommonUtil
;
import
com.shuyu.gsyvideoplayer.video.StandardGSYVideoPlayer
;
import
com.shuyu.gsyvideoplayer.video.base.GSYBaseVideoPlayer
;
public
class
AudioSampleVideo
extends
StandardGSYVideoPlayer
{
ImageView
mCoverImage
;
String
mCoverOriginUrl
;
int
mDefaultRes
;
public
AudioSampleVideo
(
Context
context
,
Boolean
fullFlag
)
{
super
(
context
,
fullFlag
);
}
public
AudioSampleVideo
(
Context
context
)
{
super
(
context
);
}
public
AudioSampleVideo
(
Context
context
,
AttributeSet
attrs
)
{
super
(
context
,
attrs
);
}
@Override
protected
void
init
(
Context
context
)
{
super
.
init
(
context
);
mCoverImage
=
(
ImageView
)
findViewById
(
R
.
id
.
thumbImage
);
if
(
mThumbImageViewLayout
!=
null
&&
(
mCurrentState
==
-
1
||
mCurrentState
==
CURRENT_STATE_NORMAL
||
mCurrentState
==
CURRENT_STATE_ERROR
))
{
mThumbImageViewLayout
.
setVisibility
(
VISIBLE
);
}
}
@Override
public
int
getLayoutId
()
{
return
R
.
layout
.
audio_layout_cover
;
}
public
void
loadCoverImage
(
String
url
,
int
res
)
{
mCoverOriginUrl
=
url
;
mDefaultRes
=
res
;
Glide
.
with
(
getContext
().
getApplicationContext
())
.
setDefaultRequestOptions
(
new
RequestOptions
()
.
frame
(
1000000
)
.
centerCrop
()
.
error
(
res
)
.
placeholder
(
res
))
.
load
(
url
)
.
into
(
mCoverImage
);
}
@Override
public
GSYBaseVideoPlayer
startWindowFullscreen
(
Context
context
,
boolean
actionBar
,
boolean
statusBar
)
{
GSYBaseVideoPlayer
gsyBaseVideoPlayer
=
super
.
startWindowFullscreen
(
context
,
actionBar
,
statusBar
);
AudioSampleVideo
audioSampleVideo
=
(
AudioSampleVideo
)
gsyBaseVideoPlayer
;
audioSampleVideo
.
loadCoverImage
(
mCoverOriginUrl
,
mDefaultRes
);
return
gsyBaseVideoPlayer
;
}
@Override
public
GSYBaseVideoPlayer
showSmallVideo
(
Point
size
,
boolean
actionBar
,
boolean
statusBar
)
{
//下面这里替换成你自己的强制转化
AudioSampleVideo
audioSampleVideo
=
(
AudioSampleVideo
)
super
.
showSmallVideo
(
size
,
actionBar
,
statusBar
);
audioSampleVideo
.
mStartButton
.
setVisibility
(
GONE
);
audioSampleVideo
.
mStartButton
=
null
;
return
audioSampleVideo
;
}
@Override
protected
void
cloneParams
(
GSYBaseVideoPlayer
from
,
GSYBaseVideoPlayer
to
)
{
super
.
cloneParams
(
from
,
to
);
AudioSampleVideo
sf
=
(
AudioSampleVideo
)
from
;
AudioSampleVideo
st
=
(
AudioSampleVideo
)
to
;
st
.
mShowFullAnimation
=
sf
.
mShowFullAnimation
;
}
/**
* 退出window层播放全屏效果
*/
@SuppressWarnings
(
"ResourceType"
)
@Override
protected
void
clearFullscreenLayout
()
{
if
(!
mFullAnimEnd
)
{
return
;
}
mIfCurrentIsFullscreen
=
false
;
int
delay
=
0
;
if
(
mOrientationUtils
!=
null
)
{
delay
=
mOrientationUtils
.
backToProtVideo
();
mOrientationUtils
.
setEnable
(
false
);
if
(
mOrientationUtils
!=
null
)
{
mOrientationUtils
.
releaseListener
();
mOrientationUtils
=
null
;
}
}
if
(!
mShowFullAnimation
)
{
delay
=
0
;
}
final
ViewGroup
vp
=
(
CommonUtil
.
scanForActivity
(
getContext
())).
findViewById
(
Window
.
ID_ANDROID_CONTENT
);
final
View
oldF
=
vp
.
findViewById
(
getFullId
());
if
(
oldF
!=
null
)
{
AudioSampleVideo
gsyVideoPlayer
=
(
AudioSampleVideo
)
oldF
;
gsyVideoPlayer
.
mIfCurrentIsFullscreen
=
false
;
}
if
(
delay
==
0
)
{
backToNormal
();
}
else
{
postDelayed
(
new
Runnable
()
{
@Override
public
void
run
()
{
backToNormal
();
}
},
delay
);
}
}
@Override
protected
void
addTextureView
()
{
}
@Override
protected
void
changeUiToNormal
()
{
super
.
changeUiToNormal
();
setViewShowState
(
mThumbImageViewLayout
,
VISIBLE
);
}
@Override
protected
void
changeUiToPreparingShow
()
{
super
.
changeUiToPreparingShow
();
setViewShowState
(
mThumbImageViewLayout
,
VISIBLE
);
}
@Override
protected
void
changeUiToPlayingShow
()
{
super
.
changeUiToPlayingShow
();
setViewShowState
(
mThumbImageViewLayout
,
VISIBLE
);
}
@Override
protected
void
changeUiToPauseShow
()
{
super
.
changeUiToPauseShow
();
setViewShowState
(
mThumbImageViewLayout
,
VISIBLE
);
}
@Override
protected
void
changeUiToPlayingBufferingShow
()
{
super
.
changeUiToPlayingBufferingShow
();
setViewShowState
(
mThumbImageViewLayout
,
VISIBLE
);
}
@Override
protected
void
changeUiToCompleteShow
()
{
super
.
changeUiToCompleteShow
();
setViewShowState
(
mThumbImageViewLayout
,
VISIBLE
);
}
@Override
protected
void
changeUiToError
()
{
super
.
changeUiToError
();
setViewShowState
(
mThumbImageViewLayout
,
VISIBLE
);
}
@Override
protected
void
changeUiToPrepareingClear
()
{
super
.
changeUiToPrepareingClear
();
setViewShowState
(
mThumbImageViewLayout
,
VISIBLE
);
}
@Override
protected
void
changeUiToPlayingClear
()
{
super
.
changeUiToPlayingClear
();
setViewShowState
(
mThumbImageViewLayout
,
VISIBLE
);
}
@Override
protected
void
changeUiToPauseClear
()
{
super
.
changeUiToPauseClear
();
setViewShowState
(
mThumbImageViewLayout
,
VISIBLE
);
}
@Override
protected
void
changeUiToPlayingBufferingClear
()
{
super
.
changeUiToPlayingBufferingClear
();
setViewShowState
(
mThumbImageViewLayout
,
VISIBLE
);
}
@Override
protected
void
changeUiToClear
()
{
super
.
changeUiToClear
();
setViewShowState
(
mThumbImageViewLayout
,
VISIBLE
);
}
@Override
protected
void
changeUiToCompleteClear
()
{
super
.
changeUiToCompleteClear
();
setViewShowState
(
mThumbImageViewLayout
,
VISIBLE
);
}
}
app/src/main/res/drawable-xhdpi/lololo.png
0 → 100644
浏览文件 @
5e5ae182
85.5 KB
app/src/main/res/layout/activity_detail_audio_player.xml
0 → 100644
浏览文件 @
5e5ae182
<?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"
>
<androidx.core.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>
</androidx.core.widget.NestedScrollView>
<com.example.gsyvideoplayer.video.AudioSampleVideo
android:id=
"@+id/detail_player"
android:layout_width=
"match_parent"
android:layout_height=
"@dimen/post_media_height"
/>
</RelativeLayout>
app/src/main/res/layout/activity_main.xml
浏览文件 @
5e5ae182
...
...
@@ -221,6 +221,12 @@
android:layout_marginTop=
"20dp"
android:text=
"自定义Exo"
/>
<Button
android:id=
"@+id/detail_audio_activity"
android:layout_width=
"240dp"
android:layout_height=
"wrap_content"
android:layout_marginTop=
"20dp"
android:text=
"音频"
/>
<Button
android:id=
"@+id/clear_cache"
android:layout_width=
"240dp"
...
...
app/src/main/res/layout/audio_layout_cover.xml
0 → 100644
浏览文件 @
5e5ae182
<?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=
"match_parent"
android:background=
"@android:color/black"
>
<RelativeLayout
android:id=
"@+id/thumb"
android:layout_width=
"match_parent"
android:layout_height=
"match_parent"
android:layout_alignParentStart=
"true"
android:layout_alignParentLeft=
"true"
android:layout_alignParentTop=
"true"
android:layout_alignParentEnd=
"true"
android:layout_alignParentRight=
"true"
android:layout_alignParentBottom=
"true"
android:background=
"#000000"
android:scaleType=
"fitCenter"
>
<ImageView
android:id=
"@+id/thumbImage"
android:layout_width=
"match_parent"
android:layout_height=
"match_parent"
android:scaleType=
"centerCrop"
/>
</RelativeLayout>
<RelativeLayout
android:id=
"@+id/surface_container"
android:layout_width=
"match_parent"
android:layout_height=
"match_parent"
android:gravity=
"center"
>
</RelativeLayout>
<LinearLayout
android:id=
"@+id/layout_bottom"
android:layout_width=
"match_parent"
android:layout_height=
"40dp"
android:layout_alignParentBottom=
"true"
android:background=
"#99000000"
android:gravity=
"center_vertical"
android:orientation=
"horizontal"
android:visibility=
"invisible"
>
<TextView
android:id=
"@+id/current"
android:layout_width=
"wrap_content"
android:layout_height=
"wrap_content"
android:layout_marginLeft=
"16dp"
android:text=
"00:00"
android:textColor=
"#ffffff"
/>
<SeekBar
android:id=
"@+id/progress"
android:layout_width=
"0dp"
android:layout_height=
"wrap_content"
android:layout_gravity=
"center_vertical"
android:layout_weight=
"1.0"
android:background=
"@null"
android:max=
"100"
android:maxHeight=
"4dp"
android:minHeight=
"4dp"
android:paddingTop=
"8dp"
android:paddingBottom=
"8dp"
android:progressDrawable=
"@drawable/video_seek_progress"
android:thumb=
"@drawable/video_seek_thumb"
/>
<TextView
android:id=
"@+id/total"
android:layout_width=
"wrap_content"
android:layout_height=
"wrap_content"
android:layout_marginRight=
"16dp"
android:text=
"00:00"
android:textColor=
"#ffffff"
/>
<ImageView
android:id=
"@+id/fullscreen"
android:layout_width=
"wrap_content"
android:layout_height=
"fill_parent"
android:paddingRight=
"16dp"
android:scaleType=
"center"
android:src=
"@drawable/video_enlarge"
/>
</LinearLayout>
<ProgressBar
android:id=
"@+id/bottom_progressbar"
style=
"?android:attr/progressBarStyleHorizontal"
android:layout_width=
"match_parent"
android:layout_height=
"1.5dp"
android:layout_alignParentBottom=
"true"
android:max=
"100"
android:progressDrawable=
"@drawable/video_progress"
/>
<ImageView
android:id=
"@+id/back_tiny"
android:layout_width=
"24dp"
android:layout_height=
"24dp"
android:layout_marginLeft=
"6dp"
android:layout_marginTop=
"6dp"
android:visibility=
"gone"
/>
<LinearLayout
android:id=
"@+id/layout_top"
android:layout_width=
"match_parent"
android:layout_height=
"48dp"
android:background=
"@drawable/video_title_bg"
android:gravity=
"center_vertical"
>
<ImageView
android:id=
"@+id/back"
android:layout_width=
"48dp"
android:layout_height=
"48dp"
android:paddingLeft=
"10dp"
android:scaleType=
"centerInside"
android:src=
"@drawable/video_back"
/>
<TextView
android:id=
"@+id/title"
android:layout_width=
"wrap_content"
android:layout_height=
"wrap_content"
android:paddingLeft=
"10dp"
android:textColor=
"@android:color/white"
android:textSize=
"18sp"
/>
</LinearLayout>
<moe.codeest.enviews.ENDownloadView
android:id=
"@+id/loading"
android:layout_width=
"28dp"
android:layout_height=
"28dp"
android:layout_centerHorizontal=
"true"
android:layout_centerVertical=
"true"
android:visibility=
"invisible"
/>
<moe.codeest.enviews.ENPlayView
android:id=
"@+id/start"
android:layout_width=
"60dp"
android:layout_height=
"60dp"
android:layout_centerHorizontal=
"true"
android:layout_centerVertical=
"true"
android:layout_gravity=
"center_vertical"
/>
<ImageView
android:id=
"@+id/small_close"
android:layout_width=
"30dp"
android:layout_height=
"30dp"
android:paddingLeft=
"10dp"
android:paddingTop=
"10dp"
android:scaleType=
"centerInside"
android:src=
"@drawable/video_small_close"
android:visibility=
"gone"
/>
<ImageView
android:id=
"@+id/lock_screen"
android:layout_width=
"30dp"
android:layout_height=
"30dp"
android:layout_alignParentRight=
"true"
android:layout_centerVertical=
"true"
android:layout_marginRight=
"50dp"
android:scaleType=
"centerInside"
android:src=
"@drawable/unlock"
android:visibility=
"gone"
/>
</RelativeLayout>
app/src/main/res/raw/test3.mp3
0 → 100755
浏览文件 @
5e5ae182
文件已添加
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录