style: 语音按钮视觉优化
- 背景改为橙色半透明+边框,和指引块风格统一 - 宽度 match_parent,内含声波图标+语音描述+时长 - 播放中切换背景高亮+停止图标,停止后恢复 - 新增 bg_btn_voice_playing.xml 播放状态背景 Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -396,7 +396,7 @@ class TaskListFragment : BaseFragment<FragmentTaskListBinding>() {
|
||||
|
||||
/**
|
||||
* 显示语音播放按钮(用户上报任务 taskType=3/4 可能有语音附件)
|
||||
* 点击播放/暂停语音
|
||||
* 点击切换播放/停止,图标和背景跟随状态变化
|
||||
*/
|
||||
private fun showVoice(detail: TaskDetail) {
|
||||
if (!detail.hasVoice) return
|
||||
@@ -405,8 +405,10 @@ class TaskListFragment : BaseFragment<FragmentTaskListBinding>() {
|
||||
if (voiceItem.url.isEmpty()) return
|
||||
|
||||
// 显示按钮和时长
|
||||
binding.tvVoiceDuration.text = "${voiceItem.voiceLength}\""
|
||||
binding.tvVoiceDuration.text = "${voiceItem.voiceLength}\u2033"
|
||||
binding.btnVoice.visibility = View.VISIBLE
|
||||
// 初始化为未播放状态
|
||||
updateVoiceUI(false)
|
||||
|
||||
// 点击播放/停止
|
||||
binding.btnVoice.setOnClickListener {
|
||||
@@ -414,14 +416,24 @@ class TaskListFragment : BaseFragment<FragmentTaskListBinding>() {
|
||||
}
|
||||
}
|
||||
|
||||
/** 更新语音按钮的图标和背景 */
|
||||
private fun updateVoiceUI(playing: Boolean) {
|
||||
if (playing) {
|
||||
binding.tvVoiceIcon.text = "\u23F9" // ⏹ 停止图标
|
||||
binding.btnVoice.setBackgroundResource(R.drawable.bg_btn_voice_playing)
|
||||
} else {
|
||||
binding.tvVoiceIcon.text = "\uD83D\uDD0A" // 🔊 喇叭图标
|
||||
binding.btnVoice.setBackgroundResource(R.drawable.bg_btn_voice)
|
||||
}
|
||||
}
|
||||
|
||||
/** 播放/停止语音 */
|
||||
private fun toggleVoice(url: String) {
|
||||
if (mediaPlayer?.isPlaying == true) {
|
||||
// 正在播放 → 停止
|
||||
stopVoice()
|
||||
} else {
|
||||
// 没有播放 → 开始
|
||||
stopVoice() // 清理上一个
|
||||
updateVoiceUI(true)
|
||||
mediaPlayer = MediaPlayer().apply {
|
||||
setDataSource(url)
|
||||
setOnPreparedListener { start() }
|
||||
@@ -436,13 +448,17 @@ class TaskListFragment : BaseFragment<FragmentTaskListBinding>() {
|
||||
}
|
||||
}
|
||||
|
||||
/** 停止并释放 MediaPlayer */
|
||||
/** 停止并释放 MediaPlayer,恢复按钮状态 */
|
||||
private fun stopVoice() {
|
||||
mediaPlayer?.let {
|
||||
if (it.isPlaying) it.stop()
|
||||
it.release()
|
||||
}
|
||||
mediaPlayer = null
|
||||
// 恢复未播放状态(页面销毁时 binding 可能已失效)
|
||||
if (view != null) {
|
||||
updateVoiceUI(false)
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
Reference in New Issue
Block a user