Commit 24bd4887 authored by wanglei's avatar wanglei

...

parent 61277593
...@@ -13,7 +13,8 @@ android { ...@@ -13,7 +13,8 @@ android {
compileSdk = 34 compileSdk = 34
defaultConfig { defaultConfig {
applicationId = "com.tool.advanced.cleaner" //只有这个pkg可以播放
applicationId = "com.example.dramasdk"
minSdk = 24 minSdk = 24
targetSdk = 34 targetSdk = 34
versionCode = 1 versionCode = 1
......
...@@ -9,7 +9,7 @@ ...@@ -9,7 +9,7 @@
"client_info": { "client_info": {
"mobilesdk_app_id": "1:755421476297:android:c66d8129d83b17e8af6418", "mobilesdk_app_id": "1:755421476297:android:c66d8129d83b17e8af6418",
"android_client_info": { "android_client_info": {
"package_name": "com.tool.advanced.cleaner" "package_name": "com.example.dramasdk"
} }
}, },
"oauth_client": [], "oauth_client": [],
......
package com.base.appzxhy.bean
data class ShortPlayEPBean(
val ep: Int,
val lock: Boolean = false,
var isPlaying: Boolean = false
)
\ No newline at end of file
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.view.View
import android.view.ViewGroup
import androidx.core.view.isVisible
import com.base.appzxhy.R
import com.base.appzxhy.bean.ShortPlayEPBean
import com.base.appzxhy.databinding.ItemEpBinding
import com.base.appzxhy.utils.XmlEx.inflate
import com.chad.library.adapter4.BaseQuickAdapter
class EPAdapter : BaseQuickAdapter<ShortPlayEPBean, CommonViewHolder>() {
override fun onBindViewHolder(holder: CommonViewHolder, position: Int, item: ShortPlayEPBean?) {
item ?: return
val context = holder.itemView.context
val binding = ItemEpBinding.bind(holder.itemView)
if (item.isPlaying) {
binding.ivLock.visibility = View.GONE
binding.tvEP.visibility = View.GONE
binding.ivPlay.visibility = View.VISIBLE
} else {
binding.ivPlay.visibility = View.GONE
binding.ivLock.isVisible = item.lock
binding.tvEP.visibility = View.VISIBLE
}
}
override fun onCreateViewHolder(context: Context, parent: ViewGroup, viewType: Int): CommonViewHolder {
return CommonViewHolder(R.layout.item_ep.inflate(parent))
}
}
\ No newline at end of file
...@@ -140,6 +140,11 @@ class HomeFragment : BaseFragment<FragmentHomeBinding>(FragmentHomeBinding::infl ...@@ -140,6 +140,11 @@ class HomeFragment : BaseFragment<FragmentHomeBinding>(FragmentHomeBinding::infl
if (BuildConfig.DEBUG) { if (BuildConfig.DEBUG) {
requireContext().toast("${item.title}") requireContext().toast("${item.title}")
} }
val activity = requireActivity() as MainActivity?
activity ?: return
activity.startActivity(Intent(activity, PlayFullActivity::class.java).apply {
putExtra("data", Gson().toJson(item))
})
} }
private fun jumpCategory(ids: Long) { private fun jumpCategory(ids: Long) {
......
package com.base.appzxhy.ui.play
import android.annotation.SuppressLint
import android.content.Context
import android.graphics.Color
import android.graphics.drawable.Drawable
import android.view.Gravity
import androidx.appcompat.widget.AppCompatTextView
import androidx.core.content.ContextCompat
import com.base.appzxhy.R
import com.base.appzxhy.utils.LogEx
import com.bytedance.sdk.shortplay.api.PSSDK
import com.bytedance.sdk.shortplay.api.PSSDK.ControlStatus
import com.bytedance.sdk.shortplay.api.PSSDK.IControlStatusView
import com.bytedance.sdk.shortplay.api.ShortPlay
import com.bytedance.sdk.shortplay.api.ShortPlayFragment
class CustomCollectView : AppCompatTextView, IControlStatusView {
private val TAG = "CustomCollectView"
private var collectDrawable: Drawable?
private var collectedDrawable: Drawable?
private var status = ControlStatus.Normal
constructor(context: Context) : super(context) {
gravity = Gravity.CENTER_HORIZONTAL
setTextColor(Color.parseColor("#ffffff"))
textSize = 12f
collectDrawable = ContextCompat.getDrawable(context, R.mipmap.fy_shoucang_n)
collectedDrawable = ContextCompat.getDrawable(context, R.mipmap.fy_shoucang_s)
val size = resources.getDimensionPixelSize(R.dimen.dp_32)
collectDrawable?.setBounds(0, 0, size, size)
collectedDrawable?.setBounds(0, 0, size, size)
}
override fun getControlViewType(): PSSDK.ControlViewType {
return PSSDK.ControlViewType.Collect
}
override fun bindItemData(fragment: ShortPlayFragment?, shortPlay: ShortPlay, index: Int) {
}
@SuppressLint("SetTextI18n")
override fun setCurrentStatus(shortPlay: ShortPlay, index: Int, status: ControlStatus, extraInfo: PSSDK.StatusExtraInfo) {
this.status = status
LogEx.logDebug(TAG, "setCurrentStatus status=$status")
setCompoundDrawables(null, if (status == ControlStatus.Normal) collectDrawable else collectedDrawable, null, null)
text = extraInfo.totalCollectCount.toString()
}
override fun getCurrentStatus(shortPlay: ShortPlay, index: Int): ControlStatus {
return status
}
override fun onClicked(shortPlay: ShortPlay, index: Int, status: ControlStatus): ControlStatus {
return if (status == ControlStatus.Normal) ControlStatus.Selected else ControlStatus.Normal
}
}
\ No newline at end of file
package com.base.appzxhy.ui.play
import android.annotation.SuppressLint
import android.content.Context
import android.graphics.Color
import android.graphics.drawable.Drawable
import android.view.Gravity
import androidx.appcompat.widget.AppCompatTextView
import androidx.core.content.ContextCompat
import com.base.appzxhy.R
import com.base.appzxhy.utils.LogEx
import com.bytedance.sdk.shortplay.api.PSSDK
import com.bytedance.sdk.shortplay.api.PSSDK.ControlStatus
import com.bytedance.sdk.shortplay.api.PSSDK.IControlStatusView
import com.bytedance.sdk.shortplay.api.ShortPlay
import com.bytedance.sdk.shortplay.api.ShortPlayFragment
class CustomLikeView : AppCompatTextView, IControlStatusView {
private val TAG = "CustomLikeView"
private var likeDrawable: Drawable?
private var likedDrawable: Drawable?
private var status = ControlStatus.Normal
constructor(context: Context) : super(context) {
gravity = Gravity.CENTER_HORIZONTAL
setTextColor(Color.parseColor("#ffffff"))
textSize = 12f
likeDrawable = ContextCompat.getDrawable(context, R.mipmap.fy_dianzan_n)
likedDrawable = ContextCompat.getDrawable(context, R.mipmap.fy_dianzan_s)
val size = resources.getDimensionPixelSize(R.dimen.dp_32)
likeDrawable?.setBounds(0, 0, size, size)
likedDrawable?.setBounds(0, 0, size, size)
}
override fun getControlViewType(): PSSDK.ControlViewType {
return PSSDK.ControlViewType.Like
}
override fun bindItemData(fragment: ShortPlayFragment?, shortPlay: ShortPlay, index: Int) {
}
@SuppressLint("SetTextI18n")
override fun setCurrentStatus(shortPlay: ShortPlay, index: Int, status: ControlStatus, extraInfo: PSSDK.StatusExtraInfo) {
this.status = status
LogEx.logDebug(TAG, "setCurrentStatus status=$status")
setCompoundDrawables(null, if (status == ControlStatus.Normal) likeDrawable else likedDrawable, null, null)
text = extraInfo.totalCollectCount.toString()
}
override fun getCurrentStatus(shortPlay: ShortPlay, index: Int): ControlStatus {
return status
}
override fun onClicked(shortPlay: ShortPlay, index: Int, status: ControlStatus): ControlStatus {
return if (status == ControlStatus.Normal) ControlStatus.Selected else ControlStatus.Normal
}
}
\ No newline at end of file
package com.base.appzxhy.ui.play
import android.annotation.SuppressLint
import android.content.Context
import android.graphics.Color
import android.graphics.drawable.Drawable
import android.view.Gravity
import androidx.appcompat.widget.AppCompatTextView
import androidx.core.content.ContextCompat
import com.base.appzxhy.R
import com.base.appzxhy.utils.LogEx
import com.bytedance.sdk.shortplay.api.PSSDK
import com.bytedance.sdk.shortplay.api.PSSDK.ControlStatus
import com.bytedance.sdk.shortplay.api.PSSDK.IControlStatusView
import com.bytedance.sdk.shortplay.api.ShortPlay
import com.bytedance.sdk.shortplay.api.ShortPlayFragment
class CustomView : AppCompatTextView, IControlStatusView {
private val TAG = "CustomEPView"
private var drawable: Drawable?
private var status = ControlStatus.Normal
constructor(context: Context, drawableRes: Int) : super(context) {
gravity = Gravity.CENTER_HORIZONTAL
setTextColor(Color.parseColor("#ffffff"))
textSize = 12f
drawable = ContextCompat.getDrawable(context, drawableRes)
val size = resources.getDimensionPixelSize(R.dimen.dp_32)
drawable?.setBounds(0, 0, size, size)
setCompoundDrawables(null, drawable, null, null)
}
override fun getControlViewType(): PSSDK.ControlViewType {
return PSSDK.ControlViewType.CUSTOM
}
override fun bindItemData(fragment: ShortPlayFragment?, shortPlay: ShortPlay, index: Int) {
}
@SuppressLint("SetTextI18n")
override fun setCurrentStatus(shortPlay: ShortPlay, index: Int, status: ControlStatus, extraInfo: PSSDK.StatusExtraInfo) {
this.status = status
LogEx.logDebug(TAG, "setCurrentStatus status=$status")
}
override fun getCurrentStatus(shortPlay: ShortPlay, index: Int): ControlStatus {
return status
}
override fun onClicked(shortPlay: ShortPlay, index: Int, status: ControlStatus): ControlStatus {
return ControlStatus.Normal
}
}
\ No newline at end of file
package com.base.appzxhy.ui.play package com.base.appzxhy.ui.play
import android.annotation.SuppressLint
import android.view.Gravity
import android.view.View import android.view.View
import android.widget.FrameLayout
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.databinding.ActivityPlayFullBinding import com.base.appzxhy.databinding.ActivityPlayFullBinding
import com.base.appzxhy.shortplay.PlayHistoryHelper
import com.base.appzxhy.utils.LogEx 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.PSSDK import com.bytedance.sdk.shortplay.api.PSSDK
...@@ -24,6 +28,8 @@ class PlayFullActivity : BaseActivity<ActivityPlayFullBinding>(ActivityPlayFullB ...@@ -24,6 +28,8 @@ class PlayFullActivity : BaseActivity<ActivityPlayFullBinding>(ActivityPlayFullB
private val startFromIndex = 1//剧集下标 private val startFromIndex = 1//剧集下标
private val startFromSeconds = 0//开始秒数 private val startFromSeconds = 0//开始秒数
private val playHistory: PlayHistoryHelper.PlayHistory = PlayHistoryHelper.PlayHistory()
override fun initView() { override fun initView() {
super.initView() super.initView()
val data = intent.extras?.getString("data") val data = intent.extras?.getString("data")
...@@ -33,6 +39,7 @@ class PlayFullActivity : BaseActivity<ActivityPlayFullBinding>(ActivityPlayFullB ...@@ -33,6 +39,7 @@ class PlayFullActivity : BaseActivity<ActivityPlayFullBinding>(ActivityPlayFullB
} }
shortPlay?.let { showDetailFragment(it) } shortPlay?.let { showDetailFragment(it) }
shortPlay?.episodes
} }
override fun initListener() { override fun initListener() {
...@@ -84,6 +91,7 @@ class PlayFullActivity : BaseActivity<ActivityPlayFullBinding>(ActivityPlayFullB ...@@ -84,6 +91,7 @@ class PlayFullActivity : BaseActivity<ActivityPlayFullBinding>(ActivityPlayFullB
}) })
builder.progressBarMarginToBottom(10) builder.progressBarMarginToBottom(10)
builder.enableImmersiveMode(1500)
detailFragment = PSSDK.createDetailFragment(shortPlay, builder.build(), object : PSSDK.ShortPlayDetailPageListener { detailFragment = PSSDK.createDetailFragment(shortPlay, builder.build(), object : PSSDK.ShortPlayDetailPageListener {
...@@ -91,6 +99,7 @@ class PlayFullActivity : BaseActivity<ActivityPlayFullBinding>(ActivityPlayFullB ...@@ -91,6 +99,7 @@ class PlayFullActivity : BaseActivity<ActivityPlayFullBinding>(ActivityPlayFullB
} }
override fun onPlayFailed(errorInfo: PSSDK.ErrorInfo?): Boolean { override fun onPlayFailed(errorInfo: PSSDK.ErrorInfo?): Boolean {
LogEx.logDebug(TAG, "msg=${errorInfo?.msg} code=${errorInfo?.code}")
if (errorInfo?.code == PSSDK.ErrorInfo.ERROR_CODE_CURRENT_COUNTRY_NOT_SUPPORT) { if (errorInfo?.code == PSSDK.ErrorInfo.ERROR_CODE_CURRENT_COUNTRY_NOT_SUPPORT) {
// 当前地区不支持播放,SDK会Toast提示,开发者也可以在此时显示弹窗等更友好的提示 // 当前地区不支持播放,SDK会Toast提示,开发者也可以在此时显示弹窗等更友好的提示
// return true表示替换掉SDK内的Toast提示 // return true表示替换掉SDK内的Toast提示
...@@ -102,6 +111,9 @@ class PlayFullActivity : BaseActivity<ActivityPlayFullBinding>(ActivityPlayFullB ...@@ -102,6 +111,9 @@ class PlayFullActivity : BaseActivity<ActivityPlayFullBinding>(ActivityPlayFullB
} }
override fun onShortPlayPlayed(shortPlay: ShortPlay?, index: Int) { override fun onShortPlayPlayed(shortPlay: ShortPlay?, index: Int) {
playHistory.shortPlay = shortPlay
playHistory.index = index
PlayHistoryHelper.savePlayHistory(playHistory)
} }
override fun onItemSelected(position: Int, p1: PSSDK.ShortPlayDetailPageListener.ItemType?, index: Int) { override fun onItemSelected(position: Int, p1: PSSDK.ShortPlayDetailPageListener.ItemType?, index: Int) {
...@@ -109,6 +121,7 @@ class PlayFullActivity : BaseActivity<ActivityPlayFullBinding>(ActivityPlayFullB ...@@ -109,6 +121,7 @@ class PlayFullActivity : BaseActivity<ActivityPlayFullBinding>(ActivityPlayFullB
} }
override fun onVideoPlayStateChanged(shortPlay: ShortPlay?, index: Int, playbackState: Int) { override fun onVideoPlayStateChanged(shortPlay: ShortPlay?, index: Int, playbackState: Int) {
// LogEx.logDebug(TAG)
} }
override fun onVideoPlayCompleted(shortPlay: ShortPlay?, index: Int) { override fun onVideoPlayCompleted(shortPlay: ShortPlay?, index: Int) {
...@@ -135,8 +148,61 @@ class PlayFullActivity : BaseActivity<ActivityPlayFullBinding>(ActivityPlayFullB ...@@ -135,8 +148,61 @@ class PlayFullActivity : BaseActivity<ActivityPlayFullBinding>(ActivityPlayFullB
override fun onVideoInfoFetched(shortPlay: ShortPlay?, index: Int, videoPlayInfo: PSSDK.VideoPlayInfo?) { override fun onVideoInfoFetched(shortPlay: ShortPlay?, index: Int, videoPlayInfo: PSSDK.VideoPlayInfo?) {
} }
@SuppressLint("RtlHardcoded")
override fun onObtainPlayerControlViews(): MutableList<View> { override fun onObtainPlayerControlViews(): MutableList<View> {
return arrayListOf(View(this@PlayFullActivity)) val views = java.util.ArrayList<View>()
val aLLBottomMargin = this@PlayFullActivity.resources.getDimensionPixelSize(R.dimen.dp_120)
val itemMargin = this@PlayFullActivity.resources.getDimensionPixelSize(R.dimen.dp_70)
// 点赞按钮
val customLikeView = CustomLikeView(applicationContext)
val likeParams =
FrameLayout.LayoutParams(FrameLayout.LayoutParams.WRAP_CONTENT, FrameLayout.LayoutParams.WRAP_CONTENT).apply {
gravity = Gravity.BOTTOM or Gravity.RIGHT
bottomMargin = aLLBottomMargin + itemMargin * 3
rightMargin = this@PlayFullActivity.resources.getDimensionPixelSize(R.dimen.dp_18)
}
customLikeView.setLayoutParams(likeParams)
views.add(customLikeView)
//收藏按钮
val customCollectView = CustomCollectView(applicationContext)
val collectParams =
FrameLayout.LayoutParams(FrameLayout.LayoutParams.WRAP_CONTENT, FrameLayout.LayoutParams.WRAP_CONTENT).apply {
gravity = Gravity.BOTTOM or Gravity.RIGHT
bottomMargin = aLLBottomMargin + itemMargin * 2
rightMargin = this@PlayFullActivity.resources.getDimensionPixelSize(R.dimen.dp_18)
}
customCollectView.setLayoutParams(collectParams)
views.add(customCollectView)
//选集
val customPEView = CustomView(applicationContext, R.mipmap.fy_list)
customPEView.text = resources.getString(R.string.list)
val peParams =
FrameLayout.LayoutParams(FrameLayout.LayoutParams.WRAP_CONTENT, FrameLayout.LayoutParams.WRAP_CONTENT).apply {
gravity = Gravity.BOTTOM or Gravity.RIGHT
bottomMargin = aLLBottomMargin + itemMargin
rightMargin = this@PlayFullActivity.resources.getDimensionPixelSize(R.dimen.dp_18)
}
customPEView.setLayoutParams(peParams)
views.add(customPEView)
//分享
val customShareView = CustomView(applicationContext, R.mipmap.fy_share)
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 = this@PlayFullActivity.resources.getDimensionPixelSize(R.dimen.dp_18)
}
customShareView.setLayoutParams(shareParams)
views.add(customShareView)
return views
} }
}) })
if (detailFragment == null) { if (detailFragment == null) {
......
package com.base.appzxhy.ui.views
import android.content.Context
import android.view.LayoutInflater
import android.view.View
import com.base.appzxhy.R
import com.base.appzxhy.bean.ShortPlayEPBean
import com.base.appzxhy.databinding.DialogEpListBinding
import com.google.android.material.bottomsheet.BottomSheetBehavior
import com.google.android.material.bottomsheet.BottomSheetDialog
object ShortPlayEPDialog {
fun Context.showShortPlayEPDialog(totalEp: Int, lockEp: Int, playEp: Int) {
val dialog = BottomSheetDialog(this, R.style.BottomSheetDialog)
val binding = DialogEpListBinding.inflate(LayoutInflater.from(this))
dialog.setContentView(binding.root)
dialog.setCanceledOnTouchOutside(false)
dialog.show()
val parentView = binding.root.parent as View
val behavior = BottomSheetBehavior.from(parentView)
//展开
behavior.state = BottomSheetBehavior.STATE_EXPANDED
val textLength = resources.getDimensionPixelOffset(R.dimen.dp_5)
val list = ArrayList<ShortPlayEPBean>()
repeat(totalEp) { i ->
val ep = i + 1
val lock = ep >= lockEp
val isPlay = ep == playEp
val bean = ShortPlayEPBean(ep, lock, isPlay)
list.add(bean)
}
// binding.dslTabLayout.tabIndicator.indicatorDrawable =
// ContextCompat.getDrawable(this, R.drawable.indicator_bottom_line_ff3d71)
// binding.dslTabLayout.tabIndicator.indicatorEnableFlow = true
// binding.dslTabLayout.tabIndicator.ignoreChildPadding = true
//
// binding.dslTabLayout.configTabLayoutConfig {
// onSelectIndexChange = { fromIndex, selectIndexList, reselect, fromUser ->
// val toIndex = selectIndexList.first()
// binding.dslTabLayout.tabIndicator.indicatorWidth = tab.length * textLength
// }
// }
}
}
\ No newline at end of file
package com.base.appzxhy.ui.views
import android.app.AlertDialog
import android.content.Context
import android.view.Gravity
import android.view.LayoutInflater
import com.base.appzxhy.databinding.DialogPlaySpeedBinding
object ShortPlaySpeedDialog {
fun Context.showShortPlaySpeedDialog() {
val dialog = AlertDialog.Builder(this).create()
val binding = DialogPlaySpeedBinding.inflate(LayoutInflater.from(this))
dialog.setView(binding.root)
dialog.setCanceledOnTouchOutside(false)
dialog.show()
val params = dialog.window?.attributes
// params?.width = resources.getDimensionPixelOffset(R.dimen.dp_320)
// params?.height = resources.getDimensionPixelOffset(R.dimen.dp_400)
params?.gravity = Gravity.CENTER
// params?.y = 50
}
}
\ No newline at end of file
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
<solid android:color="#d17E7887" />
<corners android:radius="5dp" />
</shape>
\ No newline at end of file
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
<solid android:color="#FF3D71"/>
<corners android:radius="5dp"/>
</shape>
\ No newline at end of file
<?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">
<ImageView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@mipmap/fy_bg"
android:minHeight="336dp"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
tools:ignore="ContentDescription" />
<TextView
android:id="@+id/tv"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_margin="18dp"
android:text="List(Completed)"
android:textColor="@color/white"
android:textSize="14sp"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
tools:ignore="HardcodedText" />
<com.angcyo.tablayout.DslTabLayout
android:id="@+id/dslTabLayout"
android:layout_width="match_parent"
android:layout_height="30dp"
android:layout_marginTop="20dp"
app:layout_constraintTop_toBottomOf="@id/tv"
app:tab_indicator_height="2dp">
</com.angcyo.tablayout.DslTabLayout>
<View
android:id="@+id/v"
android:layout_width="match_parent"
android:layout_height="1dp"
android:background="@color/white"
app:layout_constraintTop_toBottomOf="@id/dslTabLayout" />
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/rv"
android:layout_width="0dp"
android:layout_height="0dp"
android:orientation="vertical"
app:layoutManager="androidx.recyclerview.widget.GridLayoutManager"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/v"
app:spanCount="5"
tools:listitem="@layout/item_ep" />
</androidx.constraintlayout.widget.ConstraintLayout>
\ No newline at end of file
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">
</androidx.constraintlayout.widget.ConstraintLayout>
\ No newline at end of file
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="0dp"
android:layout_height="46dp"
android:layout_columnWeight="1"
android:layout_margin="4dp"
android:background="@drawable/bg_d17e7887_5">
<TextView
android:id="@+id/tvEP"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:gravity="center"
android:textColor="@color/white"
android:textSize="16sp" />
<ImageView
android:id="@+id/ivPlay"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:src="@mipmap/fy_bofang"
tools:ignore="ContentDescription" />
<ImageView
android:id="@+id/ivLock"
android:layout_gravity="end|top"
android:src="@mipmap/fy_suo"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
tools:ignore="ContentDescription" />
</FrameLayout>
\ No newline at end of file
...@@ -9,4 +9,23 @@ ...@@ -9,4 +9,23 @@
<dimen name="dp_50">50dp</dimen> <dimen name="dp_50">50dp</dimen>
<dimen name="dp_2">2dp</dimen> <dimen name="dp_2">2dp</dimen>
<dimen name="dp_5">5dp</dimen> <dimen name="dp_5">5dp</dimen>
<dimen name="dp_400">400dp</dimen>
<dimen name="dp_18">18dp</dimen>
<dimen name="dp_32">32dp</dimen>
<dimen name="dp_300">300dp</dimen>
<dimen name="dp_250">250dp</dimen>
<dimen name="dp_220">220dp</dimen>
<dimen name="dp_140">140dp</dimen>
<dimen name="dp_80">80dp</dimen>
<dimen name="dp_350">350dp</dimen>
<dimen name="dp_360">360dp</dimen>
<dimen name="dp_240">240dp</dimen>
<dimen name="dp_180">180dp</dimen>
<dimen name="dp_260">260dp</dimen>
<dimen name="dp_160">160dp</dimen>
<dimen name="dp_120">120dp</dimen>
<dimen name="dp_190">190dp</dimen>
<dimen name="dp_310">310dp</dimen>
<dimen name="dp_330">330dp</dimen>
<dimen name="dp_70">70dp</dimen>
</resources> </resources>
\ No newline at end of file
...@@ -26,5 +26,7 @@ ...@@ -26,5 +26,7 @@
<string name="action">Action</string> <string name="action">Action</string>
<string name="acg">ACG</string> <string name="acg">ACG</string>
<string name="others">Others</string> <string name="others">Others</string>
<string name="share">Share</string>
<string name="list">List</string>
</resources> </resources>
\ No newline at end of file
...@@ -11,4 +11,12 @@ ...@@ -11,4 +11,12 @@
<item name="android:windowBackground">@drawable/splash_bp</item> <item name="android:windowBackground">@drawable/splash_bp</item>
<item name="android:windowFullscreen">false</item> <item name="android:windowFullscreen">false</item>
</style> </style>
<style name="BottomSheetDialog" parent="Theme.Design.Light.BottomSheetDialog">
<item name="bottomSheetStyle">@style/bottomSheetStyleWrapper</item>
</style>
<style name="bottomSheetStyleWrapper" parent="Widget.Design.BottomSheet.Modal">
<item name="android:background">@android:color/transparent</item>
</style>
</resources> </resources>
\ 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