From 442124baa483f8d1c4aaca7ff81e15dd3f122363 Mon Sep 17 00:00:00 2001
From: 罗明文 <125975490@qq.com>
Date: 星期四, 22 五月 2025 13:14:36 +0800
Subject: [PATCH] save

---
 app/src/main/java/com/dollearn/student/ui/home/QAFragment.kt |   99 ++++++++++++++++++++++++++++++++++++++++---------
 1 files changed, 81 insertions(+), 18 deletions(-)

diff --git a/app/src/main/java/com/dollearn/student/ui/home/QAFragment.kt b/app/src/main/java/com/dollearn/student/ui/home/QAFragment.kt
index 7035674..351a2ea 100644
--- a/app/src/main/java/com/dollearn/student/ui/home/QAFragment.kt
+++ b/app/src/main/java/com/dollearn/student/ui/home/QAFragment.kt
@@ -21,8 +21,11 @@
 import com.dollearn.student.R
 import com.dollearn.student.utils.AudioUtils
 import com.dollearn.student.utils.Const
+import com.dollearn.student.utils.event.EmptyEvent
 import com.dollearn.student.utils.extention.clickDelay
 import kotlinx.android.synthetic.main.fragment_q_a.*
+import org.greenrobot.eventbus.EventBus
+import org.greenrobot.eventbus.Subscribe
 import org.jetbrains.anko.support.v4.dip
 
 class QAFragment:BaseFragment(), AudioUtils.OnAudioStatusUpdateListener {
@@ -57,7 +60,6 @@
     private val voiceViews by lazy { arrayListOf(cl_voice_1,cl_voice_2,cl_voice_3,cl_voice_4) } //语音蓝条
     private val v1Views by lazy { arrayListOf(iv1_1,iv1_2,iv1_3,iv1_4,iv1_answer_1,iv1_answer_2,iv1_answer_3) }
     private val v2Views by lazy { arrayListOf(iv2_1,iv2_2,iv2_3,iv2_4,iv2_answer_1,iv2_answer_2,iv2_answer_3) }
-    private val v3Views by lazy { arrayListOf(iv3_1,iv3_2,iv3_3,iv3_4) }
     private val resultViews by lazy { arrayListOf(iv_right_1,iv_right_2,iv_right_3,iv_right_4) }
     private val playingViews by lazy { arrayListOf(iv_playing_1,iv_playing_2,iv_playing_3,iv_playing_4,iv_playing_answer_1,iv_playing_answer_2,iv_playing_answer_3) }
 
@@ -72,7 +74,13 @@
 
     private var nowVoiceView: View? = null
 
+    private var isAutoPlaying = 0
+
+    var right = true //true进入下一题为全对,false 一旦答错过就置为false,此时进入下一题,本题算做错误
+
+
     override fun onFirstVisibleToUser() {
+        EventBus.getDefault().register(this)
         player.setOnAudioStatusUpdateListener(this)
         player.stopPlayMusic()
         handler = object : Handler(Looper.getMainLooper()){
@@ -121,13 +129,15 @@
                 act.rightCount++
                 Log.e(TAG,"选择正确")
                 transAnimation(cl_answer_1,voiceViews[questionIndex])
-                resultViews[questionIndex].visible()
-                resultViews[questionIndex].postDelayed({
-                    resultViews[questionIndex].gone()
-                },3000)
+                val resultView = resultViews[questionIndex]
+                resultView.visible()
+                resultView.postDelayed({
+                    resultView.gone()
+                },2000)
                 nowVoiceView = voiceViews[questionIndex]
                 handler?.sendEmptyMessage(PLAY_RIGHT)
             }else{
+                right = false
                 recoverAnswer()
                 handler?.sendEmptyMessage(PLAY_ERROR)
                 dot_1.visible()
@@ -135,7 +145,7 @@
                 dot_1.postDelayed({
                     dot_1.gone()
                     iv_error_1.gone()
-                },3000)
+                },2000)
             }
         }
         rl_check_2.clickDelay {
@@ -152,6 +162,11 @@
                 act.rightCount++
                 Log.e(TAG,"选择正确")
                 transAnimation(cl_answer_2,voiceViews[questionIndex])
+                val resultView = resultViews[questionIndex]
+                resultView.visible()
+                resultView.postDelayed({
+                    resultView.gone()
+                },2000)
                 nowVoiceView = voiceViews[questionIndex]
                 handler?.sendEmptyMessage(PLAY_RIGHT)
             }else{
@@ -162,7 +177,7 @@
                 dot_2.postDelayed({
                     dot_2.gone()
                     iv_error_2.gone()
-                },3000)
+                },2000)
             }
         }
         rl_check_3.clickDelay {
@@ -179,6 +194,11 @@
                 act.rightCount++
                 Log.e(TAG,"选择正确")
                 transAnimation(cl_answer_3,voiceViews[questionIndex])
+                val resultView = resultViews[questionIndex]
+                resultView.visible()
+                resultView.postDelayed({
+                    resultView.gone()
+                },2000)
                 nowVoiceView = voiceViews[questionIndex]
                 handler?.sendEmptyMessage(PLAY_RIGHT)
             }else{
@@ -189,19 +209,39 @@
                 dot_3.postDelayed({
                     dot_3.gone()
                     iv_error_3.gone()
-                },3000)
+                },2000)
             }
         }
     }
 
