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/ChooseVoiceFragment.kt | 292 +++++++++++++++++++++++++++++++++++++++------------------ 1 files changed, 199 insertions(+), 93 deletions(-) diff --git a/app/src/main/java/com/dollearn/student/ui/home/ChooseVoiceFragment.kt b/app/src/main/java/com/dollearn/student/ui/home/ChooseVoiceFragment.kt index 7c1086e..87021c0 100644 --- a/app/src/main/java/com/dollearn/student/ui/home/ChooseVoiceFragment.kt +++ b/app/src/main/java/com/dollearn/student/ui/home/ChooseVoiceFragment.kt @@ -9,12 +9,17 @@ 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.event.EmptyEvent import com.dollearn.student.utils.extention.clickDelay import kotlinx.android.synthetic.main.fragment_choose_voice.* +import org.greenrobot.eventbus.EventBus +import org.greenrobot.eventbus.Subscribe import org.jetbrains.anko.backgroundResource import org.jetbrains.anko.support.v4.toast @@ -27,6 +32,15 @@ private val PLAY_VOICE = 1 private val TO_NEXT = 10 + + 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 voiceList = arrayListOf<String>() //本题音频,每题有3个音频 private val player by lazy { AudioUtils() } @@ -41,13 +55,24 @@ private var playing = false //播放中,不能有任何操作 private val nameViews by lazy { arrayListOf(tv_1,tv_2,tv_3,tv_4) } + private val bgs by lazy { arrayListOf(cl_1,cl_2,cl_3,cl_4) } private val endViews by lazy { arrayListOf(cl_voice_end_1,cl_voice_end_2,cl_voice_end_3,cl_voice_end_4) } private val act by lazy { (requireActivity() as ChooseVoiceActivity) } + private var nowVoiceView:View? = null + +// private val isShowText by lazy { SPUtils.instance().getBoolean(Const.IS_SHOW_TEXT,true) } + private val isShowText = false + + private var isAutoPlaying = false //true 自动播放流程 + + var right = true //true进入下一题为全对,false 一旦答错过就置为false,此时进入下一题,本题算做错误 + override fun onFirstVisibleToUser() { player.setOnAudioStatusUpdateListener(this) player.stopPlayMusic() + EventBus.getDefault().register(this) handler = object : Handler(Looper.getMainLooper()){ override fun handleMessage(msg: Message) { super.handleMessage(msg) @@ -59,6 +84,14 @@ if (isAdded&&!playing) (requireActivity() as ChooseVoiceActivity).next() } + PLAY_RIGHT->{ + rightPlaying = true + player.startPlayMusic(requireContext(),rightVoice) + } + PLAY_ERROR->{ + errorPlaying = true + player.startPlayMusic(requireContext(),errorVoice) + } } } } @@ -69,8 +102,9 @@ iv_3.setImageURI(originList[2].img) iv_4.setImageURI(originList[3].img) } - showSubImage() initClick() + showSubImage() + } private fun initClick() { @@ -96,59 +130,84 @@ } rl_check_1.clickDelay { - if (playing) + if (playing||data!!.subjectList[group].filter { it.completed }.size == data!!.subjectList[group].size) return@clickDelay - dot_1.visible() - act.totalCount++ - if (voiceList[0] == data!!.subjectList[group][currentIndex].correct){ - act.rightCount++ - data!!.subjectList[group][currentIndex].completed = true - motion.transitionToEnd() - cl_voice1.callOnClick() - }else{ - iv_error_1.visible() - dot_1.postDelayed({ - iv_error_1.gone() - dot_1.gone() - },2000) - } + if (rl_check_2.visibility == View.VISIBLE&&rl_check_3.visibility == View.VISIBLE){ + dot_1.visible() + act.totalCount++ + if (voiceList[0] == data!!.subjectList[group][currentIndex].correct){ + act.rightCount++ + motion.transitionToEnd() + nowVoiceView = cl_voice1 + handler?.sendEmptyMessage(PLAY_RIGHT) + }else{ + right = false + handler?.sendEmptyMessage(PLAY_ERROR) + iv_error_1.visible() + dot_1.postDelayed({ + iv_error_1.gone() + dot_1.gone() + rl_check_1.gone() + rl_check_2.gone() + rl_check_3.gone() + },2000) + } + }else + myToast("请听完题") } rl_check_2.clickDelay { - if (playing) + if (playing||data!!.subjectList[group].filter { it.completed }.size == data!!.subjectList[group].size) return@clickDelay - dot_2.visible() - act.totalCount++ - if (voiceList[1] == data!!.subjectList[group][currentIndex].correct){ - act.rightCount++ - data!!.subjectList[group][currentIndex].completed = true - motion.transitionToEnd() - cl_voice2.callOnClick() - }else{ - iv_error_2.visible() - dot_1.postDelayed({ - dot_2.gone() - iv_error_2.gone() - },2000) - } + if (rl_check_1.visibility == View.VISIBLE&&rl_check_3.visibility == View.VISIBLE) { + dot_2.visible() + act.totalCount++ + if (voiceList[1] == data!!.subjectList[group][currentIndex].correct){ + act.rightCount++ + motion.transitionToEnd() + nowVoiceView = cl_voice2 + handler?.sendEmptyMessage(PLAY_RIGHT) + }else{ + + handler?.sendEmptyMessage(PLAY_ERROR) + iv_error_2.visible() + dot_1.postDelayed({ + dot_2.gone() + iv_error_2.gone() + rl_check_1.gone() + rl_check_2.gone() + rl_check_3.gone() + },2000) + } + }else + myToast("请听完题") + } rl_check_3.clickDelay { - if (playing) + if (playing||data!!.subjectList[group].filter { it.completed }.size == data!!.subjectList[group].size) return@clickDelay - dot_3.visible() - act.totalCount++ - if (voiceList[2] == data!!.subjectList[group][currentIndex].correct){ - data!!.subjectList[group][currentIndex].completed = true - act.rightCount++ - motion.transitionToEnd() - cl_voice3.callOnClick() - }else{ - iv_error_3.visible() - dot_1.postDelayed({ - iv_error_3.gone() - dot_3.gone() - },2000) - } + if (rl_check_2.visibility == View.VISIBLE&&rl_check_3.visibility == View.VISIBLE) { + dot_3.visible() + act.totalCount++ + if (voiceList[2] == data!!.subjectList[group][currentIndex].correct){ + act.rightCount++ + nowVoiceView = cl_voice3 + handler?.sendEmptyMessage(PLAY_RIGHT) + motion.transitionToEnd() + }else{ + handler?.sendEmptyMessage(PLAY_ERROR) + iv_error_3.visible() + dot_1.postDelayed({ + iv_error_3.gone() + dot_3.gone() + rl_check_1.gone() + rl_check_2.gone() + rl_check_3.gone() + },2000) + } + }else + myToast("请听完题") + } cl_voice_end_1.clickDelay { @@ -198,15 +257,19 @@ val shuffledList = list.shuffled() voiceList.clear() voiceList.addAll(shuffledList) - nameViews.forEachIndexed { index, textView -> - if (index == currentIndex){ - textView.text = originList[index].name - textView.backgroundResource = R.color.textColor99 - }else{ - textView.text = "" - textView.backgroundResource = R.color.page_bg + nameViews.forEachIndexed { index, textView -> + if (index == currentIndex){ + bgs[index].backgroundResource = R.drawable.bg_orange_8dp + if (isShowText){ + textView.text = originList[index].name + textView.backgroundResource = R.color.textColor99 + } + }else{ + bgs[index].backgroundResource = R.drawable.bg_white_8dp_padding + textView.text = "" + textView.backgroundResource = R.color.page_bg + } } - } //设置动画飞行路径 3对4 val rightVoiceIndex = voiceList.indexOf(imageNow.correct) var start = 0 @@ -252,11 +315,28 @@ override fun onTransitionCompleted(p0: MotionLayout?, p1: Int) { endViews[currentIndex].visible() + } override fun onTransitionTrigger(p0: MotionLayout?, p1: Int, p2: Boolean, p3: Float) { } }) + + if (act.fragments[act.vp.currentItem] == this&&act.recoverd){ //自动播放 + isAutoPlaying = true + cl_voice1.callOnClick() + } + + } + + @Subscribe + fun onEvent(e:EmptyEvent){ + if (e.code == Const.EventCode.RECOVERD){ + if (act.fragments[act.vp.currentItem] == this){ //自动播放 + isAutoPlaying = true + cl_voice1.callOnClick() + } + } } /** @@ -264,6 +344,7 @@ */ fun recover(){ Log.e(TAG,"回到上一题,恢复答题前的状态") + right = true motion.progress = 0f currentIndex = 0 endViews.forEach { it.gone() } @@ -292,40 +373,42 @@ override fun onStartPlay() { playing = true - if (voiceIndex == 0){ - iv1_1.gone() - iv2_1.gone() - iv_playing_1.visible() - } - if (voiceIndex == 1){ - iv1_2.gone() - iv2_2.gone() - iv_playing_2.visible() - } - if (voiceIndex == 2){ - iv1_3.gone() - iv2_3.gone() - iv_playing_3.visible() - } - if (voiceIndex == 3){ - iv1_1_end.gone() - iv2_1_end.gone() - iv_playing_1_end.visible() - } - if (voiceIndex == 4){ - iv1_2_end.gone() - iv2_2_end.gone() - iv_playing_2_end.visible() - } - if (voiceIndex == 5){ - iv1_3_end.gone() - iv2_3_end.gone() - iv_playing_3_end.visible() - } - if (voiceIndex == 6){ - iv1_4_end.gone() - iv2_4_end.gone() - iv_playing_4_end.visible() + if (!errorPlaying&&!rightPlaying){ + if (voiceIndex == 0){ + iv1_1.gone() + iv2_1.gone() + iv_playing_1.visible() + } + if (voiceIndex == 1){ + iv1_2.gone() + iv2_2.gone() + iv_playing_2.visible() + } + if (voiceIndex == 2){ + iv1_3.gone() + iv2_3.gone() + iv_playing_3.visible() + } + if (voiceIndex == 3){ + iv1_1_end.gone() + iv2_1_end.gone() + iv_playing_1_end.visible() + } + if (voiceIndex == 4){ + iv1_2_end.gone() + iv2_2_end.gone() + iv_playing_2_end.visible() + } + if (voiceIndex == 5){ + iv1_3_end.gone() + iv2_3_end.gone() + iv_playing_3_end.visible() + } + if (voiceIndex == 6){ + iv1_4_end.gone() + iv2_4_end.gone() + iv_playing_4_end.visible() + } } } @@ -336,18 +419,22 @@ iv1_1.visible() iv2_1.visible() iv_playing_1.gone() - } - if (voiceIndex == 1){ + if (isAutoPlaying) + cl_voice2.callOnClick() + }else if (voiceIndex == 1){ rl_check_2.visible() iv1_2.visible() iv2_2.visible() iv_playing_2.gone() - } - if (voiceIndex == 2){ + if (isAutoPlaying) + cl_voice3.callOnClick() + }else if (voiceIndex == 2){ rl_check_3.visible() iv1_3.visible() iv2_3.visible() iv_playing_3.gone() + if (isAutoPlaying) + isAutoPlaying = false } if (voiceIndex == 3){ iv1_1_end.visible() @@ -373,11 +460,30 @@ if (data!!.subjectList[group][currentIndex].completed){ //本题已答对 Log.e(TAG,"选对答案后的播放结束3秒后进入下一图") if (currentIndex == 3){ - handler?.sendEmptyMessageDelayed(TO_NEXT,3000) + handler?.sendEmptyMessageDelayed(TO_NEXT,500)//万俊杰:缩短为0.5秒 }else{ currentIndex++ showSubImage() } } + + if (rightPlaying){ + rightPlaying = false + data!!.subjectList[group][currentIndex].completed = true + nowVoiceView?.callOnClick() + } + if (errorPlaying) + errorPlaying = false + } + + override fun onPause() { + super.onPause() + player.stopPlayMusic() + } + + override fun onDestroy() { + super.onDestroy() + EventBus.getDefault().unregister(this) + handler?.removeCallbacksAndMessages(null) } } \ No newline at end of file -- Gitblit v1.7.1