From b13afc751dbbce24753d008f1f87d2c5e133a4ad Mon Sep 17 00:00:00 2001 From: lmw <125975490@qq.com> Date: 星期二, 09 七月 2024 15:19:26 +0800 Subject: [PATCH] fix bug --- app/src/main/java/com/dollearn/student/ui/home/ListenFragment.kt | 67 ++++++++++++++++++++++++++++----- 1 files changed, 57 insertions(+), 10 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 0ae0268..9662ece 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,6 +61,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 +73,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) } } } @@ -85,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) @@ -132,11 +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) { } @@ -152,10 +185,9 @@ } }) }else{ - hasRight = true (activity as ListenActivity).rightCount ++ motion.transitionToEnd() - handler?.sendEmptyMessage(PLAY_VOICE) + handler?.sendEmptyMessage(PLAY_RIGHT) } } } @@ -163,19 +195,34 @@ } 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() } } \ No newline at end of file -- Gitblit v1.7.1