lmw
1 天以前 9904e5f900ba751c1fe719cdf889f00e9f1418e8
app/src/main/java/com/dollearn/student/ui/home/MatchFragment.kt
@@ -4,19 +4,22 @@
import android.os.Looper
import android.os.Message
import android.util.Log
import android.view.View
import androidx.constraintlayout.motion.widget.MotionLayout
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_match.*
import org.jetbrains.anko.imageResource
//todo 2.选择正确后不能再选择 3.选择正确后处理语音条位置
class MatchFragment : BaseFragment(), AudioUtils.OnAudioStatusUpdateListener {
    override fun contentViewId() = R.layout.fragment_match
@@ -25,6 +28,15 @@
    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 val player by lazy { AudioUtils() }
    private val group by lazy { arguments?.getInt("group")?:0 }
@@ -38,6 +50,14 @@
    private var playing = false
    private val voiceList = arrayListOf<String>() //语音列表,随机排序
    private var voiceIndex = -1 //点击播放的声音序号 0-3取值
    private var nowVoiceView: View? = null
    private var imgPosition = -1
    private val completedVoice = arrayListOf<String>() //已经选了的音频 飞到图片上了
    var right = true //true进入下一题为全对,false 一旦答错过就置为false,此时进入下一题,本题算做错误
    override fun onFirstVisibleToUser() {
        player.setOnAudioStatusUpdateListener(this)
@@ -53,6 +73,15 @@
                        if (isAdded&&!playing){
                            (requireActivity() as MatchActivity).next()
                        }
                    }
                    PLAY_RIGHT->{
                        rightPlaying = true
                        player.startPlayMusic(requireContext(),rightVoice)
                    }
                    PLAY_ERROR->{
                        voiceIndex = -1
                        errorPlaying = true
                        player.startPlayMusic(requireContext(),errorVoice)
                    }
                }
            }
@@ -86,14 +115,17 @@
        cl_1.clickDelay {
            val voiceIndex = voiceIndex
            if (playing||voiceIndex == -1) //未播放或者正在播放,不可点击
            if (playing) //未播放或者正在播放,不可点击
                return@clickDelay
            if (data!!.subjectList[group][0].completed) //已作答不可点击
            if (voiceIndex == -1){//未播放不可点击
                myToast("请先听题")
                return@clickDelay
            }
//            if (data!!.subjectList[group][0].completed) //已作答不可点击
//                return@clickDelay
            act.totalCount ++
            if (data!!.subjectList[group][0].correct == voiceList[voiceIndex]){
                result_1.imageResource = R.mipmap.successs
                data!!.subjectList[group][0].completed = true
                act.rightCount ++
                //执行飞行动画
                var start = 0
@@ -116,7 +148,8 @@
                        end = R.id.end_4_1
                    }
                }
                voiceViews[voiceIndex].callOnClick()
                nowVoiceView =  voiceViews[voiceIndex]
                imgPosition = 0
                motion.setTransitionListener(object :MotionLayout.TransitionListener{
                    override fun onTransitionStarted(p0: MotionLayout?, p1: Int, p2: Int) {
@@ -150,8 +183,11 @@
                })
                motion.setTransition(start,end)
                motion.transitionToEnd()
                handler?.sendEmptyMessage(PLAY_RIGHT)
            }else{
                right = false
                result_1.imageResource = R.mipmap.zhifushibai
                handler?.sendEmptyMessage(PLAY_ERROR)
            }
            showResultAnim(cl_1)
        }
@@ -159,15 +195,19 @@
        cl_2.clickDelay {
            val voiceIndex = voiceIndex
            if (playing||voiceIndex == -1) //未播放或者正在播放,不可点击
            if (playing) //未播放或者正在播放,不可点击
                return@clickDelay
            if (data!!.subjectList[group][1].completed) //已作答不可点击
            if (voiceIndex == -1){//未播放不可点击
                myToast("请先听题")
                return@clickDelay
            }
//            if (data!!.subjectList[group][1].completed) //已作答不可点击
//                return@clickDelay
            act.totalCount ++
            if (data!!.subjectList[group][1].correct == voiceList[voiceIndex]){
                result_2.imageResource = R.mipmap.successs
                data!!.subjectList[group][1].completed = true
                act.rightCount ++
                imgPosition = 1
                //执行飞行动画
                var start = 0
                var end = 0
@@ -189,7 +229,7 @@
                        end = R.id.end_4_2
                    }
                }
                voiceViews[voiceIndex].callOnClick()
                nowVoiceView =  voiceViews[voiceIndex]
                motion.setTransitionListener(object :MotionLayout.TransitionListener{
                    override fun onTransitionStarted(p0: MotionLayout?, p1: Int, p2: Int) {
@@ -224,8 +264,10 @@
                })
                motion.setTransition(start,end)
                motion.transitionToEnd()
                handler?.sendEmptyMessage(PLAY_RIGHT)
            }else{
                result_2.imageResource = R.mipmap.zhifushibai
                handler?.sendEmptyMessage(PLAY_ERROR)
            }
            showResultAnim(cl_2)
        }
