Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Sign in / Register
Toggle navigation
R
reelshort 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
reelshort white
Commits
d26357cb
Commit
d26357cb
authored
Jan 15, 2025
by
wanglei
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
...
parent
55a87036
Hide whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
109 additions
and
13 deletions
+109
-13
MainActivity.kt
app/src/main/java/com/base/appzxhy/ui/main/MainActivity.kt
+1
-0
PlaySlideFragment.kt
...c/main/java/com/base/appzxhy/ui/main/PlaySlideFragment.kt
+96
-1
CustomOverlayView.kt
...c/main/java/com/base/appzxhy/ui/play/CustomOverlayView.kt
+3
-5
PlayFullActivity.kt
...rc/main/java/com/base/appzxhy/ui/play/PlayFullActivity.kt
+9
-7
No files found.
app/src/main/java/com/base/appzxhy/ui/main/MainActivity.kt
View file @
d26357cb
...
...
@@ -70,6 +70,7 @@ class MainActivity : BaseActivity<ActivityMainBinding>(ActivityMainBinding::infl
}
binding
.
viewPager2
.
run
{
isUserInputEnabled
=
false
offscreenPageLimit
=
1
//https://www.jianshu.com/p/f69bd30cf5b0
//FragmentStateAdapter 这里必须传人fragment
adapter
=
pageAdapter
...
...
app/src/main/java/com/base/appzxhy/ui/main/PlaySlideFragment.kt
View file @
d26357cb
package
com.base.appzxhy.ui.main
import
android.content.Intent
import
android.view.Gravity
import
android.view.View
import
android.widget.FrameLayout
import
androidx.fragment.app.Fragment
import
androidx.viewpager2.adapter.FragmentStateAdapter
import
androidx.viewpager2.widget.ViewPager2
import
com.base.appzxhy.R
import
com.base.appzxhy.base.BaseFragment
import
com.base.appzxhy.databinding.FragmentPlaySlideBinding
import
com.base.appzxhy.databinding.LayoutOverlayForyouBinding
import
com.base.appzxhy.ui.play.CustomCollectView
import
com.base.appzxhy.ui.play.CustomLikeView
import
com.base.appzxhy.ui.play.CustomOverlayView
import
com.base.appzxhy.ui.play.CustomShareView
import
com.base.appzxhy.ui.play.PlayFullActivity
import
com.base.appzxhy.utils.LogEx
import
com.bytedance.sdk.shortplay.api.PSSDK
import
com.bytedance.sdk.shortplay.api.PSSDK.DetailPageConfig
import
com.bytedance.sdk.shortplay.api.PSSDK.FeedListLoadResult
import
com.bytedance.sdk.shortplay.api.PSSDK.FeedListResultListener
import
com.bytedance.sdk.shortplay.api.ShortPlay
import
com.bytedance.sdk.shortplay.api.ShortPlayFragment
import
com.google.gson.Gson
import
kotlin.random.Random
class
PlaySlideFragment
:
BaseFragment
<
FragmentPlaySlideBinding
>(
FragmentPlaySlideBinding
::
inflate
)
{
...
...
@@ -19,6 +32,10 @@ class PlaySlideFragment : BaseFragment<FragmentPlaySlideBinding>(FragmentPlaySli
private
var
feedListAdapter
:
FeedListAdapter
?
=
null
private
var
currentShortPlayFragment
:
ShortPlayFragment
?
=
null
// private val customViewSparseArray = SparseArray<CustomOverlayView>()
private
var
currentShortPlay
:
ShortPlay
?
=
null
private
var
currentShortPlayIndex
:
Int
?
=
null
override
fun
initView
()
{
super
.
initView
()
feedListAdapter
=
FeedListAdapter
(
this
)
...
...
@@ -79,6 +96,12 @@ class PlaySlideFragment : BaseFragment<FragmentPlaySlideBinding>(FragmentPlaySli
private
fun
createShortPlayFragment
(
shortPlay
:
ShortPlay
):
ShortPlayFragment
?
{
var
freeEp
=
10
if
(
freeEp
>=
shortPlay
.
total
)
{
freeEp
=
shortPlay
.
total
}
val
startFromIndex
=
Random
.
nextInt
(
1
,
freeEp
)
val
builder
=
DetailPageConfig
.
Builder
()
builder
.
hideLeftTopCloseAndTitle
(
true
,
null
)
.
displayBottomExtraView
(
false
)
...
...
@@ -86,13 +109,20 @@ class PlaySlideFragment : BaseFragment<FragmentPlaySlideBinding>(FragmentPlaySli
.
displayTextVisibility
(
DetailPageConfig
.
TEXT_POS_BOTTOM_TITLE
,
false
)
.
displayTextVisibility
(
DetailPageConfig
.
TEXT_POS_BOTTOM_DESC
,
false
)
.
playSingleItem
(
true
)
.
startPlayIndex
(
startFromIndex
)
val
config
=
builder
.
build
()
val
shortPlayFragment
=
PSSDK
.
createDetailFragment
(
shortPlay
,
config
,
object
:
PSSDK
.
ShortPlayDetailPageListener
{
override
fun
onProgressChange
(
shortPlay
:
ShortPlay
,
index
:
Int
,
currentPlayTime
:
Int
,
duration
:
Int
)
=
Unit
override
fun
onPlayFailed
(
errorInfo
:
PSSDK
.
ErrorInfo
?):
Boolean
=
false
override
fun
onShortPlayPlayed
(
shortPlay
:
ShortPlay
?,
index
:
Int
)
=
Unit
override
fun
onShortPlayPlayed
(
shortPlay
:
ShortPlay
?,
index
:
Int
)
{
LogEx
.
logDebug
(
TAG
,
"onShortPlayPlayed shortPlay=$shortPlay index=$index"
)
currentShortPlay
=
shortPlay
currentShortPlayIndex
=
index
}
override
fun
onItemSelected
(
position
:
Int
,
type
:
PSSDK
.
ShortPlayDetailPageListener
.
ItemType
,
index
:
Int
)
=
Unit
override
fun
onVideoPlayStateChanged
(
shortPlay
:
ShortPlay
?,
index
:
Int
,
playbackState
:
Int
)
=
Unit
override
fun
onVideoPlayCompleted
(
shortPlay
:
ShortPlay
?,
index
:
Int
)
=
Unit
...
...
@@ -105,6 +135,71 @@ class PlaySlideFragment : BaseFragment<FragmentPlaySlideBinding>(FragmentPlaySli
override
fun
onObtainPlayerControlViews
():
MutableList
<
View
>
{
val
views
=
ArrayList
<
View
>()
val
aLLBottomMargin
=
resources
.
getDimensionPixelSize
(
R
.
dimen
.
dp_120
)
val
itemMargin
=
resources
.
getDimensionPixelSize
(
R
.
dimen
.
dp_70
)
//分享
val
customShareView
=
CustomShareView
(
requireContext
())
customShareView
.
text
=
resources
.
getString
(
R
.
string
.
share
)
val
shareParams
=
FrameLayout
.
LayoutParams
(
FrameLayout
.
LayoutParams
.
WRAP_CONTENT
,
FrameLayout
.
LayoutParams
.
WRAP_CONTENT
).
apply
{
gravity
=
Gravity
.
BOTTOM
or
Gravity
.
RIGHT
bottomMargin
=
aLLBottomMargin
rightMargin
=
resources
.
getDimensionPixelSize
(
R
.
dimen
.
dp_18
)
}
customShareView
.
setLayoutParams
(
shareParams
)
customShareView
.
setOnClickListener
{
val
intent
=
Intent
(
Intent
.
ACTION_SEND
)
intent
.
setType
(
"text/plain"
)
intent
.
putExtra
(
Intent
.
EXTRA_SUBJECT
,
shortPlay
.
title
)
intent
.
putExtra
(
Intent
.
EXTRA_TEXT
,
shortPlay
.
desc
)
startActivity
(
Intent
.
createChooser
(
intent
,
"分享短剧"
))
}
//收藏按钮
val
customCollectView
=
CustomCollectView
(
requireContext
())
val
collectParams
=
FrameLayout
.
LayoutParams
(
FrameLayout
.
LayoutParams
.
WRAP_CONTENT
,
FrameLayout
.
LayoutParams
.
WRAP_CONTENT
).
apply
{
gravity
=
Gravity
.
BOTTOM
or
Gravity
.
RIGHT
bottomMargin
=
aLLBottomMargin
+
itemMargin
*
1
rightMargin
=
resources
.
getDimensionPixelSize
(
R
.
dimen
.
dp_18
)
}
customCollectView
.
setLayoutParams
(
collectParams
)
// 点赞按钮
val
customLikeView
=
CustomLikeView
(
requireContext
())
val
likeParams
=
FrameLayout
.
LayoutParams
(
FrameLayout
.
LayoutParams
.
WRAP_CONTENT
,
FrameLayout
.
LayoutParams
.
WRAP_CONTENT
).
apply
{
gravity
=
Gravity
.
BOTTOM
or
Gravity
.
RIGHT
bottomMargin
=
aLLBottomMargin
+
itemMargin
*
2
rightMargin
=
resources
.
getDimensionPixelSize
(
R
.
dimen
.
dp_18
)
}
customLikeView
.
setLayoutParams
(
likeParams
)
val
customOverlayView
=
CustomOverlayView
(
requireContext
(),
R
.
layout
.
layout_overlay_foryou
)
customOverlayView
.
bindItemDataCallBack
=
{
data
,
index
,
view
->
val
customBinding
=
LayoutOverlayForyouBinding
.
bind
(
view
)
customBinding
.
llBtn
.
setOnClickListener
{
val
activity
=
requireActivity
()
as
MainActivity
?
val
useData
=
currentShortPlay
?:
data
LogEx
.
logDebug
(
TAG
,
"PlayFullActivity currentShortPlayIndex=$currentShortPlayIndex"
)
activity
?.
startActivity
(
Intent
(
activity
,
PlayFullActivity
::
class
.
java
).
apply
{
putExtra
(
"data"
,
Gson
().
toJson
(
useData
))
if
(
currentShortPlayIndex
!=
null
)
{
putExtra
(
"startFromIndex"
,
currentShortPlayIndex
)
}
})
}
}
views
.
add
(
customLikeView
)
views
.
add
(
customCollectView
)
views
.
add
(
customShareView
)
views
.
add
(
customOverlayView
)
return
views
}
})
...
...
app/src/main/java/com/base/appzxhy/ui/play/CustomOverlayView.kt
View file @
d26357cb
...
...
@@ -13,11 +13,8 @@ import com.base.appzxhy.R
import
com.base.appzxhy.databinding.LayoutOverlayForyouBinding
import
com.base.appzxhy.databinding.LayoutOverlayPlayerBinding
import
com.base.appzxhy.ui.play.effect.AnimationEffect
import
com.base.appzxhy.ui.views.ShortPlayQualityDialog.showShortPlayQualityDialog
import
com.base.appzxhy.ui.views.ShortPlaySpeedDialog.showShortPlaySpeedDialog
import
com.base.appzxhy.utils.KotlinExt.formatSeconds
import
com.base.appzxhy.utils.LogEx
import
com.base.appzxhy.utils.ToastUtils.toast
import
com.base.appzxhy.utils.Utils.dp
import
com.bytedance.sdk.shortplay.api.PSSDK
import
com.bytedance.sdk.shortplay.api.ShortPlay
...
...
@@ -37,7 +34,7 @@ class CustomOverlayView : FrameLayout, PSSDK.IControlView {
private
var
tvPlayTotal
:
TextView
?
=
null
var
bindItemDataCallBack
:
((
index
:
Int
,
customOverlayView
:
CustomOverlayView
)
->
Unit
)?
=
null
var
bindItemDataCallBack
:
((
shortPlay
:
ShortPlay
,
index
:
Int
,
customOverlayView
:
CustomOverlayView
)
->
Unit
)?
=
null
constructor
(
context
:
Context
,
layout
:
Int
)
:
super
(
context
)
{
this
.
layout
=
layout
...
...
@@ -58,6 +55,7 @@ class CustomOverlayView : FrameLayout, PSSDK.IControlView {
val
binding
=
LayoutOverlayForyouBinding
.
bind
(
this
)
binding
.
tvTitle
.
text
=
shortPlay
.
title
binding
.
tvDesc
.
text
=
shortPlay
.
desc
bindItemDataCallBack
?.
invoke
(
shortPlay
,
index
,
this
)
}
R
.
layout
.
layout_overlay_player
->
{
...
...
@@ -104,7 +102,7 @@ class CustomOverlayView : FrameLayout, PSSDK.IControlView {
setThumbShadowColor
(
Color
.
BLACK
)
}
bindItemDataCallBack
?.
invoke
(
index
,
this
)
bindItemDataCallBack
?.
invoke
(
shortPlay
,
index
,
this
)
}
}
...
...
app/src/main/java/com/base/appzxhy/ui/play/PlayFullActivity.kt
View file @
d26357cb
...
...
@@ -52,9 +52,10 @@ class PlayFullActivity : BaseActivity<ActivityPlayFullBinding>(ActivityPlayFullB
shortPlay
=
Gson
().
fromJson
(
it
,
ShortPlay
::
class
.
java
)
}
s
hortPlay
?.
let
{
showShortPlayerFragment
(
it
)
}
shortPlay
?.
episodes
s
tartFromIndex
=
intent
.
extras
?.
getInt
(
"startFromIndex"
,
1
)
?:
1
LogEx
.
logDebug
(
TAG
,
"startFromIndex=$startFromIndex"
)
shortPlay
?.
let
{
showShortPlayerFragment
(
it
)
}
}
override
fun
initListener
()
{
...
...
@@ -135,6 +136,7 @@ class PlayFullActivity : BaseActivity<ActivityPlayFullBinding>(ActivityPlayFullB
return
false
}
@SuppressLint
(
"SetTextI18n"
)
override
fun
onShortPlayPlayed
(
shortPlay
:
ShortPlay
?,
index
:
Int
)
{
this
@PlayFullActivity
.
shortPlay
=
shortPlay
startFromIndex
=
index
...
...
@@ -189,7 +191,7 @@ class PlayFullActivity : BaseActivity<ActivityPlayFullBinding>(ActivityPlayFullB
val
itemMargin
=
this
@PlayFullActivity
.
resources
.
getDimensionPixelSize
(
R
.
dimen
.
dp_70
)
// 点赞按钮
val
customLikeView
=
CustomLikeView
(
applicationContext
)
val
customLikeView
=
CustomLikeView
(
this
@PlayFullActivity
)
val
likeParams
=
FrameLayout
.
LayoutParams
(
FrameLayout
.
LayoutParams
.
WRAP_CONTENT
,
FrameLayout
.
LayoutParams
.
WRAP_CONTENT
).
apply
{
gravity
=
Gravity
.
BOTTOM
or
Gravity
.
RIGHT
...
...
@@ -200,7 +202,7 @@ class PlayFullActivity : BaseActivity<ActivityPlayFullBinding>(ActivityPlayFullB
views
.
add
(
customLikeView
)
//收藏按钮
val
customCollectView
=
CustomCollectView
(
applicationContext
)
val
customCollectView
=
CustomCollectView
(
this
@PlayFullActivity
)
val
collectParams
=
FrameLayout
.
LayoutParams
(
FrameLayout
.
LayoutParams
.
WRAP_CONTENT
,
FrameLayout
.
LayoutParams
.
WRAP_CONTENT
).
apply
{
gravity
=
Gravity
.
BOTTOM
or
Gravity
.
RIGHT
...
...
@@ -211,7 +213,7 @@ class PlayFullActivity : BaseActivity<ActivityPlayFullBinding>(ActivityPlayFullB
views
.
add
(
customCollectView
)
//选集,测试过无法触发点击事件
val
customPEView
=
CustomView
(
applicationContext
,
R
.
mipmap
.
fy_list
)
val
customPEView
=
CustomView
(
this
@PlayFullActivity
,
R
.
mipmap
.
fy_list
)
customPEView
.
text
=
resources
.
getString
(
R
.
string
.
list
)
val
peParams
=
FrameLayout
.
LayoutParams
(
FrameLayout
.
LayoutParams
.
WRAP_CONTENT
,
FrameLayout
.
LayoutParams
.
WRAP_CONTENT
).
apply
{
...
...
@@ -237,7 +239,7 @@ class PlayFullActivity : BaseActivity<ActivityPlayFullBinding>(ActivityPlayFullB
}
//分享
val
customShareView
=
CustomShareView
(
applicationContext
)
val
customShareView
=
CustomShareView
(
this
@PlayFullActivity
)
customShareView
.
text
=
resources
.
getString
(
R
.
string
.
share
)
val
shareParams
=
FrameLayout
.
LayoutParams
(
FrameLayout
.
LayoutParams
.
WRAP_CONTENT
,
FrameLayout
.
LayoutParams
.
WRAP_CONTENT
).
apply
{
...
...
@@ -261,7 +263,7 @@ class PlayFullActivity : BaseActivity<ActivityPlayFullBinding>(ActivityPlayFullB
FrameLayout
.
LayoutParams
(
FrameLayout
.
LayoutParams
.
MATCH_PARENT
,
FrameLayout
.
LayoutParams
.
MATCH_PARENT
)
playControlView
.
let
{
views
.
add
(
it
)
}
//全局持有控制view
playControlView
.
bindItemDataCallBack
=
{
index
,
view
->
playControlView
.
bindItemDataCallBack
=
{
data
,
index
,
view
->
playControlViewSparseArray
[
index
]
=
view
}
val
playerBinding
=
LayoutOverlayPlayerBinding
.
bind
(
playControlView
)
...
...
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