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