From 855a7e18a795f0db2453a19e3e8f26ba2ff553b4 Mon Sep 17 00:00:00 2001
From: lmw <125975490@qq.com>
Date: 星期四, 29 五月 2025 16:32:41 +0800
Subject: [PATCH] UI调整

---
 app/src/main/java/com/dollearn/student/ui/home/ListenFragment.kt |  110 +++++++++++++++++++++++++++++++++++++++++++------------
 1 files changed, 86 insertions(+), 24 deletions(-)

diff --git a/app/src/main/java/com/dollearn/student/ui/home/ListenFragment.kt b/app/src/main/java/com/dollearn/student/ui/home/ListenFragment.kt
index 559ca27..1e343a0 100644
--- a/app/src/main/java/com/dollearn/student/ui/home/ListenFragment.kt
+++ b/app/src/main/java/com/dollearn/student/ui/home/ListenFragment.kt
@@ -10,11 +10,14 @@
 import androidx.core.os.bundleOf
 import cn.sinata.xldutils.fragment.BaseFragment
 import cn.sinata.xldutils.gone
+import cn.sinata.xldutils.utils.SPUtils
 import cn.sinata.xldutils.utils.myToast
 import cn.sinata.xldutils.visible
 import com.dollearn.student.R
 import com.dollearn.student.utils.AudioUtils
+import com.dollearn.student.utils.Const
 import com.dollearn.student.utils.extention.clickDelay
+import com.dollearn.student.utils.glide.GlideUtil
 import kotlinx.android.synthetic.main.fragment_listen.*
 import org.jetbrains.anko.imageResource
 
@@ -26,6 +29,16 @@
     private var handler:Handler? = null
     private val PLAY_VOICE = 1
     private val TO_NEXT = 2
+    private val PLAY_ERROR = 3
+    private val PLAY_RIGHT = 4
+
+    private val errorVoice by lazy { SPUtils.instance().getString(Const.EV) }
+    private val rightVoice by lazy { SPUtils.instance().getString(Const.RV) }
+
+    private var rightPlaying = false
+    private var errorPlaying = false
+    private var playing = false //播放中,不能有任何操作
+
 
     private var correctVoice = "" //本题音频
     private val player by lazy { AudioUtils() }
@@ -34,12 +47,14 @@
     private val data by lazy {
         (requireActivity() as ListenActivity).data
     }
-    private var hasListen = true //要听一次才能作答 true:已经听完题目
+    private var hasListen = false //要听一次才能作答 true:已经听完题目
     private var hasRight = false //正确以后不再做出选择 true:已经选出正确答案
 
     private val randomList by lazy { data?.subjectList!![group].shuffled() }//随机排序后的题目
 
     private val resultViewList by lazy { arrayListOf(result_1,result_2,result_3,result_4) }
+
+    var right = true //true进入下一题为全对,false 一旦答错过就置为false,此时进入下一题,本题算做错误
 
     override fun onFirstVisibleToUser() {
         player.setOnAudioStatusUpdateListener(this)
@@ -49,6 +64,10 @@
                 super.handleMessage(msg)
                 when(msg.what){
                     PLAY_VOICE->{
+                        playing = true
+                        if (activity == null){
+                            return
+                        }
                         val listenActivity = activity as ListenActivity
                         val indexOf = listenActivity.fragments.indexOf(this@ListenFragment) //当前题目序号
                         if (iv_playing.visibility != View.VISIBLE&&indexOf == listenActivity.viewPager.currentItem){ //没有播放并且是当前题号
@@ -57,8 +76,20 @@
                         }
                     }
                     TO_NEXT->{
-                        if (isAdded)
+                        if (isAdded&&!playing){
                             (requireActivity() as ListenActivity).next()
+                            removeMessages(TO_NEXT)
+                        }
+                    }
+                    PLAY_RIGHT->{
+                        playing = true
+                        rightPlaying = true
+                        player.startPlayMusic(requireContext(),rightVoice)
+                    }
+                    PLAY_ERROR->{
+                        playing = true
+                        errorPlaying = true
+                        player.startPlayMusic(requireContext(),errorVoice)
                     }
                 }
             }
