Commit 9bd753b1 authored by wanglei's avatar wanglei

...搜索栏高斯模糊

parent b3ffe2fa
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
}
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;
}
}
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
...@@ -113,8 +113,11 @@ class BannerAdapter : BaseQuickAdapter<List<ShortPlay>, CommonViewHolder>() { ...@@ -113,8 +113,11 @@ class BannerAdapter : BaseQuickAdapter<List<ShortPlay>, CommonViewHolder>() {
// 获取主题色 // 获取主题色
val vibrantColor: Int = palette.getVibrantColor(Color.TRANSPARENT) val vibrantColor: Int = palette.getVibrantColor(Color.TRANSPARENT)
val mutedColor: Int = palette.getMutedColor(Color.TRANSPARENT) val mutedColor: Int = palette.getMutedColor(Color.TRANSPARENT)
val alpha = 230 // 透明度值,范围为0-255,0为完全透明,255为完全不透明
val newColor = mutedColor and 0x00ffffff or (alpha shl 24)
// 使用这些颜色进行后续操作,例如设置背景色等 // 使用这些颜色进行后续操作,例如设置背景色等
paletteMap[coverImage] = mutedColor paletteMap[coverImage] = newColor
} }
} }
......
package com.base.appzxhy.ui.main package com.base.appzxhy.ui.main
import android.content.Intent import android.content.Intent
import android.graphics.drawable.Drawable
import android.os.Build
import androidx.core.view.updatePadding import androidx.core.view.updatePadding
import androidx.lifecycle.lifecycleScope import androidx.lifecycle.lifecycleScope
import androidx.recyclerview.widget.ConcatAdapter import androidx.recyclerview.widget.ConcatAdapter
...@@ -19,6 +21,9 @@ import com.base.appzxhy.utils.LogEx ...@@ -19,6 +21,9 @@ import com.base.appzxhy.utils.LogEx
import com.base.appzxhy.utils.ToastUtils.toast import com.base.appzxhy.utils.ToastUtils.toast
import com.bytedance.sdk.shortplay.api.ShortPlay import com.bytedance.sdk.shortplay.api.ShortPlay
import com.google.gson.Gson 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.Dispatchers
import kotlinx.coroutines.flow.collectLatest import kotlinx.coroutines.flow.collectLatest
import kotlinx.coroutines.launch import kotlinx.coroutines.launch
...@@ -33,8 +38,8 @@ class HomeFragment : BaseFragment<FragmentHomeBinding>(FragmentHomeBinding::infl ...@@ -33,8 +38,8 @@ class HomeFragment : BaseFragment<FragmentHomeBinding>(FragmentHomeBinding::infl
override fun initView() { override fun initView() {
super.initView() super.initView()
val top = BarUtils.getStatusBarHeight()+requireContext().resources.getDimensionPixelSize(R.dimen.dp_6) val top = BarUtils.getStatusBarHeight() + requireContext().resources.getDimensionPixelSize(R.dimen.dp_6)
binding.flSearch.updatePadding(top = top) binding.blurView.updatePadding(top = top)
contactAdapter = ConcatAdapter() contactAdapter = ConcatAdapter()
binding.rv.adapter = contactAdapter binding.rv.adapter = contactAdapter
...@@ -51,6 +56,12 @@ class HomeFragment : BaseFragment<FragmentHomeBinding>(FragmentHomeBinding::infl ...@@ -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>() private val categories = arrayListOf<Long>()
...@@ -87,6 +98,9 @@ class HomeFragment : BaseFragment<FragmentHomeBinding>(FragmentHomeBinding::infl ...@@ -87,6 +98,9 @@ class HomeFragment : BaseFragment<FragmentHomeBinding>(FragmentHomeBinding::infl
putExtra("data", Gson().toJson(shortPlay)) putExtra("data", Gson().toJson(shortPlay))
}) })
} }
it.paletteCallBack = { color ->
binding.blurView.setOverlayColor(color)
}
contactAdapter?.addAdapter(0, it) contactAdapter?.addAdapter(0, it)
} }
...@@ -99,6 +113,14 @@ class HomeFragment : BaseFragment<FragmentHomeBinding>(FragmentHomeBinding::infl ...@@ -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() { override fun onResumeOneShoot() {
super.onResumeOneShoot() super.onResumeOneShoot()
......
package com.base.appzxhy.ui.main.mylist 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.base.BaseFragment
import com.base.appzxhy.bean.ShortPlayHistory
import com.base.appzxhy.databinding.FragmentHistoryPageBinding 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) { class HistoryPageFragment : BaseFragment<FragmentHistoryPageBinding>(FragmentHistoryPageBinding::inflate) {
private val shortPlayAdapter = ShortPlayHistoryAdapter(R.layout.item_shortplay_style_5)
override fun initView() { override fun initView() {
super.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() { override fun initListener() {
......
...@@ -10,7 +10,7 @@ import com.base.appzxhy.R ...@@ -10,7 +10,7 @@ import com.base.appzxhy.R
import com.base.appzxhy.base.BaseFragment import com.base.appzxhy.base.BaseFragment
import com.base.appzxhy.databinding.FragmentMyListBinding import com.base.appzxhy.databinding.FragmentMyListBinding
import com.base.appzxhy.utils.BarUtils import com.base.appzxhy.utils.BarUtils
import com.base.appzxhy.utils.LogEx
class MyListFragment : BaseFragment<FragmentMyListBinding>(FragmentMyListBinding::inflate) { class MyListFragment : BaseFragment<FragmentMyListBinding>(FragmentMyListBinding::inflate) {
...@@ -18,7 +18,7 @@ class MyListFragment : BaseFragment<FragmentMyListBinding>(FragmentMyListBinding ...@@ -18,7 +18,7 @@ class MyListFragment : BaseFragment<FragmentMyListBinding>(FragmentMyListBinding
MyListPageFragment() MyListPageFragment()
} }
private val historyPage by lazy(LazyThreadSafetyMode.NONE) { private val historyPage by lazy(LazyThreadSafetyMode.NONE) {
MyListPageFragment() HistoryPageFragment()
} }
private val fragments = arrayOf(myListPage, historyPage) private val fragments = arrayOf(myListPage, historyPage)
private var pageAdapter: FragmentStateAdapter? = null private var pageAdapter: FragmentStateAdapter? = null
...@@ -70,7 +70,11 @@ class MyListFragment : BaseFragment<FragmentMyListBinding>(FragmentMyListBinding ...@@ -70,7 +70,11 @@ class MyListFragment : BaseFragment<FragmentMyListBinding>(FragmentMyListBinding
binding.dslTabLayout.configTabLayoutConfig { binding.dslTabLayout.configTabLayoutConfig {
onSelectIndexChange = { fromIndex, selectIndexList, reselect, fromUser -> onSelectIndexChange = { fromIndex, selectIndexList, reselect, fromUser ->
val toIndex = selectIndexList.first() if (fromUser) {
val toIndex = selectIndexList.first()
LogEx.logDebug(TAG, "fromUser$fromUser toIndex=$toIndex")
binding.viewPager2.setCurrentItem(toIndex, false)
}
} }
} }
ViewPager2Delegate.install(binding.viewPager2, binding.dslTabLayout) ViewPager2Delegate.install(binding.viewPager2, binding.dslTabLayout)
......
package com.base.appzxhy.ui.main.mylist package com.base.appzxhy.ui.main.mylist
import com.base.appzxhy.R
import com.base.appzxhy.base.BaseFragment import com.base.appzxhy.base.BaseFragment
import com.base.appzxhy.databinding.FragmentMyListPageBinding import com.base.appzxhy.databinding.FragmentMyListPageBinding
import com.base.appzxhy.ui.adapter.ShortPlayAdapter
class MyListPageFragment : BaseFragment<FragmentMyListPageBinding>(FragmentMyListPageBinding::inflate) { class MyListPageFragment : BaseFragment<FragmentMyListPageBinding>(FragmentMyListPageBinding::inflate) {
private val shortPlayAdapter = ShortPlayAdapter(R.layout.item_shortplay_style_4)
override fun initView() { override fun initView() {
super.initView() super.initView()
binding.rv.adapter = shortPlayAdapter
} }
override fun initListener() { override fun initListener() {
......
...@@ -9,8 +9,10 @@ import android.widget.FrameLayout ...@@ -9,8 +9,10 @@ import android.widget.FrameLayout
import android.widget.TextView import android.widget.TextView
import androidx.activity.addCallback import androidx.activity.addCallback
import androidx.core.content.ContextCompat import androidx.core.content.ContextCompat
import androidx.lifecycle.lifecycleScope
import com.base.appzxhy.R import com.base.appzxhy.R
import com.base.appzxhy.base.BaseActivity import com.base.appzxhy.base.BaseActivity
import com.base.appzxhy.bean.ShortPlayHistory
import com.base.appzxhy.databinding.ActivityPlayFullBinding import com.base.appzxhy.databinding.ActivityPlayFullBinding
import com.base.appzxhy.databinding.LayoutOverlayPlayerBinding import com.base.appzxhy.databinding.LayoutOverlayPlayerBinding
import com.base.appzxhy.databinding.PupupMoreBinding import com.base.appzxhy.databinding.PupupMoreBinding
...@@ -22,6 +24,8 @@ import com.base.appzxhy.ui.views.ShortPlayQualityDialog.showShortPlayQualityDial ...@@ -22,6 +24,8 @@ import com.base.appzxhy.ui.views.ShortPlayQualityDialog.showShortPlayQualityDial
import com.base.appzxhy.ui.views.ShortPlaySpeedDialog.showShortPlaySpeedDialog import com.base.appzxhy.ui.views.ShortPlaySpeedDialog.showShortPlaySpeedDialog
import com.base.appzxhy.utils.KotlinExt.formatSeconds import com.base.appzxhy.utils.KotlinExt.formatSeconds
import com.base.appzxhy.utils.LogEx 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.base.appzxhy.utils.ToastUtils.toast
import com.bytedance.sdk.shortplay.api.PSSDK import com.bytedance.sdk.shortplay.api.PSSDK
import com.bytedance.sdk.shortplay.api.PSSDK.AdCustomProvider import com.bytedance.sdk.shortplay.api.PSSDK.AdCustomProvider
...@@ -32,6 +36,8 @@ import com.bytedance.sdk.shortplay.api.ShortPlayFragment ...@@ -32,6 +36,8 @@ import com.bytedance.sdk.shortplay.api.ShortPlayFragment
import com.google.gson.Gson import com.google.gson.Gson
import com.gyf.immersionbar.ImmersionBar import com.gyf.immersionbar.ImmersionBar
import com.ss.ttvideoengine.Resolution import com.ss.ttvideoengine.Resolution
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.launch
class PlayFullActivity : BaseActivity<ActivityPlayFullBinding>(ActivityPlayFullBinding::inflate) { class PlayFullActivity : BaseActivity<ActivityPlayFullBinding>(ActivityPlayFullBinding::inflate) {
...@@ -44,8 +50,6 @@ class PlayFullActivity : BaseActivity<ActivityPlayFullBinding>(ActivityPlayFullB ...@@ -44,8 +50,6 @@ class PlayFullActivity : BaseActivity<ActivityPlayFullBinding>(ActivityPlayFullB
private var resolutions: Array<Resolution>? = null private var resolutions: Array<Resolution>? = null
private var currentResolution = Resolution.Auto private var currentResolution = Resolution.Auto
// private val playHistory: PlayHistoryHelper.PlayHistory = PlayHistoryHelper.PlayHistory()
private val playControlViewSparseArray = SparseArray<CustomOverlayView>() private val playControlViewSparseArray = SparseArray<CustomOverlayView>()
override fun initView() { override fun initView() {
...@@ -142,15 +146,16 @@ class PlayFullActivity : BaseActivity<ActivityPlayFullBinding>(ActivityPlayFullB ...@@ -142,15 +146,16 @@ class PlayFullActivity : BaseActivity<ActivityPlayFullBinding>(ActivityPlayFullB
@SuppressLint("SetTextI18n") @SuppressLint("SetTextI18n")
override fun onShortPlayPlayed(shortPlay: ShortPlay?, index: Int) { override fun onShortPlayPlayed(shortPlay: ShortPlay?, index: Int) {
shortPlay ?: return
this@PlayFullActivity.shortPlay = shortPlay this@PlayFullActivity.shortPlay = shortPlay
startFromIndex = index startFromIndex = index
LogEx.logDebug(TAG, "onShortPlayPlayed index=$index") LogEx.logDebug(TAG, "onShortPlayPlayed index=$index")
playControlViewSparseArray.get(index)?.findViewById<TextView>(R.id.tvTitle)?.text = playControlViewSparseArray.get(index)?.findViewById<TextView>(R.id.tvTitle)?.text =
"${shortPlay?.title} $index/${shortPlay?.total}" "${shortPlay.title} $index/${shortPlay.total}"
// playHistory.shortPlay = shortPlay
// playHistory.index = index //保存播放历史
// PlayHistoryHelper.savePlayHistory(playHistory) saveShortPlayHistory(shortPlay, index)
} }
override fun onItemSelected(position: Int, type: PSSDK.ShortPlayDetailPageListener.ItemType, index: Int) { override fun onItemSelected(position: Int, type: PSSDK.ShortPlayDetailPageListener.ItemType, index: Int) {
...@@ -291,6 +296,21 @@ class PlayFullActivity : BaseActivity<ActivityPlayFullBinding>(ActivityPlayFullB ...@@ -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) { private fun bindPlayControlView(playerBinding: LayoutOverlayPlayerBinding) {
playerBinding.niftySlider.addOnValueChangeListener { slider, value, fromUser -> playerBinding.niftySlider.addOnValueChangeListener { slider, value, fromUser ->
if (fromUser) { if (fromUser) {
......
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
...@@ -21,6 +21,12 @@ ...@@ -21,6 +21,12 @@
android:layout_marginBottom="60dp" android:layout_marginBottom="60dp"
app:layout_constraintBottom_toBottomOf="parent"> 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 <com.google.android.material.tabs.TabLayout
android:id="@+id/tab_layout" android:id="@+id/tab_layout"
android:layout_width="match_parent" android:layout_width="match_parent"
......
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" <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" xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="match_parent" android:layout_height="match_parent"
tools:context=".ui.main.mylist.HistoryPageFragment"> 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 <LinearLayout
android:id="@+id/llEmpty" android:id="@+id/llEmpty"
android:layout_width="wrap_content" android:layout_width="wrap_content"
......
...@@ -18,47 +18,54 @@ ...@@ -18,47 +18,54 @@
app:layoutManager="androidx.recyclerview.widget.LinearLayoutManager" /> app:layoutManager="androidx.recyclerview.widget.LinearLayoutManager" />
<eightbitlab.com.blurview.BlurView <eightbitlab.com.blurview.BlurView
android:id="@+id/flSearch" android:id="@+id/blurView"
app:blurOverlayColor="@color/black"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:paddingHorizontal="16dp" app:blurOverlayColor="@color/black"
android:paddingBottom="6dp"
app:layout_constraintTop_toTopOf="parent"> app:layout_constraintTop_toTopOf="parent">
<LinearLayout <FrameLayout
android:id="@+id/llSearch" android:id="@+id/flSearch"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="45dp" android:layout_height="wrap_content"
android:background="@drawable/bg_stroke_61ffffff_10" android:paddingHorizontal="16dp"
android:gravity="center" android:paddingBottom="6dp">
android:orientation="horizontal"
tools:ignore="UselessParent">
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:layout_marginStart="15dp"
android:src="@mipmap/h_shousuo"
tools:ignore="ContentDescription" />
<EditText <LinearLayout
android:id="@+id/editSearch" android:id="@+id/llSearch"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="45dp"
android:layout_gravity="center_vertical" android:background="@drawable/bg_stroke_61ffffff_10"
android:layout_marginHorizontal="13dp" android:gravity="center"
android:background="@null" android:orientation="horizontal"
android:singleLine="true" tools:ignore="UselessParent">
android:textColor="#80FFFFFF"
android:textColorHint="#80FFFFFF" <ImageView
android:textSize="17sp" android:layout_width="wrap_content"
tools:hint="Snatched a Billionaire to be My H..." android:layout_height="wrap_content"
tools:ignore="Autofill,LabelFor,TextFields,TouchTargetSizeCheck,VisualLintTextFieldSize" /> android:layout_gravity="center_vertical"
android:layout_marginStart="15dp"
android:src="@mipmap/h_shousuo"
tools:ignore="ContentDescription" />
<EditText
android:id="@+id/editSearch"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:layout_marginHorizontal="13dp"
android:background="@null"
android:singleLine="true"
android:textColor="#80FFFFFF"
android:textColorHint="#80FFFFFF"
android:textSize="17sp"
tools:hint="Snatched a Billionaire to be My H..."
tools:ignore="Autofill,LabelFor,TextFields,TouchTargetSizeCheck,VisualLintTextFieldSize" />
</LinearLayout>
</LinearLayout> </FrameLayout>
</eightbitlab.com.blurview.BlurView> </eightbitlab.com.blurview.BlurView>
......
...@@ -12,26 +12,26 @@ ...@@ -12,26 +12,26 @@
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="50dp" android:layout_height="50dp"
android:layout_marginTop="8dp" 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_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="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 <TextView
android:textSize="18sp"
android:layout_width="120dp" android:layout_width="120dp"
android:layout_height="match_parent" android:layout_height="match_parent"
android:gravity="center" android:gravity="center"
android:text="@string/my_list" /> android:text="@string/my_list"
android:textSize="18sp" />
<TextView <TextView
android:textSize="18sp"
android:layout_width="120dp" android:layout_width="120dp"
android:layout_height="match_parent" android:layout_height="match_parent"
android:gravity="center" android:gravity="center"
android:text="@string/history" /> android:text="@string/history"
android:textSize="18sp" />
</com.angcyo.tablayout.DslTabLayout> </com.angcyo.tablayout.DslTabLayout>
...@@ -39,6 +39,7 @@ ...@@ -39,6 +39,7 @@
android:id="@+id/viewPager2" android:id="@+id/viewPager2"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="0dp" android:layout_height="0dp"
android:background="@color/black"
app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintTop_toBottomOf="@id/dslTabLayout" /> app:layout_constraintTop_toBottomOf="@id/dslTabLayout" />
......
...@@ -6,7 +6,6 @@ ...@@ -6,7 +6,6 @@
android:layout_height="match_parent" android:layout_height="match_parent"
tools:context=".ui.main.mylist.MyListPageFragment"> tools:context=".ui.main.mylist.MyListPageFragment">
<androidx.recyclerview.widget.RecyclerView <androidx.recyclerview.widget.RecyclerView
android:id="@+id/rv" android:id="@+id/rv"
android:layout_width="wrap_content" android:layout_width="wrap_content"
...@@ -14,7 +13,7 @@ ...@@ -14,7 +13,7 @@
android:layout_gravity="center" android:layout_gravity="center"
app:layoutManager="androidx.recyclerview.widget.GridLayoutManager" app:layoutManager="androidx.recyclerview.widget.GridLayoutManager"
app:spanCount="3" app:spanCount="3"
tools:listitem="@layout/item_shortplay_style_2" /> tools:listitem="@layout/item_shortplay_style_3" />
<LinearLayout <LinearLayout
android:id="@+id/llEmpty" android:id="@+id/llEmpty"
......
<?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
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment