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/ListenFragment.kt | 82 +++++++++++++++++++++++++++++++++++------ 1 files changed, 70 insertions(+), 12 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 7cfdf3b..3d5f1f7 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,10 +10,12 @@ 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_listen.* import org.jetbrains.anko.imageResource @@ -26,6 +28,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,7 +46,7 @@ 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() }//随机排序后的题目 @@ -49,11 +61,32 @@ super.handleMessage(msg) when(msg.what){ PLAY_VOICE->{ - if (iv_playing.visibility != View.VISIBLE) + 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){ //没有播放并且是当前题号 player.startPlayMusic(requireContext(),correctVoice) + Log.e(TAG,"播放声音:$indexOf,${correctVoice}") + } } TO_NEXT->{ - (requireActivity() as ListenActivity).next() + 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) } } } @@ -80,7 +113,8 @@ private fun initClick() { cl_voice.clickDelay { - handler?.sendEmptyMessage(PLAY_VOICE) + if (!playing) + handler?.sendEmptyMessage(PLAY_VOICE) } setResultAnimation(cl_1,0) setResultAnimation(cl_2,1) @@ -127,10 +161,15 @@ 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 + handler?.sendEmptyMessage(PLAY_ERROR) v.setTransitionListener(object :MotionLayout.TransitionListener{ override fun onTransitionStarted(p0: MotionLayout?, p1: Int, p2: Int) { } @@ -146,30 +185,49 @@ } }) }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) } + if (rightPlaying){ + rightPlaying = false + hasRight = true + handler?.sendEmptyMessage(PLAY_VOICE) + }else if (errorPlaying) + errorPlaying = false + 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