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
9bd753b1
Commit
9bd753b1
authored
Jan 17, 2025
by
wanglei
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
...搜索栏高斯模糊
parent
b3ffe2fa
Show whitespace changes
Inline
Side-by-side
Showing
18 changed files
with
416 additions
and
91 deletions
+416
-91
ShortPlayHistory.kt
app/src/main/java/com/base/appzxhy/bean/ShortPlayHistory.kt
+13
-0
PlayHistoryHelper.java
...in/java/com/base/appzxhy/shortplay/PlayHistoryHelper.java
+0
-37
ShortPlayHistoryAdapter.kt
...va/com/base/appzxhy/ui/adapter/ShortPlayHistoryAdapter.kt
+114
-0
BannerAdapter.kt
...n/java/com/base/appzxhy/ui/concatAdapter/BannerAdapter.kt
+4
-1
HomeFragment.kt
app/src/main/java/com/base/appzxhy/ui/main/HomeFragment.kt
+24
-2
HistoryPageFragment.kt
...va/com/base/appzxhy/ui/main/mylist/HistoryPageFragment.kt
+39
-0
MyListFragment.kt
...in/java/com/base/appzxhy/ui/main/mylist/MyListFragment.kt
+7
-3
MyListPageFragment.kt
...ava/com/base/appzxhy/ui/main/mylist/MyListPageFragment.kt
+4
-0
PlayFullActivity.kt
...rc/main/java/com/base/appzxhy/ui/play/PlayFullActivity.kt
+26
-6
SpJsonUtils.kt
app/src/main/java/com/base/appzxhy/utils/SpJsonUtils.kt
+48
-0
activity_main.xml
app/src/main/res/layout/activity_main.xml
+6
-0
fragment_history_page.xml
app/src/main/res/layout/fragment_history_page.xml
+8
-0
fragment_home.xml
app/src/main/res/layout/fragment_home.xml
+39
-32
fragment_my_list.xml
app/src/main/res/layout/fragment_my_list.xml
+9
-8
fragment_my_list_page.xml
app/src/main/res/layout/fragment_my_list_page.xml
+1
-2
item_shortplay_style_5.xml
app/src/main/res/layout/item_shortplay_style_5.xml
+74
-0
shoucang_n.png
app/src/main/res/mipmap-xxhdpi/shoucang_n.png
+0
-0
shoucang_s.png
app/src/main/res/mipmap-xxhdpi/shoucang_s.png
+0
-0
No files found.
app/src/main/java/com/base/appzxhy/bean/ShortPlayHistory.kt
0 → 100644
View file @
9bd753b1
package
com.base.appzxhy.bean
import
com.bytedance.sdk.shortplay.api.ShortPlay
/**
* 短剧的观看历史
*/
data class
ShortPlayHistory
(
val
shortPlay
:
ShortPlay
,
var
epIndex
:
Int
,
)
{
var
isFavorite
:
Boolean
=
false
}
app/src/main/java/com/base/appzxhy/shortplay/PlayHistoryHelper.java
deleted
100644 → 0
View file @
b3ffe2fa
package
com
.
base
.
appzxhy
.
shortplay
;
import
com.bytedance.sdk.shortplay.api.ShortPlay
;
import
java.util.ArrayList
;
public
class
PlayHistoryHelper
{
private
static
final
ArrayList
<
PlayHistory
>
playHistoryList
=
new
ArrayList
<>();
public
static
void
savePlayHistory
(
PlayHistory
newPlayHistory
)
{
if
(
newPlayHistory
==
null
||
newPlayHistory
.
shortPlay
==
null
)
{
return
;
}
for
(
PlayHistory
history
:
playHistoryList
)
{
if
(
history
.
shortPlay
.
id
==
newPlayHistory
.
shortPlay
.
id
)
{
playHistoryList
.
remove
(
history
);
break
;
}
}
playHistoryList
.
add
(
0
,
newPlayHistory
);
}
public
static
ArrayList
<
PlayHistory
>
getPlayHistory
()
{
return
playHistoryList
;
}
public
static
PlayHistory
getLastWatchShortPlay
()
{
return
playHistoryList
.
isEmpty
()
?
null
:
playHistoryList
.
get
(
0
);
}
public
static
class
PlayHistory
{
public
ShortPlay
shortPlay
;
public
int
index
;
public
int
seconds
;
}
}
app/src/main/java/com/base/appzxhy/ui/adapter/ShortPlayHistoryAdapter.kt
0 → 100644
View file @
9bd753b1
package
com.base.appzxhy.ui.adapter
import
android.content.Context
import
android.graphics.Color
import
android.text.SpannableString
import
android.text.style.ForegroundColorSpan
import
android.view.ViewGroup
import
com.base.appzxhy.R
import
com.base.appzxhy.bean.ShortPlayHistory
import
com.base.appzxhy.databinding.ItemShortplayStyle5Binding
import
com.base.appzxhy.utils.SpJsonUtils
import
com.base.appzxhy.utils.SpJsonUtils.KEY_SHORTPLAY_FAVORITE
import
com.base.appzxhy.utils.XmlEx.inflate
import
com.bumptech.glide.Glide
import
com.bytedance.sdk.shortplay.api.ShortPlay
import
com.chad.library.adapter4.BaseQuickAdapter
import
kotlinx.coroutines.Dispatchers
import
kotlinx.coroutines.MainScope
import
kotlinx.coroutines.launch
class
ShortPlayHistoryAdapter
(
val
layout
:
Int
)
:
BaseQuickAdapter
<
ShortPlayHistory
,
CommonViewHolder
>()
{
var
itemClick
:
((
shortList
:
ShortPlay
)
->
Unit
)?
=
null
override
fun
onBindViewHolder
(
holder
:
CommonViewHolder
,
position
:
Int
,
item
:
ShortPlayHistory
?,
payloads
:
List
<
Any
>)
{
super
.
onBindViewHolder
(
holder
,
position
,
item
,
payloads
)
item
?:
return
when
(
layout
)
{
R
.
layout
.
item_shortplay_style_5
->
{
val
binding
=
ItemShortplayStyle5Binding
.
bind
(
holder
.
itemView
)
kotlin
.
runCatching
{
val
payload
=
payloads
[
0
]
when
(
payload
)
{
"changeFavorite"
->
{
if
(
item
.
isFavorite
)
{
binding
.
ivFavorite
.
setImageResource
(
R
.
mipmap
.
shoucang_s
)
}
else
{
binding
.
ivFavorite
.
setImageResource
(
R
.
mipmap
.
shoucang_n
)
}
saveShortFavorite
(
item
,
item
.
isFavorite
)
}
}
}
}
}
}
/**
* 保存短剧收藏
*/
private
fun
saveShortFavorite
(
item
:
ShortPlayHistory
,
favorite
:
Boolean
)
{
MainScope
().
launch
(
Dispatchers
.
IO
)
{
val
favoriteList
=
SpJsonUtils
.
getSpJsonList
<
ShortPlay
>(
KEY_SHORTPLAY_FAVORITE
).
toMutableList
()
if
(
favorite
)
{
val
findBean
=
favoriteList
.
find
{
it
.
id
==
item
.
shortPlay
.
id
}
if
(
findBean
==
null
)
{
favoriteList
.
add
(
item
.
shortPlay
)
SpJsonUtils
.
saveJsonBeanList
(
KEY_SHORTPLAY_FAVORITE
,
favoriteList
)
}
}
else
{
favoriteList
.
removeIf
{
it
.
id
==
item
.
shortPlay
.
id
}
SpJsonUtils
.
saveJsonBeanList
(
KEY_SHORTPLAY_FAVORITE
,
favoriteList
)
}
}
}
override
fun
onBindViewHolder
(
holder
:
CommonViewHolder
,
position
:
Int
,
item
:
ShortPlayHistory
?)
{
item
?:
return
val
context
=
holder
.
itemView
.
context
when
(
layout
)
{
R
.
layout
.
item_shortplay_style_5
->
{
val
binding
=
ItemShortplayStyle5Binding
.
bind
(
holder
.
itemView
)
Glide
.
with
(
context
).
load
(
item
.
shortPlay
.
coverImage
).
into
(
binding
.
iv
)
binding
.
tvName
.
text
=
item
.
shortPlay
.
title
val
epIndex
=
"EP."
+
item
.
epIndex
+
" "
val
epTotal
=
"/ EP."
+
item
.
shortPlay
.
total
val
fullText
=
epIndex
+
epTotal
val
spannableString
=
SpannableString
(
fullText
)
spannableString
.
setSpan
(
ForegroundColorSpan
(
Color
.
parseColor
(
"#FF3D71"
)),
0
,
epIndex
.
length
,
// 从 0 开始到 epIndex.length 结束
SpannableString
.
SPAN_INCLUSIVE_INCLUSIVE
)
spannableString
.
setSpan
(
ForegroundColorSpan
(
Color
.
parseColor
(
"#80FFFFFF"
)),
epIndex
.
length
,
fullText
.
length
,
// 从 epIndex.length 开始到 fullText.length 结束
SpannableString
.
SPAN_INCLUSIVE_INCLUSIVE
)
binding
.
tvWatchEP
.
text
=
spannableString
if
(
item
.
isFavorite
)
{
binding
.
ivFavorite
.
setImageResource
(
R
.
mipmap
.
shoucang_s
)
}
else
{
binding
.
ivFavorite
.
setImageResource
(
R
.
mipmap
.
shoucang_n
)
}
binding
.
ivFavorite
.
setOnClickListener
{
item
.
isFavorite
=
!
item
.
isFavorite
notifyItemChanged
(
position
,
"changeFavorite"
)
}
}
}
}
override
fun
onCreateViewHolder
(
context
:
Context
,
parent
:
ViewGroup
,
viewType
:
Int
):
CommonViewHolder
{
return
CommonViewHolder
(
layout
.
inflate
(
parent
))
}
}
\ No newline at end of file
app/src/main/java/com/base/appzxhy/ui/concatAdapter/BannerAdapter.kt
View file @
9bd753b1
...
...
@@ -113,8 +113,11 @@ class BannerAdapter : BaseQuickAdapter<List<ShortPlay>, CommonViewHolder>() {
// 获取主题色
val
vibrantColor
:
Int
=
palette
.
getVibrantColor
(
Color
.
TRANSPARENT
)
val
mutedColor
:
Int
=
palette
.
getMutedColor
(
Color
.
TRANSPARENT
)
val
alpha
=
230
// 透明度值,范围为0-255,0为完全透明,255为完全不透明
val
newColor
=
mutedColor
and
0
x00ffffff
or
(
alpha
shl
24
)
// 使用这些颜色进行后续操作,例如设置背景色等
paletteMap
[
coverImage
]
=
muted
Color
paletteMap
[
coverImage
]
=
new
Color
}
}
...
...
app/src/main/java/com/base/appzxhy/ui/main/HomeFragment.kt
View file @
9bd753b1
package
com.base.appzxhy.ui.main
import
android.content.Intent
import
android.graphics.drawable.Drawable
import
android.os.Build
import
androidx.core.view.updatePadding
import
androidx.lifecycle.lifecycleScope
import
androidx.recyclerview.widget.ConcatAdapter
...
...
@@ -19,6 +21,9 @@ import com.base.appzxhy.utils.LogEx
import
com.base.appzxhy.utils.ToastUtils.toast
import
com.bytedance.sdk.shortplay.api.ShortPlay
import
com.google.gson.Gson
import
eightbitlab.com.blurview.BlurAlgorithm
import
eightbitlab.com.blurview.RenderEffectBlur
import
eightbitlab.com.blurview.RenderScriptBlur
import
kotlinx.coroutines.Dispatchers
import
kotlinx.coroutines.flow.collectLatest
import
kotlinx.coroutines.launch
...
...
@@ -33,8 +38,8 @@ class HomeFragment : BaseFragment<FragmentHomeBinding>(FragmentHomeBinding::infl
override
fun
initView
()
{
super
.
initView
()
val
top
=
BarUtils
.
getStatusBarHeight
()
+
requireContext
().
resources
.
getDimensionPixelSize
(
R
.
dimen
.
dp_6
)
binding
.
flSearch
.
updatePadding
(
top
=
top
)
val
top
=
BarUtils
.
getStatusBarHeight
()
+
requireContext
().
resources
.
getDimensionPixelSize
(
R
.
dimen
.
dp_6
)
binding
.
blurView
.
updatePadding
(
top
=
top
)
contactAdapter
=
ConcatAdapter
()
binding
.
rv
.
adapter
=
contactAdapter
...
...
@@ -51,6 +56,12 @@ class HomeFragment : BaseFragment<FragmentHomeBinding>(FragmentHomeBinding::infl
}
}
})
runCatching
{
val
algorithm
:
BlurAlgorithm
=
getBlurAlgorithm
()
binding
.
blurView
.
setupWith
(
binding
.
root
,
algorithm
)
.
setBlurRadius
(
5f
)
}
}
private
val
categories
=
arrayListOf
<
Long
>()
...
...
@@ -87,6 +98,9 @@ class HomeFragment : BaseFragment<FragmentHomeBinding>(FragmentHomeBinding::infl
putExtra
(
"data"
,
Gson
().
toJson
(
shortPlay
))
})
}
it
.
paletteCallBack
=
{
color
->
binding
.
blurView
.
setOverlayColor
(
color
)
}
contactAdapter
?.
addAdapter
(
0
,
it
)
}
...
...
@@ -99,6 +113,14 @@ class HomeFragment : BaseFragment<FragmentHomeBinding>(FragmentHomeBinding::infl
}
private
fun
getBlurAlgorithm
():
BlurAlgorithm
{
val
algorithm
=
if
(
Build
.
VERSION
.
SDK_INT
>=
Build
.
VERSION_CODES
.
S
)
{
RenderEffectBlur
()
}
else
{
RenderScriptBlur
(
requireContext
())
}
return
algorithm
}
override
fun
onResumeOneShoot
()
{
super
.
onResumeOneShoot
()
...
...
app/src/main/java/com/base/appzxhy/ui/main/mylist/HistoryPageFragment.kt
View file @
9bd753b1
package
com.base.appzxhy.ui.main.mylist
import
androidx.core.view.isVisible
import
androidx.lifecycle.lifecycleScope
import
com.base.appzxhy.R
import
com.base.appzxhy.base.BaseFragment
import
com.base.appzxhy.bean.ShortPlayHistory
import
com.base.appzxhy.databinding.FragmentHistoryPageBinding
import
com.base.appzxhy.ui.adapter.ShortPlayHistoryAdapter
import
com.base.appzxhy.utils.SpJsonUtils
import
com.base.appzxhy.utils.SpJsonUtils.KEY_SHORTPLAY_FAVORITE
import
com.base.appzxhy.utils.SpJsonUtils.KEY_SHORTPLAY_HISTORY
import
com.bytedance.sdk.shortplay.api.ShortPlay
import
kotlinx.coroutines.Dispatchers
import
kotlinx.coroutines.launch
class
HistoryPageFragment
:
BaseFragment
<
FragmentHistoryPageBinding
>(
FragmentHistoryPageBinding
::
inflate
)
{
private
val
shortPlayAdapter
=
ShortPlayHistoryAdapter
(
R
.
layout
.
item_shortplay_style_5
)
override
fun
initView
()
{
super
.
initView
()
binding
.
rv
.
adapter
=
shortPlayAdapter
refreshRv
()
}
override
fun
onResume
()
{
super
.
onResume
()
}
private
fun
refreshRv
()
{
lifecycleScope
.
launch
(
Dispatchers
.
IO
)
{
val
favoriteList
=
SpJsonUtils
.
getSpJsonList
<
ShortPlay
>(
KEY_SHORTPLAY_FAVORITE
).
map
{
it
.
id
}
val
list
=
SpJsonUtils
.
getSpJsonList
<
ShortPlayHistory
>(
KEY_SHORTPLAY_HISTORY
)
list
.
forEach
{
if
(
favoriteList
.
contains
(
it
.
shortPlay
.
id
))
{
it
.
isFavorite
=
true
}
}
launch
(
Dispatchers
.
Main
)
{
binding
.
llEmpty
.
isVisible
=
list
.
isEmpty
()
shortPlayAdapter
.
submitList
(
list
)
}
}
}
override
fun
initListener
()
{
...
...
app/src/main/java/com/base/appzxhy/ui/main/mylist/MyListFragment.kt
View file @
9bd753b1
...
...
@@ -10,7 +10,7 @@ import com.base.appzxhy.R
import
com.base.appzxhy.base.BaseFragment
import
com.base.appzxhy.databinding.FragmentMyListBinding
import
com.base.appzxhy.utils.BarUtils
import
com.base.appzxhy.utils.LogEx
class
MyListFragment
:
BaseFragment
<
FragmentMyListBinding
>(
FragmentMyListBinding
::
inflate
)
{
...
...
@@ -18,7 +18,7 @@ class MyListFragment : BaseFragment<FragmentMyListBinding>(FragmentMyListBinding
MyListPageFragment
()
}
private
val
historyPage
by
lazy
(
LazyThreadSafetyMode
.
NONE
)
{
MyList
PageFragment
()
History
PageFragment
()
}
private
val
fragments
=
arrayOf
(
myListPage
,
historyPage
)
private
var
pageAdapter
:
FragmentStateAdapter
?
=
null
...
...
@@ -70,7 +70,11 @@ class MyListFragment : BaseFragment<FragmentMyListBinding>(FragmentMyListBinding
binding
.
dslTabLayout
.
configTabLayoutConfig
{
onSelectIndexChange
=
{
fromIndex
,
selectIndexList
,
reselect
,
fromUser
->
if
(
fromUser
)
{
val
toIndex
=
selectIndexList
.
first
()
LogEx
.
logDebug
(
TAG
,
"fromUser$fromUser toIndex=$toIndex"
)
binding
.
viewPager2
.
setCurrentItem
(
toIndex
,
false
)
}
}
}
ViewPager2Delegate
.
install
(
binding
.
viewPager2
,
binding
.
dslTabLayout
)
...
...
app/src/main/java/com/base/appzxhy/ui/main/mylist/MyListPageFragment.kt
View file @
9bd753b1
package
com.base.appzxhy.ui.main.mylist
import
com.base.appzxhy.R
import
com.base.appzxhy.base.BaseFragment
import
com.base.appzxhy.databinding.FragmentMyListPageBinding
import
com.base.appzxhy.ui.adapter.ShortPlayAdapter
class
MyListPageFragment
:
BaseFragment
<
FragmentMyListPageBinding
>(
FragmentMyListPageBinding
::
inflate
)
{
private
val
shortPlayAdapter
=
ShortPlayAdapter
(
R
.
layout
.
item_shortplay_style_4
)
override
fun
initView
()
{
super
.
initView
()
binding
.
rv
.
adapter
=
shortPlayAdapter
}
override
fun
initListener
()
{
...
...
app/src/main/java/com/base/appzxhy/ui/play/PlayFullActivity.kt
View file @
9bd753b1
...
...
@@ -9,8 +9,10 @@ import android.widget.FrameLayout
import
android.widget.TextView
import
androidx.activity.addCallback
import
androidx.core.content.ContextCompat
import
androidx.lifecycle.lifecycleScope
import
com.base.appzxhy.R
import
com.base.appzxhy.base.BaseActivity
import
com.base.appzxhy.bean.ShortPlayHistory
import
com.base.appzxhy.databinding.ActivityPlayFullBinding
import
com.base.appzxhy.databinding.LayoutOverlayPlayerBinding
import
com.base.appzxhy.databinding.PupupMoreBinding
...
...
@@ -22,6 +24,8 @@ import com.base.appzxhy.ui.views.ShortPlayQualityDialog.showShortPlayQualityDial
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.SpJsonUtils
import
com.base.appzxhy.utils.SpJsonUtils.KEY_SHORTPLAY_HISTORY
import
com.base.appzxhy.utils.ToastUtils.toast
import
com.bytedance.sdk.shortplay.api.PSSDK
import
com.bytedance.sdk.shortplay.api.PSSDK.AdCustomProvider
...
...
@@ -32,6 +36,8 @@ import com.bytedance.sdk.shortplay.api.ShortPlayFragment
import
com.google.gson.Gson
import
com.gyf.immersionbar.ImmersionBar
import
com.ss.ttvideoengine.Resolution
import
kotlinx.coroutines.Dispatchers
import
kotlinx.coroutines.launch
class
PlayFullActivity
:
BaseActivity
<
ActivityPlayFullBinding
>(
ActivityPlayFullBinding
::
inflate
)
{
...
...
@@ -44,8 +50,6 @@ class PlayFullActivity : BaseActivity<ActivityPlayFullBinding>(ActivityPlayFullB
private
var
resolutions
:
Array
<
Resolution
>?
=
null
private
var
currentResolution
=
Resolution
.
Auto
// private val playHistory: PlayHistoryHelper.PlayHistory = PlayHistoryHelper.PlayHistory()
private
val
playControlViewSparseArray
=
SparseArray
<
CustomOverlayView
>()
override
fun
initView
()
{
...
...
@@ -142,15 +146,16 @@ class PlayFullActivity : BaseActivity<ActivityPlayFullBinding>(ActivityPlayFullB
@SuppressLint
(
"SetTextI18n"
)
override
fun
onShortPlayPlayed
(
shortPlay
:
ShortPlay
?,
index
:
Int
)
{
shortPlay
?:
return
this
@PlayFullActivity
.
shortPlay
=
shortPlay
startFromIndex
=
index
LogEx
.
logDebug
(
TAG
,
"onShortPlayPlayed index=$index"
)
playControlViewSparseArray
.
get
(
index
)
?.
findViewById
<
TextView
>(
R
.
id
.
tvTitle
)
?.
text
=
"${shortPlay
?.title} $index/${shortPlay?
.total}"
// playHistory.shortPlay = shortPlay
// playHistory.index = index
// PlayHistoryHelper.savePlayHistory(playHistory
)
"${shortPlay
.title} $index/${shortPlay
.total}"
//保存播放历史
saveShortPlayHistory
(
shortPlay
,
index
)
}
override
fun
onItemSelected
(
position
:
Int
,
type
:
PSSDK
.
ShortPlayDetailPageListener
.
ItemType
,
index
:
Int
)
{
...
...
@@ -291,6 +296,21 @@ class PlayFullActivity : BaseActivity<ActivityPlayFullBinding>(ActivityPlayFullB
}
private
fun
saveShortPlayHistory
(
shortPlay
:
ShortPlay
,
epIndex
:
Int
)
=
lifecycleScope
.
launch
(
Dispatchers
.
IO
)
{
val
list
=
SpJsonUtils
.
getSpJsonList
<
ShortPlayHistory
>(
KEY_SHORTPLAY_HISTORY
).
toMutableList
()
val
findBean
=
list
.
find
{
it
.
shortPlay
.
id
==
shortPlay
.
id
}
if
(
findBean
==
null
)
{
val
newHistory
=
ShortPlayHistory
(
shortPlay
,
epIndex
)
list
.
add
(
newHistory
)
SpJsonUtils
.
saveJsonBeanList
(
KEY_SHORTPLAY_HISTORY
,
list
)
}
else
{
findBean
.
epIndex
=
epIndex
SpJsonUtils
.
saveJsonBeanList
(
KEY_SHORTPLAY_HISTORY
,
list
)
}
}
private
fun
bindPlayControlView
(
playerBinding
:
LayoutOverlayPlayerBinding
)
{
playerBinding
.
niftySlider
.
addOnValueChangeListener
{
slider
,
value
,
fromUser
->
if
(
fromUser
)
{
...
...
app/src/main/java/com/base/appzxhy/utils/SpJsonUtils.kt
0 → 100644
View file @
9bd753b1
package
com.base.appzxhy.utils
import
com.google.gson.Gson
import
com.google.gson.reflect.TypeToken
object
SpJsonUtils
{
val
TAG
=
"SpJsonUtils"
val
KEY_SHORTPLAY_HISTORY
=
"key_shortplay_history"
val
KEY_SHORTPLAY_FAVORITE
=
"key_shortplay_favorite"
inline
fun
<
reified
T
>
getSpJsonList
(
key
:
String
):
List
<
T
>
{
val
sp
=
AppPreferences
.
getInstance
().
getString
(
key
,
""
)
return
if
(
sp
.
equals
(
""
))
{
listOf
()
}
else
{
val
gson
=
Gson
()
val
type
=
object
:
TypeToken
<
List
<
T
>>()
{}.
type
val
list
:
List
<
T
>
=
gson
.
fromJson
(
sp
,
type
)
return
list
}
}
fun
<
T
>
saveJsonBeanList
(
key
:
String
,
list
:
List
<
T
>)
{
val
json
=
Gson
().
toJson
(
list
)
AppPreferences
.
getInstance
().
put
(
key
,
json
)
}
inline
fun
<
reified
T
>
addJsonBean
(
key
:
String
,
bean
:
T
)
{
val
arrayList
=
arrayListOf
<
T
>()
val
list
=
getSpJsonList
<
T
>(
key
)
arrayList
.
addAll
(
list
)
arrayList
.
add
(
bean
)
saveJsonBeanList
(
key
,
arrayList
.
toList
())
}
/**
* 这里保存一定要找到具体的类型,不能用父类
*/
inline
fun
<
reified
T
>
removeJsonBean
(
key
:
String
,
bean
:
T
,
crossinline
removeIf
:
(
it1
:
T
,
it2
:
T
)
->
Boolean
)
{
val
list
=
getSpJsonList
<
T
>(
key
).
toMutableList
()
list
.
removeIf
{
removeIf
(
it
,
bean
)
}
saveJsonBeanList
(
key
,
list
)
}
}
\ No newline at end of file
app/src/main/res/layout/activity_main.xml
View file @
9bd753b1
...
...
@@ -21,6 +21,12 @@
android:layout_marginBottom=
"60dp"
app:layout_constraintBottom_toBottomOf=
"parent"
>
<View
android:layout_width=
"match_parent"
android:layout_height=
"1dp"
android:layout_gravity=
"top"
android:background=
"#33ffffff"
/>
<com.google.android.material.tabs.TabLayout
android:id=
"@+id/tab_layout"
android:layout_width=
"match_parent"
...
...
app/src/main/res/layout/fragment_history_page.xml
View file @
9bd753b1
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout
xmlns:android=
"http://schemas.android.com/apk/res/android"
xmlns:app=
"http://schemas.android.com/apk/res-auto"
xmlns:tools=
"http://schemas.android.com/tools"
android:layout_width=
"match_parent"
android:layout_height=
"match_parent"
tools:context=
".ui.main.mylist.HistoryPageFragment"
>
<androidx.recyclerview.widget.RecyclerView
android:id=
"@+id/rv"
android:layout_width=
"match_parent"
android:layout_height=
"match_parent"
app:layoutManager=
"androidx.recyclerview.widget.LinearLayoutManager"
tools:listitem=
"@layout/item_shortplay_style_5"
/>
<LinearLayout
android:id=
"@+id/llEmpty"
android:layout_width=
"wrap_content"
...
...
app/src/main/res/layout/fragment_home.xml
View file @
9bd753b1
...
...
@@ -18,13 +18,18 @@
app:layoutManager=
"androidx.recyclerview.widget.LinearLayoutManager"
/>
<eightbitlab.com.blurview.BlurView
android:id=
"@+id/flSearch"
android:id=
"@+id/blurView"
android:layout_width=
"match_parent"
android:layout_height=
"wrap_content"
app:blurOverlayColor=
"@color/black"
app:layout_constraintTop_toTopOf=
"parent"
>
<FrameLayout
android:id=
"@+id/flSearch"
android:layout_width=
"match_parent"
android:layout_height=
"wrap_content"
android:paddingHorizontal=
"16dp"
android:paddingBottom=
"6dp"
app:layout_constraintTop_toTopOf=
"parent"
>
android:paddingBottom=
"6dp"
>
<LinearLayout
android:id=
"@+id/llSearch"
...
...
@@ -60,6 +65,8 @@
</LinearLayout>
</FrameLayout>
</eightbitlab.com.blurview.BlurView>
...
...
app/src/main/res/layout/fragment_my_list.xml
View file @
9bd753b1
...
...
@@ -12,26 +12,26 @@
android:layout_width=
"wrap_content"
android:layout_height=
"50dp"
android:layout_marginTop=
"8dp"
app:tab_enable_text_bold=
"true"
app:tab_select_color=
"@color/white"
app:tab_deselect_color=
"#99FFFFFF"
app:layout_constraintEnd_toEndOf=
"parent"
app:layout_constraintStart_toStartOf=
"parent"
app:layout_constraintTop_toTopOf=
"parent"
>
app:layout_constraintTop_toTopOf=
"parent"
app:tab_deselect_color=
"#99FFFFFF"
app:tab_enable_text_bold=
"true"
app:tab_select_color=
"@color/white"
>
<TextView
android:textSize=
"18sp"
android:layout_width=
"120dp"
android:layout_height=
"match_parent"
android:gravity=
"center"
android:text=
"@string/my_list"
/>
android:text=
"@string/my_list"
android:textSize=
"18sp"
/>
<TextView
android:textSize=
"18sp"
android:layout_width=
"120dp"
android:layout_height=
"match_parent"
android:gravity=
"center"
android:text=
"@string/history"
/>
android:text=
"@string/history"
android:textSize=
"18sp"
/>
</com.angcyo.tablayout.DslTabLayout>
...
...
@@ -39,6 +39,7 @@
android:id=
"@+id/viewPager2"
android:layout_width=
"match_parent"
android:layout_height=
"0dp"
android:background=
"@color/black"
app:layout_constraintBottom_toBottomOf=
"parent"
app:layout_constraintTop_toBottomOf=
"@id/dslTabLayout"
/>
...
...
app/src/main/res/layout/fragment_my_list_page.xml
View file @
9bd753b1
...
...
@@ -6,7 +6,6 @@
android:layout_height=
"match_parent"
tools:context=
".ui.main.mylist.MyListPageFragment"
>
<androidx.recyclerview.widget.RecyclerView
android:id=
"@+id/rv"
android:layout_width=
"wrap_content"
...
...
@@ -14,7 +13,7 @@
android:layout_gravity=
"center"
app:layoutManager=
"androidx.recyclerview.widget.GridLayoutManager"
app:spanCount=
"3"
tools:listitem=
"@layout/item_shortplay_style_
2
"
/>
tools:listitem=
"@layout/item_shortplay_style_
3
"
/>
<LinearLayout
android:id=
"@+id/llEmpty"
...
...
app/src/main/res/layout/item_shortplay_style_5.xml
0 → 100644
View file @
9bd753b1
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout
xmlns:android=
"http://schemas.android.com/apk/res/android"
xmlns:app=
"http://schemas.android.com/apk/res-auto"
xmlns:tools=
"http://schemas.android.com/tools"
android:layout_width=
"match_parent"
android:layout_height=
"wrap_content"
android:layout_marginVertical=
"6dp"
tools:background=
"@color/black"
>
<androidx.cardview.widget.CardView
android:id=
"@+id/card"
android:layout_width=
"108dp"
android:layout_height=
"142dp"
android:layout_marginStart=
"14dp"
app:cardCornerRadius=
"10dp"
app:layout_constraintStart_toStartOf=
"parent"
app:layout_constraintTop_toTopOf=
"parent"
>
<ImageView
android:id=
"@+id/iv"
android:layout_width=
"match_parent"
android:layout_height=
"match_parent"
android:scaleType=
"centerCrop"
tools:ignore=
"ContentDescription"
/>
</androidx.cardview.widget.CardView>
<LinearLayout
android:layout_width=
"0dp"
android:layout_height=
"wrap_content"
android:layout_marginHorizontal=
"12dp"
android:orientation=
"vertical"
app:layout_constraintBottom_toBottomOf=
"parent"
app:layout_constraintEnd_toStartOf=
"@id/ivFavorite"
app:layout_constraintStart_toEndOf=
"@id/card"
app:layout_constraintTop_toTopOf=
"parent"
>
<TextView
android:id=
"@+id/tvName"
android:layout_width=
"120dp"
android:layout_height=
"wrap_content"
android:layout_marginTop=
"15dp"
android:maxLines=
"2"
android:textColor=
"@color/white"
android:textSize=
"14sp"
tools:ignore=
"TextSizeCheck"
tools:text=
"The Quarterback Next Door"
/>
<TextView
android:id=
"@+id/tvWatchEP"
android:layout_width=
"wrap_content"
android:layout_height=
"wrap_content"
android:layout_marginVertical=
"4dp"
android:layout_marginTop=
"4dp"
android:singleLine=
"true"
android:textColor=
"#FF3D71"
android:textSize=
"13sp"
tools:text=
"EP.O / EP.82"
/>
</LinearLayout>
<ImageView
android:id=
"@+id/ivFavorite"
android:layout_width=
"wrap_content"
android:layout_height=
"wrap_content"
android:layout_marginEnd=
"16dp"
android:src=
"@mipmap/shoucang_s"
app:layout_constraintBottom_toBottomOf=
"@id/card"
app:layout_constraintEnd_toEndOf=
"parent"
app:layout_constraintTop_toTopOf=
"@id/card"
/>
</androidx.constraintlayout.widget.ConstraintLayout>
\ No newline at end of file
app/src/main/res/mipmap-xxhdpi/shoucang_n.png
0 → 100644
View file @
9bd753b1
3.77 KB
app/src/main/res/mipmap-xxhdpi/shoucang_s.png
0 → 100644
View file @
9bd753b1
2.85 KB
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