mirror of
https://github.com/lizongying/my-tv.git
synced 2026-10-26 22:26:29 +08:00
change style
This commit is contained in:
+24
@@ -1,5 +1,11 @@
|
||||
## 更新日志
|
||||
|
||||
### v1.8.0(通用)
|
||||
|
||||
* 修复返回键无法退出问题
|
||||
* 设置中增加退出按钮
|
||||
* 修改非电视上的样式
|
||||
|
||||
### v1.7.8(通用)
|
||||
|
||||
* 修复播放过程中的卡顿问题
|
||||
@@ -14,6 +20,24 @@
|
||||
* 临时去掉部分频道,提高频道的可用性
|
||||
* 部分频道增加节目单
|
||||
|
||||
### v1.7.5(安卓5及以上专用)
|
||||
|
||||
* 修复播放过程中的卡顿问题
|
||||
* 增加时间显示
|
||||
* 频道号优化
|
||||
* 设置中增加退出按钮
|
||||
|
||||
### v1.7.4(通用)
|
||||
|
||||
* 修复368
|
||||
|
||||
### v1.7.3(安卓5及以上专用)
|
||||
|
||||
* 临时去掉部分频道,提高频道的可用性
|
||||
* 部分频道增加节目单
|
||||
* 遥控器左键进入节目列表
|
||||
* 遥控器右键进入菜单
|
||||
|
||||
### v1.7.2(通用)
|
||||
|
||||
* 支持节目列表网格样式和行样式切换,软件重启后生效
|
||||
|
||||
@@ -31,7 +31,6 @@ adb install my-tv.apk
|
||||
* CHC高清三个电影频道
|
||||
* 地方频道
|
||||
* 收藏夹
|
||||
* 自定义源
|
||||
* 海外
|
||||
* 1.5.0 无法安装,1.5.1 可以安装
|
||||
* 节目增加预告
|
||||
@@ -42,6 +41,14 @@ adb install my-tv.apk
|
||||
* 亮度调节
|
||||
* 音量调节
|
||||
|
||||
## 版权说明
|
||||
|
||||
本项目仅供学习研究,禁止用于商业用途,请于下载二十四小时内删除。
|
||||
|
||||
本项目可能随时终止,请大家谨慎使用,建议使用官方渠道进行观看。
|
||||
|
||||
本项目使用的部分代码、图片、文字等资源来源于网络,如有侵权,请联系删除。
|
||||
|
||||
## 赞赏
|
||||
|
||||

