From 98faa1d5d540a7e4de4086ea11df3fd61b5c7ab9 Mon Sep 17 00:00:00 2001 From: lmw <125975490@qq.com> Date: 星期三, 17 七月 2024 11:47:03 +0800 Subject: [PATCH] 将要取消游戏页面item的结果动画 --- app/src/main/java/com/dollearn/student/ui/home/MemoryActivity.kt | 105 ++++++++++++++++++++++++++++++++++++++++++++++------ 1 files changed, 92 insertions(+), 13 deletions(-) diff --git a/app/src/main/java/com/dollearn/student/ui/home/MemoryActivity.kt b/app/src/main/java/com/dollearn/student/ui/home/MemoryActivity.kt index 7fd64c2..95174b0 100644 --- a/app/src/main/java/com/dollearn/student/ui/home/MemoryActivity.kt +++ b/app/src/main/java/com/dollearn/student/ui/home/MemoryActivity.kt @@ -3,16 +3,23 @@ import android.os.Handler import androidx.core.os.bundleOf import androidx.recyclerview.widget.GridLayoutManager +import cn.sinata.xldutils.utils.SPUtils import cn.sinata.xldutils.utils.showAllowingStateLoss import com.dollearn.student.R import com.dollearn.student.dialog.TipDialog +import com.dollearn.student.network.HttpManager import com.dollearn.student.network.entity.Card import com.dollearn.student.network.entity.MemoryBean +import com.dollearn.student.network.request import com.dollearn.student.ui.TransparentStatusBarActivity import com.dollearn.student.ui.home.adapter.CardAdapter +import com.dollearn.student.utils.AudioUtils +import com.dollearn.student.utils.Const +import com.dollearn.student.utils.event.EmptyEvent import kotlinx.android.synthetic.main.activity_memory.* +import org.greenrobot.eventbus.EventBus -class MemoryActivity : TransparentStatusBarActivity() { +class MemoryActivity : TransparentStatusBarActivity(), AudioUtils.OnAudioStatusUpdateListener { override fun setContentView() = R.layout.activity_memory private val data by lazy { @@ -33,23 +40,37 @@ private val PLAY_VOICE = 1 private val STUDY_TIME = 2 - private val player by lazy { com.dollearn.student.utils.AudioUtils() } + val PLAY_RIGHT = 4 + val PLAY_ERROR = 5 + + 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 var index = 0 + var playing = false override fun initClick() { tv_exit.setOnClickListener { if (tv_exit.text == "提交"){ - //todo 分数问题 - ResultActivity.startResult(this,0,0,0,7,totalCount,rightCount,100,time,data!!.data.id) + val right = list.filter { !it.isBack }.size / 2 + val total = data.photoList.size + val score = right*data.data.answerIntegral/total + ResultActivity.startResult(this,0,0,0,7, total, right,score,time,data!!.data.id) finish() }else - finish() + onBackPressed() } } override fun initView() { + player.setOnAudioStatusUpdateListener(this) + player.stopPlayMusic() handler = object : Handler(android.os.Looper.getMainLooper()){ override fun handleMessage(msg: android.os.Message) { super.handleMessage(msg) @@ -63,8 +84,12 @@ tipDialog.arguments = bundleOf("msg" to "答题时间已结束,停止作答!","isAlert" to true,"ok" to "查看成绩") tipDialog.setDismissCallback(object :TipDialog.OnDismiss{ override fun onDismiss() { - ResultActivity.startResult(this@MemoryActivity,0,0,0,7,totalCount,rightCount - ,100,time,data!!.data.id) + val right = list.filter { !it.isBack }.size / 2 + val total = data.photoList.size + val score = right*data.data.answerIntegral/total + ResultActivity.startResult(this@MemoryActivity,0,0,0,7,total,right + ,score,time,data.data.id) + finish() } }) tipDialog.showAllowingStateLoss(supportFragmentManager,"finish") @@ -74,12 +99,21 @@ PLAY_VOICE->{ player.startPlayMusic(this@MemoryActivity,list[index].url) } + PLAY_RIGHT->{ + rightPlaying = true + player.startPlayMusic(this@MemoryActivity,rightVoice) + } + PLAY_ERROR->{ + errorPlaying = true + player.startPlayMusic(this@MemoryActivity,errorVoice) + } } } } + lastTime = data.data.answerTime //倒计时时间 + tv_timer.text = "${lastTime}S" handler?.sendEmptyMessageDelayed(STUDY_TIME,1000) - rv_list.layoutManager = GridLayoutManager(this,5) rv_list.adapter = adapter list.addAll(data.photoList.map { Card(it.id,1,it.photo) }) @@ -93,17 +127,21 @@ */ fun flyover(position:Int){ val card = list[position] - if (card.type == 2){ + if (card.type == 2){ //如果是语音 先播放语音 index = position handler?.sendEmptyMessage(PLAY_VOICE) + }else{ //不是语音直接比较结果 + checkResult() } + } + private fun checkResult(){ if (adapter.position1!=-1&&adapter.position2!=-1){ //已经翻开2张卡片,比较结果是否匹配 totalCount++ val card1 = list[adapter.position1] val card2 = list[adapter.position2] if (card1.type!=card2.type&&card1.id == card2.id){//匹配成功 - adapter.releaseHolder() + handler?.sendEmptyMessage(PLAY_RIGHT) rightCount++ tv_timer.postDelayed({ if (list.filter { !it.isBack }.size == list.size){ //全部答对 @@ -112,18 +150,59 @@ } },500) }else{ - tv_timer.postDelayed({ - adapter.bothToBack() - },500) + handler?.sendEmptyMessage(PLAY_ERROR) } } } + override fun onBackPressed() { + HttpManager.exitGameOrStory(time).request(this){ _, _-> + super.onBackPressed() + } + } override fun onDestroy() { super.onDestroy() handler?.removeMessages(PLAY_VOICE) handler?.removeMessages(STUDY_TIME) handler = null + EventBus.getDefault().post(EmptyEvent(Const.EventCode.STOP_TIMER)) + } + + override fun onPause() { + super.onPause() + player.stopPlayMusic() + } + + override fun onUpdate(db: Double, time: Long) { + + } + + override fun onStop(filePath: String?) { + } + + override fun onStartPlay() { + playing = true + } + + override fun onFinishPlay() { + playing = false + if (errorPlaying){ + errorPlaying = false + tv_timer.postDelayed({ + adapter.bothToBack() + },500) + }else if (rightPlaying){ + rightPlaying = false + val card1 = list[adapter.position1] + if (card1.type == 2) + index = adapter.position1 + else + index = adapter.position2 + adapter.releaseHolder() + handler?.sendEmptyMessage(PLAY_VOICE) + }else{ + checkResult() + } } } -- Gitblit v1.7.1