+    @Subscribe
+    fun onEvent(e: EmptyEvent){
+        if (e.code == Const.EventCode.RECOVERD){
+            if (act.fragments[act.vp.currentItem] == this){ //自动播放
+                isAutoPlaying = 1
+                voiceViews.filterIndexed { index, constraintLayout ->
+                    val subject = list[index]
+                    constraintLayout.isEnabled&&subject.isQuestion == 1
+                }.firstOrNull()?.callOnClick()
+            }
+        }
+    }
 
     /**
      * 恢复答案和题目ui
      */
     fun recover(){
+        right = true
         showVoiceUi()
         list.forEach { it.completed = false }
         recoverAnswer()
+        if (act.fragments[act.vp.currentItem] == this&&act.recoverd) { //自动播放
+            isAutoPlaying = 1
+            voiceViews.filterIndexed { index, constraintLayout ->
+                val subject = list[index]
+                constraintLayout.isEnabled&&subject.isQuestion == 1
+            }.firstOrNull()?.callOnClick()
+        }
     }
 
     /**
@@ -251,13 +291,13 @@
         }
         questionIndex = position
         if (questionIndex == 0||questionIndex == 2){
-            iv2_answer_1.setImageResource(R.mipmap.voice_question)
-            iv2_answer_2.setImageResource(R.mipmap.voice_question)
-            iv2_answer_3.setImageResource(R.mipmap.voice_question)
+            iv2_answer_1.setImageResource(R.mipmap.voice_question_2)
+            iv2_answer_2.setImageResource(R.mipmap.voice_question_2)
+            iv2_answer_3.setImageResource(R.mipmap.voice_question_2)
         }else{
-            iv2_answer_1.setImageResource(R.mipmap.voice_answer)
-            iv2_answer_2.setImageResource(R.mipmap.voice_answer)
-            iv2_answer_3.setImageResource(R.mipmap.voice_answer)
+            iv2_answer_1.setImageResource(R.mipmap.voice_answer_2)
+            iv2_answer_2.setImageResource(R.mipmap.voice_answer_2)
+            iv2_answer_3.setImageResource(R.mipmap.voice_answer_2)
         }
         rl_check_1.visible()
         rl_check_2.visible()
@@ -296,7 +336,7 @@
         val x = PropertyValuesHolder.ofFloat("translationX",0f,offx.toFloat())
         val y = PropertyValuesHolder.ofFloat("translationY",0f,offy.toFloat())
         val animator = ObjectAnimator.ofPropertyValuesHolder(v, x, y)
-        animator.duration = 1000
+        animator.duration = 500
         animator.interpolator = LinearInterpolator()
         animator.start()
         animator.addListener(object :Animator.AnimatorListener{
@@ -383,16 +423,33 @@
             }
         }
 
-        if (list.filter { it.completed }.size == 2){ //全部作答,3秒后下一题
-            handler?.sendEmptyMessageDelayed(TO_NEXT,3000)
+        if (isAutoPlaying in 1..2){
+            if (voiceIndex in 0..3){
+                cl_answer_1.callOnClick()
+            }else if (voiceIndex == 4)
+                cl_answer_2.callOnClick()
+            else if (voiceIndex == 5)
+                cl_answer_3.callOnClick()
+            else if (voiceIndex == 6){
+                isAutoPlaying = if (isAutoPlaying == 1) 0 else -1
+            }
         }
+
         if (errorPlaying)
             errorPlaying = false
-        if (rightPlaying){
+        else if (rightPlaying){
             rightPlaying = false
             nowVoiceView?.callOnClick()
             list[questionIndex].completed = true
             recoverAnswer()
+        }else if (list.filter { it.completed }.size == 2){ //全部作答,3秒后下一题
+            handler?.sendEmptyMessageDelayed(TO_NEXT,500) //万俊杰:缩短为0.5秒
+        }else if (list.filter { it.completed }.size == 1&& isAutoPlaying == 0){//答完一题,自动播放下一题
+            isAutoPlaying = 2
+            voiceViews.filterIndexed { index, constraintLayout ->
+                val subject = list[index]
+                constraintLayout.isEnabled&&subject.isQuestion == 1
+            }.lastOrNull()?.callOnClick()
         }
     }
 
@@ -400,4 +457,10 @@
         super.onPause()
         player.stopPlayMusic()
     }
+
+    override fun onDestroy() {
+        super.onDestroy()
+        handler?.removeCallbacksAndMessages(null)
+        EventBus.getDefault().unregister(this)
+    }
 }
\ No newline at end of file

--
Gitblit v1.7.1