|
||||
@@ -93,12 +93,14 @@ class CardAdapter(
|
||||
|
||||
cardView.titleText = tvViewModel.getTV().title
|
||||
|
||||
cardView.mainImageView?.let {
|
||||
Glide.with(viewHolder.view.context)
|
||||
.load(tvViewModel.getTV().logo)
|
||||
.centerInside()
|
||||
.into(cardView.mainImageView)
|
||||
.into(it)
|
||||
}
|
||||
|
||||
cardView.mainImageView.setBackgroundColor(Color.WHITE)
|
||||
cardView.mainImageView?.setBackgroundColor(Color.WHITE)
|
||||
cardView.setMainImageScaleType(ImageView.ScaleType.CENTER_INSIDE)
|
||||
|
||||
val epg = tvViewModel.epg.value?.filter { it.beginTime < Utils.getDateTimestamp() }
|
||||
|
||||
@@ -16,6 +16,7 @@ class ChannelFragment : Fragment() {
|
||||
private val handler = Handler()
|
||||
private val delay: Long = 3000
|
||||
private var channel = 0
|
||||
private var channelCount = 0
|
||||
|
||||
override fun onCreateView(
|
||||
inflater: LayoutInflater, container: ViewGroup?,
|
||||
@@ -23,6 +24,38 @@ class ChannelFragment : Fragment() {
|
||||
): View {
|
||||
_binding = ChannelBinding.inflate(inflater, container, false)
|
||||
_binding!!.root.visibility = View.GONE
|
||||
|
||||
val activity = requireActivity()
|
||||
val application = activity.applicationContext as MyApplication
|
||||
val displayMetrics = application.getDisplayMetrics()
|
||||
|
||||
displayMetrics.density
|
||||
|
||||
var screenWidth = displayMetrics.widthPixels
|
||||
var screenHeight = displayMetrics.heightPixels
|
||||
if (screenHeight > screenWidth) {
|
||||
screenWidth = displayMetrics.heightPixels
|
||||
screenHeight = displayMetrics.widthPixels
|
||||
}
|
||||
|
||||
val ratio = 16f / 9f
|
||||
|
||||
if (screenWidth / screenHeight > ratio) {
|
||||
val x = ((screenWidth - screenHeight * ratio) / 2).toInt()
|
||||
val originalLayoutParams =
|
||||
binding.channel.layoutParams as ViewGroup.MarginLayoutParams
|
||||
originalLayoutParams.rightMargin += x
|
||||
binding.channel.layoutParams = originalLayoutParams
|
||||
}
|
||||
|
||||
if (screenWidth / screenHeight < ratio) {
|
||||
val y = ((screenHeight - screenWidth / ratio) / 2).toInt()
|
||||
val originalLayoutParams =
|
||||
binding.channel.layoutParams as ViewGroup.MarginLayoutParams
|
||||
originalLayoutParams.topMargin += y
|
||||
binding.channel.layoutParams = originalLayoutParams
|
||||
}
|
||||
|
||||
(activity as MainActivity).fragmentReady("ChannelFragment")
|
||||
return binding.root
|
||||
}
|
||||
@@ -30,20 +63,21 @@ class ChannelFragment : Fragment() {
|
||||
fun show(tvViewModel: TVViewModel) {
|
||||
handler.removeCallbacks(hideRunnable)
|
||||
handler.removeCallbacks(playRunnable)
|
||||
binding.channelContent.text = (tvViewModel.getTV().id.plus(1)).toString()
|
||||
binding.content.text = (tvViewModel.getTV().id.plus(1)).toString()
|
||||
view?.visibility = View.VISIBLE
|
||||
handler.postDelayed(hideRunnable, delay)
|
||||
}
|
||||
|
||||
fun show(channel: String) {
|
||||
if (binding.channelContent.text.length > 1) {
|
||||
if (channelCount > 1) {
|
||||
return
|
||||
}
|
||||
this.channel = "${binding.channelContent.text}$channel".toInt()
|
||||
channelCount++
|
||||
this.channel = "${this.channel}$channel".toInt()
|
||||
handler.removeCallbacks(hideRunnable)
|
||||
handler.removeCallbacks(playRunnable)
|
||||
if (binding.channelContent.text == "") {
|
||||
binding.channelContent.text = channel
|
||||
if (channelCount < 2) {
|
||||
binding.content.text = "${this.channel}"
|
||||
view?.visibility = View.VISIBLE
|
||||
handler.postDelayed(playRunnable, delay)
|
||||
} else {
|
||||
@@ -65,14 +99,18 @@ class ChannelFragment : Fragment() {
|
||||
}
|
||||
|
||||
private val hideRunnable = Runnable {
|
||||
binding.channelContent.text = ""
|
||||
binding.content.text = ""
|
||||
view?.visibility = View.GONE
|
||||
channel = 0
|
||||
channelCount = 0
|
||||
}
|
||||
|
||||
private val playRunnable = Runnable {
|
||||
(activity as MainActivity).play(channel - 1)
|
||||
binding.channelContent.text = ""
|
||||
binding.content.text = ""
|
||||
view?.visibility = View.GONE
|
||||
channel = 0
|
||||
channelCount = 0
|
||||
}
|
||||
|
||||
override fun onDestroyView() {
|
||||
|
||||
@@ -50,7 +50,7 @@ val Context.appVersionCode: Long
|
||||
* Return the version name of the app which is defined in build.gradle.
|
||||
* eg:1.0.0
|
||||
*/
|
||||
val Context.appVersionName: String get() = packageInfo.versionName ?: ""
|
||||
val Context.appVersionName: String get() = packageInfo.versionName
|
||||
|
||||
val Context.appSignature: String
|
||||
get() {
|
||||
|
||||
@@ -23,7 +23,31 @@ class InfoFragment : Fragment() {
|
||||
savedInstanceState: Bundle?
|
||||
): View {
|
||||
_binding = InfoBinding.inflate(inflater, container, false)
|
||||
|
||||
val activity = requireActivity()
|
||||
val application = activity.applicationContext as MyApplication
|
||||
val displayMetrics = application.getDisplayMetrics()
|
||||
|
||||
displayMetrics.density
|
||||
|
||||
var screenWidth = displayMetrics.widthPixels
|
||||
var screenHeight = displayMetrics.heightPixels
|
||||
if (screenHeight > screenWidth) {
|
||||
screenWidth = displayMetrics.heightPixels
|
||||
screenHeight = displayMetrics.widthPixels
|
||||
}
|
||||
|
||||
val ratio = 16f / 9f
|
||||
|
||||
if (screenWidth / screenHeight < ratio) {
|
||||
val y = ((screenHeight - screenWidth / ratio) / 2).toInt()
|
||||
val originalLayoutParams = binding.info.layoutParams as ViewGroup.MarginLayoutParams
|
||||
originalLayoutParams.bottomMargin += y
|
||||
binding.info.layoutParams = originalLayoutParams
|
||||
}
|
||||
|
||||
_binding!!.root.visibility = View.GONE
|
||||
|
||||
(activity as MainActivity).fragmentReady("InfoFragment")
|
||||
return binding.root
|
||||
}
|
||||
|
||||
@@ -325,7 +325,7 @@ class MainActivity : FragmentActivity(), Request.RequestListener {
|
||||
return
|
||||
}
|
||||
|
||||
if (!settingFragment.isHidden) {
|
||||
if (settingFragment.isVisible) {
|
||||
hideSettingFragment()
|
||||
return
|
||||
}
|
||||
|
||||
@@ -42,6 +42,39 @@ class MainFragment : Fragment(), CardAdapter.ItemListener {
|
||||
): View {
|
||||
_binding = MenuBinding.inflate(inflater, container, false)
|
||||
|
||||
val activity = requireActivity()
|
||||
val application = activity.applicationContext as MyApplication
|
||||
val displayMetrics = application.getDisplayMetrics()
|
||||
|
||||
displayMetrics.density
|
||||
|
||||
var screenWidth = displayMetrics.widthPixels
|
||||
var screenHeight = displayMetrics.heightPixels
|
||||
if (screenHeight > screenWidth) {
|
||||
screenWidth = displayMetrics.heightPixels
|
||||
screenHeight = displayMetrics.widthPixels
|
||||
}
|
||||
|
||||
val ratio = 16f / 9f
|
||||
|
||||
if (screenWidth / screenHeight > ratio) {
|
||||
val x = ((screenWidth - screenHeight * ratio) / 2).toInt()
|
||||
val originalLayoutParams =
|
||||
binding.scroll.layoutParams as ViewGroup.MarginLayoutParams
|
||||
originalLayoutParams.leftMargin += x
|
||||
originalLayoutParams.rightMargin += x
|
||||
binding.scroll.layoutParams = originalLayoutParams
|
||||
}
|
||||
|
||||
if (screenWidth / screenHeight < ratio) {
|
||||
val y = ((screenHeight - screenWidth / ratio) / 2).toInt()
|
||||
val originalLayoutParams =
|
||||
binding.scroll.layoutParams as ViewGroup.MarginLayoutParams
|
||||
originalLayoutParams.topMargin += y
|
||||
originalLayoutParams.bottomMargin += y
|
||||
binding.scroll.layoutParams = originalLayoutParams
|
||||
}
|
||||
|
||||
binding.menu.setOnClickListener {
|
||||
hideSelf()
|
||||
}
|
||||
@@ -119,7 +152,7 @@ class MainFragment : Fragment(), CardAdapter.ItemListener {
|
||||
val layoutParams = itemBinding.row.layoutParams as ViewGroup.MarginLayoutParams
|
||||
layoutParams.topMargin = dpToPx(11F)
|
||||
itemBinding.row.layoutParams = layoutParams
|
||||
itemBinding.row.setOnClickListener{
|
||||
itemBinding.row.setOnClickListener {
|
||||
hideSelf()
|
||||
}
|
||||
content.addView(itemBinding.row)
|
||||
|
||||
@@ -1,6 +1,23 @@
|
||||
package com.lizongying.mytv
|
||||
|
||||
import android.app.Application
|
||||
import android.content.Context
|
||||
import android.util.DisplayMetrics
|
||||
import android.view.WindowManager
|
||||
|
||||
class MyApplication : Application() {
|
||||
private lateinit var displayMetrics: DisplayMetrics
|
||||
|
||||
override fun onCreate() {
|
||||
super.onCreate()
|
||||
|
||||
displayMetrics = DisplayMetrics()
|
||||
val windowManager = getSystemService(Context.WINDOW_SERVICE) as WindowManager
|
||||
// windowManager.defaultDisplay.getRealMetrics(displayMetrics)
|
||||
windowManager.defaultDisplay.getMetrics(displayMetrics)
|
||||
}
|
||||
|
||||
fun getDisplayMetrics(): DisplayMetrics {
|
||||
return displayMetrics
|
||||
}
|
||||
}
|
||||
@@ -590,7 +590,7 @@ object Request {
|
||||
val randomNumber = Random.nextDouble()
|
||||
val url = tvModel.getTV().videoUrl.first()
|
||||
|
||||
var r = KvcollectRequest(
|
||||
val r = KvcollectRequest(
|
||||
guid = guid,
|
||||
prog = sid,
|
||||
viewid = sid,
|
||||
@@ -605,27 +605,10 @@ object Request {
|
||||
_dc = randomNumber,
|
||||
)
|
||||
|
||||
var e =
|
||||
val e =
|
||||
"BossId=${r.BossId}&Pwd=${r.Pwd}&_dc=${r._dc}&cdn=${r.cdn}&cmd=${r.cmd}&defn=${r.defn}&downspeed=${r.downspeed}&durl=${r.durl}&errcode=${r.errcode}&fact1=${r.fact1}&firstreport=${r.firstreport}&fplayerver=${r.fplayerver}&ftime=${r.ftime}&geturltime=6&guid=${r.guid}&hc_openid=${r.hc_openid}&hh_ua=${r.hh_ua}&live_type=${r.live_type}&livepid=${r.livepid}&login_type=${r.login_type}&open_id=&openid=${r.openid}&platform=${r.platform}&playno=${r.playno}&prd=${r.prd}&prog=${r.prog}&rand_str=${r.rand_str}&sRef=${r.sRef}&sUrl=${r.sUrl}&sdtfrom=${r.sdtfrom}&seq=${r.seq}&url=${r.url}&viewid=${r.viewid}"
|
||||
println(e)
|
||||
r.signature = YSP.getAuthSignature(e)
|
||||
println(r.signature)
|
||||
|
||||
// val ttt = """{"BossId":2727,"Pwd":1424084450,"prog":"2022576801","playno":"BEoZw3cpZh","guid":"luccvoyr_58va8i3cqw6","hh_ua":"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/123.0.0.0 Safari/537.36","cdn":"waibao","sdtfrom":"ysp_pc_01","prd":60000,"platform":"5910204","errcode":"","durl":"https://outlivecloud-cdn.ysp.cctv.cn/906028A94D533483FE8BAC5CF4DB6CC70753E25A93EF3EC50988538DEDBF10161D1EA8F67C916EE41BA9D891D7893C69500B3F1A37CA814D2EE19341197360196CD9CCF327949104097C904643D493EB5A9B588EC28A2FAC1C8E30F8EE330DB2364B0DEC0124F6990A83773FF283489A/2022576803.m3u8?from=player&svrtime=1713365896&pid=600001859&cdn=5401&revoi=6E400EC7436C79D49BA06E61333D31FB8915F3484D9426FE4CCC4DE01CB8FD1DF473A8F416EF1107B669B0A9447F913272789A827EDD3DC0FE88534D9B59A35669678946589AA4D246F8F248F7C33AB08CE72FA0A73FE7F1F9FD2091D30176895CB8BD44A5B85FAD9579C700CB2AFD8D0939574B2A3EFF4C1B237DFF3E0CD3E194662F9FDEE48D1ACD7BDFAB01868B220743021C40E0EA5514ECCF396B509DA1&app_id=519748109&guid=luccvoyr_58va8i3cqw6&ysign=bb79232986c5429600d76cfedb1d5978&ytime=1713365896&ytype=1","firstreport":1,"sUrl":"https://www.yangshipin.cn/#/tv/home?pid=600001859","sRef":"","fplayerver":"100","livepid":"600001859","viewid":"2022576801","seq":0,"cmd":263,"login_type":"","geturltime":6,"downspeed":1.75,"hc_openid":"","open_id":"","defn":"fhd","fact1":"ysp_pc_live_b","openid":"","_dc":0.7140416315131102,"live_type":"","ftime":"2024-04-17 22:58:31","url":"https://outlivecloud-cdn.ysp.cctv.cn/906028A94D533483FE8BAC5CF4DB6CC70753E25A93EF3EC50988538DEDBF10161D1EA8F67C916EE41BA9D891D7893C69500B3F1A37CA814D2EE19341197360196CD9CCF327949104097C904643D493EB5A9B588EC28A2FAC1C8E30F8EE330DB2364B0DEC0124F6990A83773FF283489A/2022576803.m3u8?from=player&svrtime=1713365896&pid=600001859&cdn=5401&revoi=6E400EC7436C79D49BA06E61333D31FB8915F3484D9426FE4CCC4DE01CB8FD1DF473A8F416EF1107B669B0A9447F913272789A827EDD3DC0FE88534D9B59A35669678946589AA4D246F8F248F7C33AB08CE72FA0A73FE7F1F9FD2091D30176895CB8BD44A5B85FAD9579C700CB2AFD8D0939574B2A3EFF4C1B237DFF3E0CD3E194662F9FDEE48D1ACD7BDFAB01868B220743021C40E0EA5514ECCF396B509DA1&app_id=519748109&guid=luccvoyr_58va8i3cqw6&ysign=bb79232986c5429600d76cfedb1d5978&ytime=1713365896&ytype=1","rand_str":"oKkkZs8lON"}"""
|
||||
// val gson = Gson()
|
||||
// r = gson.fromJson(ttt, KvcollectRequest::class.java)
|
||||
//
|
||||
// e =
|
||||
// "BossId=${r.BossId}&Pwd=${r.Pwd}&_dc=${r._dc}&cdn=${r.cdn}&cmd=${r.cmd}&defn=${r.defn}&downspeed=${r.downspeed}&durl=${r.durl}&errcode=${r.errcode}&fact1=${r.fact1}&firstreport=${r.firstreport}&fplayerver=${r.fplayerver}&ftime=${r.ftime}&geturltime=6&guid=${r.guid}&hc_openid=${r.hc_openid}&hh_ua=${r.hh_ua}&live_type=${r.live_type}&livepid=${r.livepid}&login_type=${r.login_type}&open_id=&openid=${r.openid}&platform=${r.platform}&playno=${r.playno}&prd=${r.prd}&prog=${r.prog}&rand_str=${r.rand_str}&sRef=${r.sRef}&sUrl=${r.sUrl}&sdtfrom=${r.sdtfrom}&seq=${r.seq}&url=${r.url}&viewid=${r.viewid}"
|
||||
// println(e)
|
||||
// e = "BossId=2727&Pwd=1424084450&_dc=0.7140416315131102&cdn=waibao&cmd=263&defn=fhd&downspeed=1.75&durl=https://outlivecloud-cdn.ysp.cctv.cn/906028A94D533483FE8BAC5CF4DB6CC70753E25A93EF3EC50988538DEDBF10161D1EA8F67C916EE41BA9D891D7893C69500B3F1A37CA814D2EE19341197360196CD9CCF327949104097C904643D493EB5A9B588EC28A2FAC1C8E30F8EE330DB2364B0DEC0124F6990A83773FF283489A/2022576803.m3u8?from=player&svrtime=1713365896&pid=600001859&cdn=5401&revoi=6E400EC7436C79D49BA06E61333D31FB8915F3484D9426FE4CCC4DE01CB8FD1DF473A8F416EF1107B669B0A9447F913272789A827EDD3DC0FE88534D9B59A35669678946589AA4D246F8F248F7C33AB08CE72FA0A73FE7F1F9FD2091D30176895CB8BD44A5B85FAD9579C700CB2AFD8D0939574B2A3EFF4C1B237DFF3E0CD3E194662F9FDEE48D1ACD7BDFAB01868B220743021C40E0EA5514ECCF396B509DA1&app_id=519748109&guid=luccvoyr_58va8i3cqw6&ysign=bb79232986c5429600d76cfedb1d5978&ytime=1713365896&ytype=1&errcode=&fact1=ysp_pc_live_b&firstreport=1&fplayerver=100&ftime=2024-04-17 22:58:31&geturltime=6&guid=luccvoyr_58va8i3cqw6&hc_openid=&hh_ua=Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/123.0.0.0 Safari/537.36&live_type=&livepid=600001859&login_type=&open_id=&openid=&platform=5910204&playno=BEoZw3cpZh&prd=60000&prog=2022576801&rand_str=oKkkZs8lON&sRef=&sUrl=https://www.yangshipin.cn/#/tv/home?pid=600001859&sdtfrom=ysp_pc_01&seq=0&url=https://outlivecloud-cdn.ysp.cctv.cn/906028A94D533483FE8BAC5CF4DB6CC70753E25A93EF3EC50988538DEDBF10161D1EA8F67C916EE41BA9D891D7893C69500B3F1A37CA814D2EE19341197360196CD9CCF327949104097C904643D493EB5A9B588EC28A2FAC1C8E30F8EE330DB2364B0DEC0124F6990A83773FF283489A/2022576803.m3u8?from=player&svrtime=1713365896&pid=600001859&cdn=5401&revoi=6E400EC7436C79D49BA06E61333D31FB8915F3484D9426FE4CCC4DE01CB8FD1DF473A8F416EF1107B669B0A9447F913272789A827EDD3DC0FE88534D9B59A35669678946589AA4D246F8F248F7C33AB08CE72FA0A73FE7F1F9FD2091D30176895CB8BD44A5B85FAD9579C700CB2AFD8D0939574B2A3EFF4C1B237DFF3E0CD3E194662F9FDEE48D1ACD7BDFAB01868B220743021C40E0EA5514ECCF396B509DA1&app_id=519748109&guid=luccvoyr_58va8i3cqw6&ysign=bb79232986c5429600d76cfedb1d5978&ytime=1713365896&ytype=1&viewid=2022576801"
|
||||
// println(e)
|
||||
// r.signature = YSP.getAuthSignature(e)
|
||||
// println(r.signature)
|
||||
|
||||
callBtracePage = yspBtraceService2.kvcollect2(
|
||||
r
|
||||
)
|
||||
callBtracePage = yspBtraceService2.kvcollect2(r)
|
||||
callBtracePage?.enqueue(object : Callback<Void> {
|
||||
override fun onResponse(call: Call<Void>, response: Response<Void>) {
|
||||
if (response.isSuccessful) {
|
||||
|
||||
@@ -87,6 +87,10 @@ class SettingFragment : DialogFragment() {
|
||||
)
|
||||
)
|
||||
|
||||
binding.exit.setOnClickListener{
|
||||
requireActivity().finishAffinity()
|
||||
}
|
||||
|
||||
return binding.root
|
||||
}
|
||||
|
||||
|
||||
@@ -23,6 +23,36 @@ class TimeFragment : Fragment() {
|
||||
): View {
|
||||
Log.i(TAG, "onCreateView")
|
||||
_binding = TimeBinding.inflate(inflater, container, false)
|
||||
|
||||
val activity = requireActivity()
|
||||
val application = activity.applicationContext as MyApplication
|
||||
val displayMetrics = application.getDisplayMetrics()
|
||||
|
||||
displayMetrics.density
|
||||
|
||||
var screenWidth = displayMetrics.widthPixels
|
||||
var screenHeight = displayMetrics.heightPixels
|
||||
if (screenHeight > screenWidth) {
|
||||
screenWidth = displayMetrics.heightPixels
|
||||
screenHeight = displayMetrics.widthPixels
|
||||
}
|
||||
|
||||
val ratio = 16f / 9f
|
||||
|
||||
if (screenWidth / screenHeight > ratio) {
|
||||
val x = ((screenWidth - screenHeight * ratio) / 2).toInt()
|
||||
val originalLayoutParams = binding.time.layoutParams as ViewGroup.MarginLayoutParams
|
||||
originalLayoutParams.rightMargin += x
|
||||
binding.time.layoutParams = originalLayoutParams
|
||||
}
|
||||
|
||||
if (screenWidth / screenHeight < ratio) {
|
||||
val y = ((screenHeight - screenWidth / ratio) / 2).toInt()
|
||||
val originalLayoutParams = binding.time.layoutParams as ViewGroup.MarginLayoutParams
|
||||
originalLayoutParams.topMargin += y
|
||||
binding.time.layoutParams = originalLayoutParams
|
||||
}
|
||||
|
||||
(activity as MainActivity).fragmentReady("TimeFragment")
|
||||
return binding.root
|
||||
}
|
||||
@@ -42,7 +72,7 @@ class TimeFragment : Fragment() {
|
||||
|
||||
private val showRunnable: Runnable = Runnable {
|
||||
run {
|
||||
binding.channelContent.text = getDateFormat("HH:mm")
|
||||
binding.content.text = getDateFormat("HH:mm")
|
||||
handler.postDelayed(showRunnable, delay)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -77,5 +77,15 @@ object Utils {
|
||||
).toInt()
|
||||
}
|
||||
|
||||
fun pxToDp(px: Float): Int {
|
||||
val scale = Resources.getSystem().displayMetrics.density
|
||||
return (px / scale).toInt()
|
||||
}
|
||||
|
||||
fun pxToDp(px: Int): Int {
|
||||
val scale = Resources.getSystem().displayMetrics.density
|
||||
return (px / scale).toInt()
|
||||
}
|
||||
|
||||
fun isTmallDevice() = Build.MANUFACTURER.equals("Tmall", ignoreCase = true)
|
||||
}
|
||||
@@ -1,6 +1,6 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:id="@+id/channel_fragment"
|
||||
android:id="@+id/channel"
|
||||
android:layout_width="90dp"
|
||||
android:layout_height="60dp"
|
||||
android:layout_gravity="end|top"
|
||||
@@ -8,7 +8,7 @@
|
||||
android:layout_marginEnd="170dp">
|
||||
|
||||
<TextView
|
||||
android:id="@+id/channel_content"
|
||||
android:id="@+id/content"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_gravity="end"
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:id="@+id/info_fragment"
|
||||
android:id="@+id/info"
|
||||
android:layout_width="320dp"
|
||||
android:layout_height="80dp"
|
||||
android:layout_gravity="center_horizontal|bottom"
|
||||
|
||||
@@ -8,7 +8,7 @@
|
||||
android:focusable="false"
|
||||
>
|
||||
<ScrollView
|
||||
android:id="@+id/scroll_view"
|
||||
android:id="@+id/scroll"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent">
|
||||
<LinearLayout
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
<?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"
|
||||
android:id="@+id/player_fragment"
|
||||
android:id="@+id/player"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:background="@color/black"
|
||||
|
||||
@@ -15,7 +15,7 @@
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_gravity="start"
|
||||
android:layout_marginTop="0dp"
|
||||
android:layout_marginStart="10dp"
|
||||
android:layout_marginStart="20dp"
|
||||
android:layout_marginBottom="5dp"
|
||||
android:gravity="start"
|
||||
android:textColor="#FFEEEEEE"
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:id="@+id/dialog"
|
||||
android:id="@+id/setting"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
>
|
||||
@@ -51,35 +51,41 @@
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content" />
|
||||
</LinearLayout>
|
||||
|
||||
<Button
|
||||
android:id="@+id/exit"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginEnd="10dp"
|
||||
android:text="@string/exit"
|
||||
/>
|
||||
<Switch
|
||||
android:id="@+id/switch_channel_reversal"
|
||||
android:text="@string/title_channel_reversal"
|
||||
android:layout_marginTop="10dp"
|
||||
android:layout_marginTop="5dp"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content" />
|
||||
<Switch
|
||||
android:id="@+id/switch_channel_num"
|
||||
android:text="@string/title_channel_num"
|
||||
android:layout_marginTop="10dp"
|
||||
android:layout_marginTop="5dp"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content" />
|
||||
<Switch
|
||||
android:id="@+id/switch_time"
|
||||
android:text="@string/title_time"
|
||||
android:layout_marginTop="10dp"
|
||||
android:layout_marginTop="5dp"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content" />
|
||||
<Switch
|
||||
android:id="@+id/switch_boot_startup"
|
||||
android:text="@string/title_boot_startup"
|
||||
android:layout_marginTop="10dp"
|
||||
android:layout_marginTop="5dp"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content" />
|
||||
<Switch
|
||||
android:id="@+id/switch_grid"
|
||||
android:text="@string/title_grid"
|
||||
android:layout_marginTop="10dp"
|
||||
android:layout_marginTop="5dp"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content" />
|
||||
</LinearLayout>
|
||||
|
||||
@@ -2,18 +2,18 @@
|
||||
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:id="@+id/time"
|
||||
android:layout_width="100dp"
|
||||
android:layout_height="50dp"
|
||||
android:layout_height="40dp"
|
||||
android:layout_gravity="end|top"
|
||||
android:layout_marginTop="25dp"
|
||||
android:layout_marginEnd="50dp">
|
||||
|
||||
<TextView
|
||||
android:id="@+id/channel_content"
|
||||
android:id="@+id/content"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_gravity="end"
|
||||
android:layout_marginTop="0dp"
|
||||
android:textColor="#FFEEEEEE"
|
||||
android:textStyle="bold"
|
||||
android:textSize="34sp" />
|
||||
android:textSize="32sp" />
|
||||
</FrameLayout>
|
||||
@@ -6,4 +6,5 @@
|
||||
<string name="title_boot_startup">开机自启</string>
|
||||
<string name="title_grid">频道列表采用网格样式</string>
|
||||
<string name="title_time">显示时间</string>
|
||||
<string name="exit">退出</string>
|
||||
</resources>
|
||||
Reference in New Issue
Block a user