| | |
| | | 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 |
| | | |
| | |
| | | private val TAG = "Choose=======》" |
| | | |
| | | private var handler:Handler? = null |
| | | private val list = 1 |
| | | |
| | | 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() } |
| | |
| | | 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) |
| | |
| | | if (isAdded&&!playing) |
| | | (requireActivity() as ChooseVoiceActivity).next() |
| | | } |
| | | PLAY_RIGHT->{ |
| | | rightPlaying = true |
| | | player.startPlayMusic(requireContext(),rightVoice) |
| | | } |
| | | PLAY_ERROR->{ |
| | | errorPlaying = true |
| | | player.startPlayMusic(requireContext(),errorVoice) |
| | | } |
| | | } |
| | | } |
| | | } |
| | |
| | | iv_3.setImageURI(originList[2].img) |
| | | iv_4.setImageURI(originList[3].img) |
| | | } |
| | | showSubImage() |
| | | initClick() |
| | | showSubImage() |
| | | |
| | | } |
| | | |
| | | private fun initClick() { |
| | |
| | | } |
| | | |
| | | 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 { |
| | |
| | | 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 |
| | |
| | | |
| | | 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() |
| | | } |
| | | } |
| | | } |
| | | |
| | | /** |
| | |
| | | */ |
| | | fun recover(){ |
| | | Log.e(TAG,"回到上一题,恢复答题前的状态") |
| | | right = true |
| | | motion.progress = 0f |
| | | currentIndex = 0 |
| | | endViews.forEach { it.gone() } |
| | |
| | | |
| | | 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() |
| | | } |
| | | } |
| | | } |
| | | |
| | |
| | | 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() |
| | |
| | | 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) |
| | | } |
| | | } |