Skip to content

Commit 2b09c3a

Browse files
committed
设备详情页面ui修改
1 parent c48e305 commit 2b09c3a

27 files changed

+805
-1
lines changed

sdkdemo/src/main/AndroidManifest.xml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -117,6 +117,7 @@
117117
android:exported="true"
118118
android:targetActivity=".core.wxapi.WXEntryActivity" /> <!-- picture start -->
119119
<activity android:name=".core.activity.EnhancedDeviceListActivity"/>
120+
<activity android:name=".core.activity.CameraDetailActivity"/>
120121
</application>
121122

122123
</manifest>
Lines changed: 300 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,300 @@
1+
package com.tencent.iot.explorer.link.demo.core.activity
2+
3+
import android.os.Bundle
4+
import android.view.View
5+
import android.widget.Toast
6+
import com.tencent.iot.explorer.link.demo.BaseActivity
7+
import com.tencent.iot.explorer.link.demo.R
8+
import com.tencent.iot.explorer.link.demo.databinding.ActivityCameraDetailBinding
9+
import com.tencent.iot.explorer.link.demo.video.playback.VideoPlaybackActivity
10+
import com.tencent.iot.explorer.link.demo.core.activity.ShareDeviceActivity
11+
12+
/**
13+
* 摄像头详情页面 - 视频播放和控制界面
14+
*/
15+
class CameraDetailActivity : BaseActivity<ActivityCameraDetailBinding>() {
16+
17+
private var isPlaying = false
18+
private var isMuted = true
19+
private var isPowerOn = true
20+
private var currentQuality = "自动"
21+
private var isPtzPanelVisible = false
22+
23+
override fun getViewBinding(): ActivityCameraDetailBinding =
24+
ActivityCameraDetailBinding.inflate(layoutInflater)
25+
26+
override fun initView() {
27+
// // 设置状态栏透明
28+
// setStatusBarTransparent()
29+
30+
// 初始化视频播放器
31+
initVideoPlayer()
32+
33+
// 更新UI状态
34+
updateUIState()
35+
}
36+
37+
override fun setListener() {
38+
with(binding) {
39+
// 返回按钮
40+
btnBack.setOnClickListener {
41+
finish()
42+
}
43+
44+
// 更多设置按钮
45+
// btnSettings.setOnClickListener {
46+
// showDeviceSettings()
47+
// }
48+
49+
// 电源开关
50+
btnPower.setOnClickListener {
51+
togglePower()
52+
}
53+
54+
// 声音开关
55+
btnSound.setOnClickListener {
56+
toggleSound()
57+
}
58+
59+
// 画质切换
60+
btnQuality.setOnClickListener {
61+
toggleQuality()
62+
}
63+
64+
// 全屏切换
65+
btnFullscreen.setOnClickListener {
66+
toggleFullscreen()
67+
}
68+
69+
// 底部控制按钮
70+
btnTalk.setOnClickListener {
71+
toggleTalk()
72+
}
73+
74+
btnSnapshot.setOnClickListener {
75+
takeSnapshot()
76+
}
77+
78+
btnRecord.setOnClickListener {
79+
toggleRecording()
80+
}
81+
82+
btnPTZ.setOnClickListener {
83+
togglePtzPanel()
84+
}
85+
86+
// 云台控制按钮
87+
btnPTZUp.setOnClickListener {
88+
handlePtz("up")
89+
}
90+
91+
btnPTZLeft.setOnClickListener {
92+
handlePtz("left")
93+
}
94+
95+
btnPTZCenter.setOnClickListener {
96+
handlePtz("home")
97+
}
98+
99+
btnPTZRight.setOnClickListener {
100+
handlePtz("right")
101+
}
102+
103+
btnPTZDown.setOnClickListener {
104+
handlePtz("down")
105+
}
106+
}
107+
}
108+
109+
/**
110+
* 设置状态栏透明
111+
*/
112+
private fun setStatusBarTransparent() {
113+
// TODO: 实现状态栏透明设置
114+
window.decorView.systemUiVisibility = (
115+
View.SYSTEM_UI_FLAG_LAYOUT_STABLE or
116+
View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
117+
)
118+
}
119+
120+
/**
121+
* 初始化视频播放器
122+
*/
123+
private fun initVideoPlayer() {
124+
// TODO: 初始化视频播放器,连接摄像头流
125+
binding.loadingOverlay.visibility = View.VISIBLE
126+
127+
// 模拟视频加载
128+
binding.videoPlayer.postDelayed({
129+
binding.loadingOverlay.visibility = View.GONE
130+
isPlaying = true
131+
updateUIState()
132+
}, 2000)
133+
}
134+
135+
/**
136+
* 切换电源状态
137+
*/
138+
private fun togglePower() {
139+
isPowerOn = !isPowerOn
140+
if (isPowerOn) {
141+
// 开启摄像头
142+
binding.loadingOverlay.visibility = View.VISIBLE
143+
binding.videoPlayer.postDelayed({
144+
binding.loadingOverlay.visibility = View.GONE
145+
isPlaying = true
146+
updateUIState()
147+
}, 1000)
148+
} else {
149+
// 关闭摄像头
150+
isPlaying = false
151+
updateUIState()
152+
}
153+
Toast.makeText(this, if (isPowerOn) "摄像头已开启" else "摄像头已关闭", Toast.LENGTH_SHORT).show()
154+
}
155+
156+
/**
157+
* 切换声音状态
158+
*/
159+
private fun toggleSound() {
160+
isMuted = !isMuted
161+
updateUIState()
162+
Toast.makeText(this, if (isMuted) "声音已关闭" else "声音已开启", Toast.LENGTH_SHORT).show()
163+
}
164+
165+
/**
166+
* 切换画质
167+
*/
168+
private fun toggleQuality() {
169+
val qualities = arrayOf("自动", "流畅", "标清", "高清", "超清")
170+
val currentIndex = qualities.indexOf(currentQuality)
171+
val nextIndex = (currentIndex + 1) % qualities.size
172+
currentQuality = qualities[nextIndex]
173+
174+
binding.btnQuality.text = currentQuality
175+
Toast.makeText(this, "画质切换为: $currentQuality", Toast.LENGTH_SHORT).show()
176+
}
177+
178+
/**
179+
* 切换全屏
180+
*/
181+
private fun toggleFullscreen() {
182+
// TODO: 实现全屏切换逻辑
183+
Toast.makeText(this, "全屏切换", Toast.LENGTH_SHORT).show()
184+
}
185+
186+
/**
187+
* 切换对讲模式
188+
*/
189+
private fun toggleTalk() {
190+
// TODO: 实现对讲功能
191+
Toast.makeText(this, "对讲模式", Toast.LENGTH_SHORT).show()
192+
}
193+
194+
/**
195+
* 截图
196+
*/
197+
private fun takeSnapshot() {
198+
// TODO: 实现截图功能
199+
Toast.makeText(this, "截图已保存", Toast.LENGTH_SHORT).show()
200+
}
201+
202+
/**
203+
* 切换录像状态
204+
*/
205+
private fun toggleRecording() {
206+
// TODO: 实现录像功能
207+
Toast.makeText(this, "录像功能", Toast.LENGTH_SHORT).show()
208+
}
209+
210+
/**
211+
* 切换云台控制面板
212+
*/
213+
private fun togglePtzPanel() {
214+
isPtzPanelVisible = !isPtzPanelVisible
215+
binding.ptzPanel.visibility = if (isPtzPanelVisible) View.VISIBLE else View.GONE
216+
}
217+
218+
/**
219+
* 处理云台控制
220+
*/
221+
private fun handlePtz(direction: String) {
222+
when (direction) {
223+
"up" -> {
224+
// TODO: 云台上移
225+
Toast.makeText(this, "云台上移", Toast.LENGTH_SHORT).show()
226+
}
227+
"down" -> {
228+
// TODO: 云台下移
229+
Toast.makeText(this, "云台下移", Toast.LENGTH_SHORT).show()
230+
}
231+
"left" -> {
232+
// TODO: 云台左移
233+
Toast.makeText(this, "云台左移", Toast.LENGTH_SHORT).show()
234+
}
235+
"right" -> {
236+
// TODO: 云台右移
237+
Toast.makeText(this, "云台右移", Toast.LENGTH_SHORT).show()
238+
}
239+
"home" -> {
240+
// TODO: 云台复位
241+
Toast.makeText(this, "云台复位", Toast.LENGTH_SHORT).show()
242+
}
243+
}
244+
}
245+
246+
/**
247+
* 显示回放页面
248+
*/
249+
private fun showPlayback() {
250+
// TODO: 跳转到回放页面
251+
jumpActivity(VideoPlaybackActivity::class.java)
252+
}
253+
254+
/**
255+
* 显示设备分享
256+
*/
257+
private fun showShareDevice() {
258+
// TODO: 跳转到分享页面
259+
jumpActivity(ShareDeviceActivity::class.java)
260+
}
261+
262+
/**
263+
* 显示设备设置
264+
*/
265+
private fun showDeviceSettings() {
266+
// TODO: 跳转到设备设置页面
267+
Toast.makeText(this, "设备设置", Toast.LENGTH_SHORT).show()
268+
}
269+
270+
/**
271+
* 更新UI状态
272+
*/
273+
private fun updateUIState() {
274+
with(binding) {
275+
// 更新电源按钮状态
276+
btnPower.setImageResource(
277+
if (isPowerOn) R.drawable.ic_power_on else R.drawable.ic_power_off
278+
)
279+
280+
// 更新声音按钮状态
281+
btnSound.setImageResource(
282+
if (isMuted) R.drawable.ic_volume_mute else R.drawable.ic_volume_up
283+
)
284+
285+
// 更新视频播放状态
286+
videoPlayer.visibility = if (isPlaying && isPowerOn) View.VISIBLE else View.INVISIBLE
287+
288+
if (!isPowerOn) {
289+
loadingOverlay.visibility = View.GONE
290+
}
291+
}
292+
}
293+
294+
override fun onDestroy() {
295+
super.onDestroy()
296+
// 释放视频资源
297+
isPlaying = false
298+
isPowerOn = false
299+
}
300+
}

