Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Sign in / Register
Toggle navigation
B
Browser White
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Packages
Packages
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
wanglei
Browser White
Commits
0596c6ce
Commit
0596c6ce
authored
Aug 09, 2024
by
wanglei
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
...
parent
a87f3acf
Hide whitespace changes
Inline
Side-by-side
Showing
7 changed files
with
178 additions
and
4 deletions
+178
-4
MediaVideoDetailActivity.kt
...hite/ui/activity/mediabrowser/MediaVideoDetailActivity.kt
+118
-1
bg_play_pause.xml
app/src/main/res/drawable/bg_play_pause.xml
+6
-0
bg_seekbar_progress.xml
app/src/main/res/drawable/bg_seekbar_progress.xml
+7
-0
bg_seekbar_thumb.xml
app/src/main/res/drawable/bg_seekbar_thumb.xml
+9
-0
activity_media_video_detail.xml
app/src/main/res/layout/activity_media_video_detail.xml
+38
-3
bofang.png
app/src/main/res/mipmap-xxhdpi/bofang.png
+0
-0
zanting.png
app/src/main/res/mipmap-xxhdpi/zanting.png
+0
-0
No files found.
app/src/main/java/com/base/browserwhite/ui/activity/mediabrowser/MediaVideoDetailActivity.kt
View file @
0596c6ce
package
com.base.browserwhite.ui.activity.mediabrowser
package
com.base.browserwhite.ui.activity.mediabrowser
import
android.graphics.Color
import
android.graphics.Color
import
android.widget.SeekBar
import
android.widget.SeekBar.OnSeekBarChangeListener
import
androidx.activity.addCallback
import
androidx.core.view.updatePadding
import
androidx.core.view.updatePadding
import
androidx.lifecycle.lifecycleScope
import
androidx.media3.common.MediaItem
import
androidx.media3.common.MediaItem
import
androidx.media3.common.Player
import
androidx.media3.exoplayer.ExoPlayer
import
androidx.media3.exoplayer.ExoPlayer
import
com.base.browserwhite.databinding.ActivityMediaVideoDetailBinding
import
com.base.browserwhite.databinding.ActivityMediaVideoDetailBinding
import
com.base.browserwhite.ui.activity.BaseActivity
import
com.base.browserwhite.ui.activity.BaseActivity
import
com.base.browserwhite.utils.BarUtils
import
com.base.browserwhite.utils.BarUtils
import
com.base.browserwhite.utils.LogEx
import
com.base.browserwhite.utils.LogEx
import
kotlinx.coroutines.Dispatchers
import
kotlinx.coroutines.Job
import
kotlinx.coroutines.delay
import
kotlinx.coroutines.isActive
import
kotlinx.coroutines.launch
class
MediaVideoDetailActivity
:
BaseActivity
<
ActivityMediaVideoDetailBinding
>()
{
class
MediaVideoDetailActivity
:
BaseActivity
<
ActivityMediaVideoDetailBinding
>()
{
private
val
TAG
=
"MediaVideoDetailActivity"
private
val
TAG
=
"MediaVideoDetailActivity"
...
@@ -16,6 +26,8 @@ class MediaVideoDetailActivity : BaseActivity<ActivityMediaVideoDetailBinding>()
...
@@ -16,6 +26,8 @@ class MediaVideoDetailActivity : BaseActivity<ActivityMediaVideoDetailBinding>()
ActivityMediaVideoDetailBinding
.
inflate
(
layoutInflater
)
ActivityMediaVideoDetailBinding
.
inflate
(
layoutInflater
)
}
}
private
lateinit
var
player
:
ExoPlayer
private
lateinit
var
player
:
ExoPlayer
private
var
job
:
Job
?
=
null
private
var
playEnd
:
Boolean
=
false
override
fun
initView
()
{
override
fun
initView
()
{
BarUtils
.
setStatusBarLightMode
(
this
,
true
)
BarUtils
.
setStatusBarLightMode
(
this
,
true
)
...
@@ -31,17 +43,122 @@ class MediaVideoDetailActivity : BaseActivity<ActivityMediaVideoDetailBinding>()
...
@@ -31,17 +43,122 @@ class MediaVideoDetailActivity : BaseActivity<ActivityMediaVideoDetailBinding>()
val
mediaItem
=
MediaItem
.
fromUri
(
uri
)
val
mediaItem
=
MediaItem
.
fromUri
(
uri
)
player
.
setMediaItem
(
mediaItem
)
player
.
setMediaItem
(
mediaItem
)
// player.playWhenReady = false
player
.
addListener
(
object
:
Player
.
Listener
{
override
fun
onIsPlayingChanged
(
isPlaying
:
Boolean
)
{
super
.
onIsPlayingChanged
(
isPlaying
)
binding
.
ivPlayPause
.
isSelected
=
isPlaying
}
override
fun
onPlaybackStateChanged
(
playbackState
:
Int
)
{
super
.
onPlaybackStateChanged
(
playbackState
)
LogEx
.
logDebug
(
TAG
,
"playbackState=$playbackState"
)
//2,3,4
if
(
playbackState
==
Player
.
STATE_READY
)
{
playEnd
=
false
if
(
job
==
null
)
{
job
=
upDatePositionJob
()
}
// 获取总时长
binding
.
root
.
post
{
val
duration
=
player
.
duration
binding
.
seekbar
.
max
=
duration
.
toInt
()
binding
.
tvDuration
.
text
=
duration
.
toTimeString
()
}
}
else
if
(
playbackState
==
Player
.
STATE_ENDED
)
{
playEnd
=
true
job
?.
cancel
()
job
=
null
}
}
override
fun
onPositionDiscontinuity
(
oldPosition
:
Player
.
PositionInfo
,
newPosition
:
Player
.
PositionInfo
,
reason
:
Int
)
{
super
.
onPositionDiscontinuity
(
oldPosition
,
newPosition
,
reason
)
// 播放位置发生不连续变化
}
})
player
.
prepare
()
player
.
prepare
()
player
.
play
()
player
.
play
()
}
fun
upDatePositionJob
()
=
lifecycleScope
.
launch
(
Dispatchers
.
Main
)
{
while
(
isActive
)
{
val
currentPosition
=
player
.
currentPosition
binding
.
seekbar
.
progress
=
currentPosition
.
toInt
()
binding
.
tvCurrentPosition
.
text
=
currentPosition
.
toTimeString
()
delay
(
100
)
}
}
override
fun
initListener
()
{
super
.
initListener
()
onBackPressedDispatcher
.
addCallback
{
finishToMain
()
}
binding
.
ivFanhui
.
setOnClickListener
{
onBackPressedDispatcher
.
onBackPressed
()
}
binding
.
ivPlayPause
.
setOnClickListener
{
if
(
player
.
isPlaying
)
{
player
.
pause
()
job
?.
cancel
()
job
=
null
}
else
{
if
(
playEnd
)
{
player
.
seekTo
(
0
)
}
else
{
player
.
play
()
if
(
job
==
null
)
{
job
=
upDatePositionJob
()
}
}
}
}
binding
.
seekbar
.
setOnSeekBarChangeListener
(
object
:
OnSeekBarChangeListener
{
override
fun
onProgressChanged
(
seekBar
:
SeekBar
?,
progress
:
Int
,
fromUser
:
Boolean
)
{
if
(
fromUser
)
{
player
.
seekTo
(
progress
.
toLong
())
}
}
override
fun
onStartTrackingTouch
(
seekBar
:
SeekBar
?)
{
}
override
fun
onStopTrackingTouch
(
seekBar
:
SeekBar
?)
{
}
})
}
}
override
fun
onPause
()
{
override
fun
onPause
()
{
super
.
onPause
()
super
.
onPause
()
player
.
pause
()
player
.
pause
()
job
?.
cancel
()
job
=
null
}
}
override
fun
onResume
()
{
override
fun
onResume
()
{
super
.
onResume
()
super
.
onResume
()
player
.
play
()
if
(
player
.
isPlaying
&&
job
==
null
)
{
job
=
upDatePositionJob
()
}
}
fun
Long
.
toTimeString
():
String
{
val
seconds
=
this
/
1000
val
minutes
=
seconds
/
60
val
hours
=
minutes
/
60
val
secondsStr
=
if
(
seconds
%
60
<
10
)
"0${seconds % 60}"
else
"${seconds % 60}"
val
minutesStr
=
if
(
minutes
%
60
<
10
)
"0${minutes % 60}"
else
"${minutes % 60}"
val
hoursStr
=
if
(
hours
<
10
)
"0$hours"
else
hours
.
toString
()
return
if
(
hours
>
0
)
"$hoursStr:$minutesStr:$secondsStr"
else
"$minutesStr:$secondsStr"
}
}
}
}
\ No newline at end of file
app/src/main/res/drawable/bg_play_pause.xml
0 → 100644
View file @
0596c6ce
<?xml version="1.0" encoding="utf-8"?>
<selector
xmlns:android=
"http://schemas.android.com/apk/res/android"
>
<item
android:drawable=
"@mipmap/bofang"
android:state_selected=
"false"
/>
<item
android:drawable=
"@mipmap/zanting"
android:state_selected=
"true"
/>
</selector>
\ No newline at end of file
app/src/main/res/drawable/bg_seekbar_progress.xml
0 → 100644
View file @
0596c6ce
<?xml version="1.0" encoding="utf-8"?>
<shape
xmlns:android=
"http://schemas.android.com/apk/res/android"
>
<solid
android:color=
"#8C8C8C"
/>
<corners
android:radius=
"2.5dp"
/>
<size
android:height=
"5dp"
/>
</shape>
\ No newline at end of file
app/src/main/res/drawable/bg_seekbar_thumb.xml
0 → 100644
View file @
0596c6ce
<?xml version="1.0" encoding="utf-8"?>
<shape
xmlns:android=
"http://schemas.android.com/apk/res/android"
android:shape=
"oval"
>
<solid
android:color=
"@color/white"
/>
<size
android:width=
"13dp"
android:height=
"13dp"
/>
</shape>
\ No newline at end of file
app/src/main/res/layout/activity_media_video_detail.xml
View file @
0596c6ce
...
@@ -57,16 +57,51 @@
...
@@ -57,16 +57,51 @@
app:use_controller=
"false"
/>
app:use_controller=
"false"
/>
<FrameLayout
<LinearLayout
android:background=
"@drawable/bg_1a1a1a_25"
android:layout_width=
"345dp"
android:layout_width=
"345dp"
android:layout_height=
"55dp"
android:layout_height=
"55dp"
android:layout_marginBottom=
"45dp"
android:layout_marginBottom=
"45dp"
android:background=
"@drawable/bg_1a1a1a_25"
app:layout_constraintBottom_toBottomOf=
"parent"
app:layout_constraintBottom_toBottomOf=
"parent"
app:layout_constraintEnd_toEndOf=
"parent"
app:layout_constraintEnd_toEndOf=
"parent"
app:layout_constraintStart_toStartOf=
"parent"
>
app:layout_constraintStart_toStartOf=
"parent"
>
</FrameLayout>
<ImageView
android:id=
"@+id/iv_play_pause"
android:layout_width=
"wrap_content"
android:layout_height=
"wrap_content"
android:layout_gravity=
"center_vertical"
android:layout_marginStart=
"22dp"
android:src=
"@drawable/bg_play_pause"
tools:ignore=
"ContentDescription"
/>
<TextView
android:id=
"@+id/tv_current_position"
android:layout_width=
"wrap_content"
android:layout_height=
"wrap_content"
android:layout_gravity=
"center_vertical"
android:layout_marginStart=
"10dp"
android:textColor=
"@color/white"
tools:text=
"00:00"
/>
<SeekBar
android:id=
"@+id/seekbar"
android:layout_width=
"0dp"
android:layout_height=
"wrap_content"
android:layout_gravity=
"center_vertical"
android:layout_weight=
"1"
android:progressDrawable=
"@drawable/bg_seekbar_progress"
android:thumb=
"@drawable/bg_seekbar_thumb"
/>
<TextView
android:id=
"@+id/tv_duration"
android:layout_width=
"wrap_content"
android:layout_height=
"wrap_content"
android:layout_gravity=
"center_vertical"
android:layout_marginEnd=
"20dp"
android:textColor=
"@color/white"
tools:text=
"00:00"
/>
</LinearLayout>
</androidx.constraintlayout.widget.ConstraintLayout>
</androidx.constraintlayout.widget.ConstraintLayout>
\ No newline at end of file
app/src/main/res/mipmap-xxhdpi/bofang.png
0 → 100644
View file @
0596c6ce
1019 Bytes
app/src/main/res/mipmap-xxhdpi/zanting.png
0 → 100644
View file @
0596c6ce
443 Bytes
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment