From a036ac0c6c8d87f36e68f88f05231c3be23fcc4b Mon Sep 17 00:00:00 2001
From: lmw <125975490@qq.com>
Date: 星期四, 01 八月 2024 13:32:55 +0800
Subject: [PATCH] 修改bug

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

diff --git a/app/src/main/java/com/dollearn/student/ui/home/MatchFragment.kt b/app/src/main/java/com/dollearn/student/ui/home/MatchFragment.kt
index 7f3423a..8512d34 100644
--- a/app/src/main/java/com/dollearn/student/ui/home/MatchFragment.kt
+++ b/app/src/main/java/com/dollearn/student/ui/home/MatchFragment.kt
@@ -4,19 +4,22 @@
 import android.os.Looper
 import android.os.Message
 import android.util.Log
+import android.view.View
 import androidx.constraintlayout.motion.widget.MotionLayout
 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 kotlinx.android.synthetic.main.fragment_match.*
 import org.jetbrains.anko.imageResource
 
 
-//todo 1.首次播放播放中图标不显示 2.选择正确后不能再选择 3.选择正确后处理语音条位置
 class MatchFragment : BaseFragment(), AudioUtils.OnAudioStatusUpdateListener {
     override fun contentViewId() = R.layout.fragment_match
 
@@ -25,6 +28,15 @@
     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 val player by lazy { AudioUtils() }
     private val group by lazy { arguments?.getInt("group")?:0 }
@@ -39,6 +51,11 @@
     private val voiceList = arrayListOf<String>() //语音列表,随机排序
     private var voiceIndex = -1 //点击播放的声音序号 0-3取值
 
+    private var nowVoiceView: View? = null
+    private var imgPosition = -1
+
+    private val completedVoice = arrayListOf<String>() //已经选了的音频 飞到图片上了
+
     override fun onFirstVisibleToUser() {
         player.setOnAudioStatusUpdateListener(this)
         player.stopPlayMusic()
@@ -51,8 +68,17 @@
                     }
                     TO_NEXT->{
                         if (isAdded&&!playing){
-                            (requireActivity() as IncludeActivity).next()
+                            (requireActivity() as MatchActivity).next()
                         }
+                    }
+                    PLAY_RIGHT->{
+                        rightPlaying = true
+                        player.startPlayMusic(requireContext(),rightVoice)
+                    }
+                    PLAY_ERROR->{
+                        voiceIndex = -1
+                        errorPlaying = true
+                        player.startPlayMusic(requireContext(),errorVoice)
                     }
                 }
             }
@@ -70,6 +96,10 @@
     }
 
     private fun initClick() {
+        cover_3.setOnClickListener {  }
+        cover_2.setOnClickListener {  }
+        cover_1.setOnClickListener {  }
+        cover_4.setOnClickListener {  }
         voiceViews.forEachIndexed { index, constraintLayout ->
             constraintLayout.clickDelay {
                 if (!playing){
@@ -81,14 +111,18 @@
         }
 
         cl_1.clickDelay {
-            if (playing||voiceIndex == -1) //未播放或者正在播放,不可点击
+            val voiceIndex = voiceIndex
+            if (playing) //未播放或者正在播放,不可点击
                 return@clickDelay
-            if (data!!.subjectList[group][0].completed) //已作答不可点击
+            if (voiceIndex == -1){//未播放不可点击
+                myToast("请先听题")
                 return@clickDelay
+            }
+//            if (data!!.subjectList[group][0].completed) //已作答不可点击
+//                return@clickDelay
             act.totalCount ++
             if (data!!.subjectList[group][0].correct == voiceList[voiceIndex]){
                 result_1.imageResource = R.mipmap.successs
-                data!!.subjectList[group][0].completed = true
                 act.rightCount ++
                 //执行飞行动画
                 var start = 0
@@ -111,24 +145,65 @@
                         end = R.id.end_4_1
                     }
                 }
+                nowVoiceView =  voiceViews[voiceIndex]
+                imgPosition = 0
+                motion.setTransitionListener(object :MotionLayout.TransitionListener{
+                    override fun onTransitionStarted(p0: MotionLayout?, p1: Int, p2: Int) {
+
+                    }
+
+                    override fun onTransitionChange(
+                        p0: MotionLayout?,
+                        p1: Int,
+                        p2: Int,
+                        p3: Float
+                    ) {
+                    }
+
+                    override fun onTransitionCompleted(p0: MotionLayout?, p1: Int) {
+                        cl_voice_end_1.visible()
+                        when(voiceIndex){
+                            0->cover_1.visible()
+                            1->cover_2.visible()
+                            2->cover_3.visible()
+                            3->cover_4.visible()
+                        }
+                    }
+
+                    override fun onTransitionTrigger(
+                        p0: MotionLayout?,
+                        p1: Int,
+                        p2: Boolean,
+                        p3: Float
+                    ) {
+                    }
+                })
                 motion.setTransition(start,end)
                 motion.transitionToEnd()
+                handler?.sendEmptyMessage(PLAY_RIGHT)
             }else{
                 result_1.imageResource = R.mipmap.zhifushibai
+                handler?.sendEmptyMessage(PLAY_ERROR)
             }
             showResultAnim(cl_1)
         }
 
         cl_2.clickDelay {
-            if (playing||voiceIndex == -1) //未播放或者正在播放,不可点击
+            val voiceIndex = voiceIndex
+
+            if (playing) //未播放或者正在播放,不可点击
                 return@clickDelay
-            if (data!!.subjectList[group][1].completed) //已作答不可点击
+            if (voiceIndex == -1){//未播放不可点击
+                myToast("请先听题")
                 return@clickDelay
+            }
+//            if (data!!.subjectList[group][1].completed) //已作答不可点击
+//                return@clickDelay
             act.totalCount ++
             if (data!!.subjectList[group][1].correct == voiceList[voiceIndex]){
                 result_2.imageResource = R.mipmap.successs
-                data!!.subjectList[group][1].completed = true
                 act.rightCount ++
+                imgPosition = 1
                 //执行飞行动画
                 var start = 0
                 var end = 0
@@ -150,23 +225,64 @@
                         end = R.id.end_4_2
                     }
                 }
+                nowVoiceView =  voiceViews[voiceIndex]
+
+                motion.setTransitionListener(object :MotionLayout.TransitionListener{
+                    override fun onTransitionStarted(p0: MotionLayout?, p1: Int, p2: Int) {
+
+                    }
+
+                    override fun onTransitionChange(
+                        p0: MotionLayout?,
+                        p1: Int,
+                        p2: Int,
+                        p3: Float
+                    ) {
+                    }
+
+                    override fun onTransitionCompleted(p0: MotionLayout?, p1: Int) {
+                        cl_voice_end_2.visible()
+                        when(voiceIndex){
+                            0->cover_1.visible()
+                            1->cover_2.visible()
+                            2->cover_3.visible()
+                            3->cover_4.visible()
+                        }
+                    }
+
+                    override fun onTransitionTrigger(
+                        p0: MotionLayout?,
+                        p1: Int,
+                        p2: Boolean,
+                        p3: Float
+                    ) {
+                    }
+                })
                 motion.setTransition(start,end)
                 motion.transitionToEnd()
+                handler?.sendEmptyMessage(PLAY_RIGHT)
             }else{
                 result_2.imageResource = R.mipmap.zhifushibai
+                handler?.sendEmptyMessage(PLAY_ERROR)
             }
             showResultAnim(cl_2)
         }
 
         cl_3.clickDelay {
-            if (playing||voiceIndex == -1) //未播放或者正在播放,不可点击
+            val voiceIndex = voiceIndex
+
+            if (playing) //未播放或者正在播放,不可点击
                 return@clickDelay
-            if (data!!.subjectList[group][2].completed) //已作答不可点击
+            if (voiceIndex == -1){//未播放不可点击
+                myToast("请先听题")
                 return@clickDelay
+            }
+//            if (data!!.subjectList[group][2].completed) //已作答不可点击
+//                return@clickDelay
             act.totalCount ++
             if (data!!.subjectList[group][2].correct == voiceList[voiceIndex]){
                 result_3.imageResource = R.mipmap.successs
-                data!!.subjectList[group][2].completed = true
+                imgPosition = 2
                 act.rightCount ++
                 //执行飞行动画
                 var start = 0
@@ -189,23 +305,63 @@
                         end = R.id.end_4_3
                     }
                 }
+                nowVoiceView =  voiceViews[voiceIndex]
+
+                motion.setTransitionListener(object :MotionLayout.TransitionListener{
+                    override fun onTransitionStarted(p0: MotionLayout?, p1: Int, p2: Int) {
+
+                    }
+
+                    override fun onTransitionChange(
+                        p0: MotionLayout?,
+                        p1: Int,
+                        p2: Int,
+                        p3: Float
+                    ) {
+                    }
+
+                    override fun onTransitionCompleted(p0: MotionLayout?, p1: Int) {
+                        cl_voice_end_3.visible()
+                        when(voiceIndex){
+                            0->cover_1.visible()
+                            1->cover_2.visible()
+                            2->cover_3.visible()
+                            3->cover_4.visible()
+                        }
+                    }
+
+                    override fun onTransitionTrigger(
+                        p0: MotionLayout?,
+                        p1: Int,
+                        p2: Boolean,
+                        p3: Float
+                    ) {
+                    }
+                })
                 motion.setTransition(start,end)
                 motion.transitionToEnd()
+                handler?.sendEmptyMessage(PLAY_RIGHT)
             }else{
                 result_3.imageResource = R.mipmap.zhifushibai
+                handler?.sendEmptyMessage(PLAY_ERROR)
             }
             showResultAnim(cl_3)
         }
 
         cl_4.clickDelay {
-            if (playing||voiceIndex == -1) //未播放或者正在播放,不可点击
+            val voiceIndex = voiceIndex
+            if (playing) //未播放或者正在播放,不可点击
                 return@clickDelay
-            if (data!!.subjectList[group][3].completed) //已作答不可点击
+            if (voiceIndex == -1){//未播放不可点击
+                myToast("请先听题")
                 return@clickDelay
+            }
+//            if (data!!.subjectList[group][3].completed) //已作答不可点击
+//                return@clickDelay
             act.totalCount ++
             if (data!!.subjectList[group][3].correct == voiceList[voiceIndex]){
                 result_4.imageResource = R.mipmap.successs
-                data!!.subjectList[group][3].completed = true
+                imgPosition = 3
                 act.rightCount ++
                 //执行飞行动画
                 var start = 0
@@ -228,12 +384,67 @@
                         end = R.id.end_4_4
                     }
                 }
+                nowVoiceView =  voiceViews[voiceIndex]
+
+                motion.setTransitionListener(object :MotionLayout.TransitionListener{
+                    override fun onTransitionStarted(p0: MotionLayout?, p1: Int, p2: Int) {
+
+                    }
+
+                    override fun onTransitionChange(
+                        p0: MotionLayout?,
+                        p1: Int,
+                        p2: Int,
+                        p3: Float
+                    ) {
+                    }
+
+                    override fun onTransitionCompleted(p0: MotionLayout?, p1: Int) {
+                        cl_voice_end_4.visible()
+                        when(voiceIndex){
+                            0->cover_1.visible()
+                            1->cover_2.visible()
+                            2->cover_3.visible()
+                            3->cover_4.visible()
+                        }
+                    }
+
+                    override fun onTransitionTrigger(
+                        p0: MotionLayout?,
+                        p1: Int,
+                        p2: Boolean,
+                        p3: Float
+                    ) {
+                    }
+                })
                 motion.setTransition(start,end)
                 motion.transitionToEnd()
+                handler?.sendEmptyMessage(PLAY_RIGHT)
             }else{
                 result_4.imageResource = R.mipmap.zhifushibai
+                handler?.sendEmptyMessage(PLAY_ERROR)
             }
             showResultAnim(cl_4)
+        }
+
+        cl_voice_end_1.setOnClickListener {
+            voiceIndex = 4
+            player.startPlayMusic(requireContext(),data!!.subjectList[group][0].correct)
+        }
+        cl_voice_end_2.setOnClickListener {
+            voiceIndex = 5
+            player.startPlayMusic(requireContext(),data!!.subjectList[group][1].correct)
+
+        }
+        cl_voice_end_3.setOnClickListener {
+            voiceIndex = 6
+            player.startPlayMusic(requireContext(),data!!.subjectList[group][2].correct)
+
+        }
+        cl_voice_end_4.setOnClickListener {
+            voiceIndex = 7
+            player.startPlayMusic(requireContext(),data!!.subjectList[group][3].correct)
+
         }
     }
 