@@ -66,10 +97,14 @@
         data?.apply {
             val originList = subjectList[group]
             correctVoice = originList[index].correct
-            iv_1.setImageURI(randomList[0].img)
-            iv_2.setImageURI(randomList[1].img)
-            iv_3.setImageURI(randomList[2].img)
-            iv_4.setImageURI(randomList[3].img)
+            GlideUtil.load(requireContext(),randomList[0].img,iv_1,0)
+            GlideUtil.load(requireContext(),randomList[1].img,iv_2,0)
+            GlideUtil.load(requireContext(),randomList[2].img,iv_3,0)
+            GlideUtil.load(requireContext(),randomList[3].img,iv_4,0)
+//            iv_1.setImageURI(randomList[0].img)
+//            iv_2.setImageURI(randomList[1].img)
+//            iv_3.setImageURI(randomList[2].img)
+//            iv_4.setImageURI(randomList[3].img)
             resultViewList.forEachIndexed { index, imageView ->
                 imageView.imageResource = if (randomList[index].correct == correctVoice){
                     motion.setTransition(R.id.start,if (index == 0) R.id.end_1 else if (index == 1) R.id.end_2 else if (index == 2) R.id.end_3 else R.id.end_4)
@@ -78,14 +113,15 @@
             }
         }
 
-        handler?.sendEmptyMessageDelayed(PLAY_VOICE,1500) //进入题目2秒后播放,这里写1.5秒 预算进网络语音加载时间
+        handler?.sendEmptyMessageDelayed(PLAY_VOICE,200) //2025.4.8 立即播放
 
         initClick()
     }
 
     private fun initClick() {
         cl_voice.clickDelay {
-            handler?.sendEmptyMessage(PLAY_VOICE)
+            if (!playing)
+                handler?.sendEmptyMessage(PLAY_VOICE)
         }
         setResultAnimation(cl_1,0)
         setResultAnimation(cl_2,1)
@@ -100,12 +136,13 @@
         Log.e(TAG,"回到上一题,恢复答题前的状态")
         hasListen = false
         hasRight = false
-        handler?.sendEmptyMessageDelayed(PLAY_VOICE,1500) //进入题目2秒后播放,这里写1.5秒 预算进网络语音加载时间
-        cl_1.progress = 0f
-        cl_2.progress = 0f
-        cl_3.progress = 0f
-        cl_4.progress = 0f
-        motion.progress = 0f
+        right = true
+        handler?.sendEmptyMessageDelayed(PLAY_VOICE,200) //改为立即播放
+        cl_1?.progress = 0f
+        cl_2?.progress = 0f
+        cl_3?.progress = 0f
+        cl_4?.progress = 0f
+        motion?.progress = 0f
     }
 
     companion object{
@@ -129,14 +166,19 @@
     private fun setResultAnimation(v:MotionLayout,index: Int){
         v.clickDelay {
             if (!hasListen) {
-                myToast("请先听题")
+//                myToast("请先听题")
                 return@clickDelay
             }
+            if (playing)
+                    return@clickDelay
             (activity as ListenActivity).totalCount ++
             if (!hasRight){
                 v.progress = 0f
                 v.transitionToEnd()
                 if (randomList[index].correct != correctVoice){ //答案不对,结束后消失
+                    hasListen = false
+                    right = false
+                    handler?.sendEmptyMessage(PLAY_ERROR)
                     v.setTransitionListener(object :MotionLayout.TransitionListener{
                         override fun onTransitionStarted(p0: MotionLayout?, p1: Int, p2: Int) {
                         }
@@ -152,31 +194,51 @@
                         }
                     })
                 }else{
-                    hasRight = true
                     (activity as ListenActivity).rightCount ++
                     motion.transitionToEnd()
-                    handler?.sendEmptyMessage(PLAY_VOICE)
+                    handler?.sendEmptyMessage(PLAY_RIGHT)
                 }
             }
         }
 
-
     }
 
     override fun onStartPlay() {
-        iv1.gone()
-        iv2.gone()
-        iv_playing.visible()
+        if (!errorPlaying&&!rightPlaying){
+            iv1.gone()
+            iv2.gone()
+            iv_playing.visible()
+        }
     }
 
     override fun onFinishPlay() {
+        playing = false
         iv1.visible()
         iv2.visible()
         iv_playing.gone()
-        hasListen = true
-        if (hasRight){ //选对答案后的播放结束3秒后进入下一图
+        if (hasRight&&!playing){ //选对答案后的播放结束3秒后进入下一图
             Log.e(TAG,"选对答案后的播放结束3秒后进入下一图")
-            handler?.sendEmptyMessageDelayed(TO_NEXT,3000)
+            handler?.sendEmptyMessageDelayed(TO_NEXT,500) //万俊杰:缩短为0.5秒
         }
+        if (rightPlaying){
+            rightPlaying = false
+            hasRight = true
+            handler?.sendEmptyMessage(PLAY_VOICE)
+        }else if (errorPlaying){
+            errorPlaying = false
+            cl_voice.callOnClick()
+        }
+        else if (!hasRight)
+            hasListen = true
+    }
+
+    override fun onPause() {
+        super.onPause()
+        player.stopPlayMusic()
+    }
+
+    override fun onDestroy() {
+        super.onDestroy()
+        handler?.removeCallbacksAndMessages(null)
     }
 }
\ No newline at end of file

--
Gitblit v1.7.1