@@ -233,14 +275,18 @@
        cl_3.clickDelay {
            val voiceIndex = voiceIndex
            if (playing||voiceIndex == -1) //未播放或者正在播放,不可点击
            if (playing) //未播放或者正在播放,不可点击
                return@clickDelay
            if (data!!.subjectList[group][2].completed) //已作答不可点击
            if (voiceIndex == -1){//未播放不可点击
                myToast("请先听题")
                return@clickDelay
            }
//            if (data!!.subjectList[group][2].completed) //已作答不可点击
//                return@clickDelay
            act.totalCount ++
            if (data!!.subjectList[group][2].correct == voiceList[voiceIndex]){
                result_3.imageResource = R.mipmap.successs
                data!!.subjectList[group][2].completed = true
                imgPosition = 2
                act.rightCount ++
                //执行飞行动画
                var start = 0
@@ -263,7 +309,7 @@
                        end = R.id.end_4_3
                    }
                }
                voiceViews[voiceIndex].callOnClick()
                nowVoiceView =  voiceViews[voiceIndex]
                motion.setTransitionListener(object :MotionLayout.TransitionListener{
                    override fun onTransitionStarted(p0: MotionLayout?, p1: Int, p2: Int) {
@@ -298,22 +344,28 @@
                })
                motion.setTransition(start,end)
                motion.transitionToEnd()
                handler?.sendEmptyMessage(PLAY_RIGHT)
            }else{
                result_3.imageResource = R.mipmap.zhifushibai
                handler?.sendEmptyMessage(PLAY_ERROR)
            }
            showResultAnim(cl_3)
        }
        cl_4.clickDelay {
            val voiceIndex = voiceIndex
            if (playing||voiceIndex == -1) //未播放或者正在播放,不可点击
            if (playing) //未播放或者正在播放,不可点击
                return@clickDelay
            if (data!!.subjectList[group][3].completed) //已作答不可点击
            if (voiceIndex == -1){//未播放不可点击
                myToast("请先听题")
                return@clickDelay
            }
//            if (data!!.subjectList[group][3].completed) //已作答不可点击
//                return@clickDelay
            act.totalCount ++
            if (data!!.subjectList[group][3].correct == voiceList[voiceIndex]){
                result_4.imageResource = R.mipmap.successs
                data!!.subjectList[group][3].completed = true
                imgPosition = 3
                act.rightCount ++
                //执行飞行动画
                var start = 0
@@ -336,7 +388,7 @@
                        end = R.id.end_4_4
                    }
                }
                voiceViews[voiceIndex].callOnClick()
                nowVoiceView =  voiceViews[voiceIndex]
                motion.setTransitionListener(object :MotionLayout.TransitionListener{
                    override fun onTransitionStarted(p0: MotionLayout?, p1: Int, p2: Int) {
@@ -371,8 +423,10 @@
                })
                motion.setTransition(start,end)
                motion.transitionToEnd()
                handler?.sendEmptyMessage(PLAY_RIGHT)
            }else{
                result_4.imageResource = R.mipmap.zhifushibai
                handler?.sendEmptyMessage(PLAY_ERROR)
            }
            showResultAnim(cl_4)
        }
@@ -409,6 +463,7 @@
            override fun onTransitionCompleted(p0: MotionLayout?, p1: Int) {
                m.progress = 0f
                tv_name.text =""
            }
            override fun onTransitionTrigger(p0: MotionLayout?, p1: Int, p2: Boolean, p3: Float) {
@@ -421,6 +476,7 @@
     */
    fun recover(){
        Log.e(TAG,"回到上一题,恢复答题前的状态")
        right = true
        motion.progress = 0f
        data!!.subjectList[group].forEach {
            it.completed = false
@@ -457,6 +513,8 @@
    override fun onStartPlay() {
        playing = true
        if (errorPlaying||rightPlaying)
            return
        val list = data!!.subjectList[group]
        if (voiceIndex in 0..3)
            tv_name.text = list[list.map { it.correct }.indexOf(voiceList[voiceIndex])].name
@@ -515,45 +573,85 @@
                iv1_1.visible()
                iv2_1.visible()
                iv_playing_1.gone()
                if (nowVoiceView!=null && data!!.subjectList[group][imgPosition].completed){
                    voiceIndex = -1
                    nowVoiceView = null
                }
            }
            1->{
                iv1_2.visible()
                iv2_2.visible()
                iv_playing_2.gone()
                if (nowVoiceView!=null && data!!.subjectList[group][imgPosition].completed){
                    voiceIndex = -1
                    nowVoiceView = null
                }
            }
            2->{
                iv1_3.visible()
                iv2_3.visible()
                iv_playing_3.gone()
                if (nowVoiceView!=null && data!!.subjectList[group][imgPosition].completed){
                    voiceIndex = -1
                    nowVoiceView = null
                }
            }
            3->{
                iv1_4.visible()
                iv2_4.visible()
                iv_playing_4.gone()
                if (nowVoiceView!=null && data!!.subjectList[group][imgPosition].completed){
                    voiceIndex = -1
                    nowVoiceView = null
                }
            }
            4->{
                iv1_1_end.visible()
                iv2_1_end.visible()
                iv_playing_1_end.gone()
                voiceIndex = -1
            }
            5->{
                iv1_2_end.visible()
                iv2_2_end.visible()
                iv_playing_2_end.gone()
                voiceIndex = -1
            }
            6->{
                iv1_3_end.visible()
                iv2_3_end.visible()
                iv_playing_3_end.gone()
                voiceIndex = -1
            }
            7->{
                iv1_4_end.visible()
                iv2_4_end.visible()
                iv_playing_4_end.gone()
                voiceIndex = -1
            }
        }
        if (data!!.subjectList[group].filter { it.completed }.size == 4){ //全部答对
            handler?.sendEmptyMessage(TO_NEXT)
        }
        if (errorPlaying)
            errorPlaying = false
        if (rightPlaying){
            rightPlaying = false
            nowVoiceView?.callOnClick()
            data!!.subjectList[group][imgPosition].completed = true
        }
    }
    override fun onPause() {
        super.onPause()
        player.stopPlayMusic()
    }
    override fun onDestroy() {
        super.onDestroy()
        handler?.removeCallbacksAndMessages(null)
    }
}