@@ -248,6 +459,7 @@
 
             override fun onTransitionCompleted(p0: MotionLayout?, p1: Int) {
                 m.progress = 0f
+                tv_name.text =""
             }
 
             override fun onTransitionTrigger(p0: MotionLayout?, p1: Int, p2: Boolean, p3: Float) {
@@ -265,7 +477,15 @@
             it.completed = false
             it.listend = false
         }
-
+        cover_1.gone()
+        cover_2.gone()
+        cover_3.gone()
+        cover_4.gone()
+        tv_name.text =""
+        cl_voice_end_1.gone()
+        cl_voice_end_2.gone()
+        cl_voice_end_3.gone()
+        cl_voice_end_4.gone()
     }
 
     companion object{
@@ -288,12 +508,16 @@
 
     override fun onStartPlay() {
         playing = true
+        if (errorPlaying||rightPlaying)
+            return
         val list = data!!.subjectList[group]
-        tv_name.text = list[list.map { it.correct }.indexOf(voiceList[voiceIndex])].name
+        if (voiceIndex in 0..3)
+            tv_name.text = list[list.map { it.correct }.indexOf(voiceList[voiceIndex])].name
         when(voiceIndex){
             0->{
                 iv1_1.gone()
                 iv2_1.gone()
+                iv_playing_1.visible()
                 iv_playing_1.visible()
             }
             1->{
@@ -313,35 +537,116 @@
                 iv_playing_4.visible()
             }
 
+            4->{
+                iv1_1_end.gone()
+                iv2_1_end.gone()
+                iv_playing_1_end.visible()
+            }
+            5->{
+                iv1_2_end.gone()
+                iv2_2_end.gone()
+                iv_playing_2_end.visible()
+            }
+            6->{
+                iv1_3_end.gone()
+                iv2_3_end.gone()
+                iv_playing_3_end.visible()
+            }
+            7->{
+                iv1_4_end.gone()
+                iv2_4_end.gone()
+                iv_playing_4_end.visible()
+            }
+
         }
     }
 
     override fun onFinishPlay() {
         playing = false
-        val subject = data!!.subjectList[group][voiceIndex]
-        subject.listend = true
         when(voiceIndex){
             0->{
                 iv1_1.visible()
                 iv2_1.visible()
                 iv_playing_1.gone()
+                if (nowVoiceView!=null && data!!.subjectList[group][imgPosition].completed){
+                    voiceIndex = -1
+                    nowVoiceView = null
+                }
             }
             1->{
                 iv1_2.visible()
                 iv2_2.visible()
                 iv_playing_2.gone()
+                if (nowVoiceView!=null && data!!.subjectList[group][imgPosition].completed){
+                    voiceIndex = -1
+                    nowVoiceView = null
+                }
             }
             2->{
                 iv1_3.visible()
                 iv2_3.visible()
                 iv_playing_3.gone()
+                if (nowVoiceView!=null && data!!.subjectList[group][imgPosition].completed){
+                    voiceIndex = -1
+                    nowVoiceView = null
+                }
             }
             3->{
                 iv1_4.visible()
                 iv2_4.visible()
                 iv_playing_4.gone()
+                if (nowVoiceView!=null && data!!.subjectList[group][imgPosition].completed){
+                    voiceIndex = -1
+                    nowVoiceView = null
+                }
             }
 
+            4->{
+                iv1_1_end.visible()
+                iv2_1_end.visible()
+                iv_playing_1_end.gone()
+                voiceIndex = -1
+            }
+            5->{
+                iv1_2_end.visible()
+                iv2_2_end.visible()
+                iv_playing_2_end.gone()
+                voiceIndex = -1
+            }
+            6->{
+                iv1_3_end.visible()
+                iv2_3_end.visible()
+                iv_playing_3_end.gone()
+                voiceIndex = -1
+            }
+            7->{
+                iv1_4_end.visible()
+                iv2_4_end.visible()
+                iv_playing_4_end.gone()
+                voiceIndex = -1
+            }
         }
+        if (data!!.subjectList[group].filter { it.completed }.size == 4){ //全部答对
+            handler?.sendEmptyMessage(TO_NEXT)
+        }
+
+        if (errorPlaying)
+            errorPlaying = false
+        if (rightPlaying){
+            rightPlaying = false
+            nowVoiceView?.callOnClick()
+            data!!.subjectList[group][imgPosition].completed = 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