sdkdemo/src/main/java/com/tencent/iot/explorer/link/demo/core/activity/EnhancedDeviceListActivity.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -139,7 +139,7 @@ class EnhancedDeviceListActivity : BaseActivity<ActivityEnhancedDeviceListBindin
139139
private fun openDeviceDetail(device: DeviceEntity) {
140140
// TODO: 跳转到设备详情页面
141141
Toast.makeText(this, "打开设备: ${device.DeviceName}", Toast.LENGTH_SHORT).show()
142-
// jumpActivity(CameraDetailActivity::class.java)
142+
jumpActivity(CameraDetailActivity::class.java)
143143
}
144144

145145
/**
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
<?xml version="1.0" encoding="utf-8"?>
2+
<shape xmlns:android="http://schemas.android.com/apk/res/android">
3+
<solid android:color="#80000000" />
4+
<corners android:radius="22dp" />
5+
<stroke android:width="1dp" android:color="@color/white"/>
6+
</shape>
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
<?xml version="1.0" encoding="utf-8"?>
2+
<vector xmlns:android="http://schemas.android.com/apk/res/android"
3+
android:width="24dp"
4+
android:height="24dp"
5+
android:viewportWidth="24"
6+
android:viewportHeight="24">
7+
<path
8+
android:fillColor="#FFFFFF"
9+
android:pathData="M20,11H7.83l5.59,-5.59L12,4l-8,8 8,8 1.41,-1.41L7.83,13H20v-2z" />
10+
</vector>
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
<vector xmlns:android="http://schemas.android.com/apk/res/android"
2+
android:width="28dp"
3+
android:height="28dp"
4+
android:viewportWidth="1024"
5+
android:viewportHeight="1024">
6+
<path
7+
android:fillColor="#FF000000"
8+
android:pathData="M405,786.4l92.6,92.6c7.2,7.2 19,7.2 26.2,0l92.6,-92.6c7.2,-7.2 7.2,-19 0,-26.2 -7.2,-7.2 -19,-7.2 -26.2,0l-61,61v-177.6c0,-10.2 -8.3,-18.5 -18.5,-18.5 -10.2,0 -18.5,8.3 -18.5,18.5v177.6l-61,-61a18.5,18.5 0,0 0,-13.1 -5.4,18.4 18.4,0 0,0 -13.1,5.4c-7.2,7.2 -7.2,19 0,26.2h0zM405,786.4"/>
9+
<path
10+
android:fillColor="#FF000000"
11+
android:pathData="M616.7,233.5l-92.6,-92.6c-7.2,-7.2 -19,-7.2 -26.2,0l-92.6,92.6c-7.2,7.2 -7.2,19 0,26.2 7.2,7.2 19,7.2 26.2,0l61,-61v177.6c0,10.2 8.3,18.5 18.5,18.5 10.2,0 18.5,-8.3 18.5,-18.5v-177.6l61,61a18.5,18.5 0,0 0,13.1 5.4,18.4 18.4,0 0,0 13.1,-5.4c7.2,-7.2 7.2,-19 0,-26.2h-0zM616.7,233.5"/>
12+
<path
13+
android:fillColor="#FF000000"
14+
android:pathData="M786.6,616.6l92.6,-92.6c7.2,-7.2 7.2,-19 0,-26.2l-92.6,-92.6c-7.2,-7.2 -19,-7.2 -26.2,0 -7.2,7.2 -7.2,19 0,26.2l61,61h-177.6c-10.2,0 -18.5,8.3 -18.5,18.5 0,10.2 8.3,18.5 18.5,18.5h177.6l-61,61a18.5,18.5 0,0 0,-5.4 13.1,18.4 18.4,0 0,0 5.4,13.1c7.2,7.2 19,7.2 26.2,0v-0zM786.6,616.6"/>
15+
<path
16+
android:fillColor="#FF000000"
17+
android:pathData="M233.7,404.9l-92.6,92.6c-7.2,7.2 -7.2,19 0,26.2l92.6,92.6c7.2,7.2 19,7.2 26.2,0 7.2,-7.2 7.2,-19 0,-26.2L198.9,529.2h177.6c10.2,0 18.5,-8.3 18.5,-18.5 0,-10.2 -8.3,-18.5 -18.5,-18.5L198.9,492.1l61,-61a18.5,18.5 0,0 0,5.4 -13.1,18.4 18.4,0 0,0 -5.4,-13.1c-7.2,-7.2 -19,-7.2 -26.2,0v0zM233.7,404.9"/>
18+
</vector>
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
<?xml version="1.0" encoding="utf-8"?>
2+
<vector xmlns:android="http://schemas.android.com/apk/res/android"
3+
android:width="24dp"
4+
android:height="24dp"
5+
android:viewportWidth="24"
6+
android:viewportHeight="24">
7+
<path
8+
android:fillColor="#FFFFFF"
9+
android:pathData="M7 14H5v5h5v-2H7v-3zm-2-4h2V7h3V5H5v5zm12 7h-3v2h5v-5h-2v3zM14 5v2h3v3h2V5h-5z" />
10+
</vector>
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
<vector xmlns:android="http://schemas.android.com/apk/res/android"
2+
android:width="28dp"
3+
android:height="28dp"
4+
android:viewportWidth="1024"
5+
android:viewportHeight="1024">
6+
<path
7+
android:pathData="M652.9,189.3c-16,-7.1 -34.8,0.2 -41.8,16.3 -7.1,16 0.2,34.8 16.3,41.8 104.6,46.1 172.3,149.7 172.3,264 0,77 -30,149.4 -84.4,203.8s-126.8,84.4 -203.8,84.4 -149.4,-30 -203.8,-84.4c-54.4,-54.4 -84.4,-126.8 -84.4,-203.8 0,-115 68.2,-218.8 173.6,-264.6 16.1,-7 23.5,-25.7 16.5,-41.7 -7,-16.1 -25.7,-23.5 -41.7,-16.5 -128.7,55.8 -211.8,182.5 -211.8,322.8 0,47.5 9.3,93.5 27.7,136.9 17.7,41.9 43.1,79.5 75.4,111.8 32.3,32.3 69.9,57.6 111.8,75.4 43.4,18.4 89.4,27.7 136.9,27.7 47.5,0 93.5,-9.3 136.9,-27.7 41.9,-17.7 79.5,-43.1 111.8,-75.4 32.3,-32.3 57.6,-69.9 75.4,-111.8 18.4,-43.4 27.7,-89.4 27.7,-136.9 0,-139.5 -82.5,-265.9 -210.2,-322.1z"
8+
android:fillColor="#FF0000"/>
9+
<path
10+
android:pathData="M512,479.5c17.5,0 31.7,-14.2 31.7,-31.7V128.2c0,-17.5 -14.2,-31.7 -31.7,-31.7s-31.7,14.2 -31.7,31.7V447.8c0,17.5 14.2,31.7 31.7,31.7z"
11+
android:fillColor="#FF0000"/>
12+
</vector>
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
<vector xmlns:android="http://schemas.android.com/apk/res/android"
2+
android:width="28dp"
3+
android:height="28dp"
4+
android:viewportWidth="1024"
5+
android:viewportHeight="1024">
6+
<path
7+
android:pathData="M652.9,189.3c-16,-7.1 -34.8,0.2 -41.8,16.3 -7.1,16 0.2,34.8 16.3,41.8 104.6,46.1 172.3,149.7 172.3,264 0,77 -30,149.4 -84.4,203.8s-126.8,84.4 -203.8,84.4 -149.4,-30 -203.8,-84.4c-54.4,-54.4 -84.4,-126.8 -84.4,-203.8 0,-115 68.2,-218.8 173.6,-264.6 16.1,-7 23.5,-25.7 16.5,-41.7 -7,-16.1 -25.7,-23.5 -41.7,-16.5 -128.7,55.8 -211.8,182.5 -211.8,322.8 0,47.5 9.3,93.5 27.7,136.9 17.7,41.9 43.1,79.5 75.4,111.8 32.3,32.3 69.9,57.6 111.8,75.4 43.4,18.4 89.4,27.7 136.9,27.7 47.5,0 93.5,-9.3 136.9,-27.7 41.9,-17.7 79.5,-43.1 111.8,-75.4 32.3,-32.3 57.6,-69.9 75.4,-111.8 18.4,-43.4 27.7,-89.4 27.7,-136.9 0,-139.5 -82.5,-265.9 -210.2,-322.1z"
8+
android:fillColor="#ffffff"/>
9+
<path
10+
android:pathData="M512,479.5c17.5,0 31.7,-14.2 31.7,-31.7V128.2c0,-17.5 -14.2,-31.7 -31.7,-31.7s-31.7,14.2 -31.7,31.7V447.8c0,17.5 14.2,31.7 31.7,31.7z"
11+
android:fillColor="#ffffff"/>
12+
</vector>

0 commit comments

Comments
 (0)