From 252736e890fd50550ab9dec218159356e2a953c1 Mon Sep 17 00:00:00 2001 From: lmw <125975490@qq.com> Date: 星期四, 18 七月 2024 17:51:37 +0800 Subject: [PATCH] fix bug --- app/src/main/java/com/dollearn/student/ui/home/MemoryActivity.kt | 83 +++++++++++++++++++++++++++++++++++++++-- 1 files changed, 79 insertions(+), 4 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 95174b0..1a80789 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 @@ -1,10 +1,13 @@ package com.dollearn.student.ui.home import android.os.Handler +import android.util.Log import androidx.core.os.bundleOf import androidx.recyclerview.widget.GridLayoutManager +import cn.sinata.xldutils.gone import cn.sinata.xldutils.utils.SPUtils import cn.sinata.xldutils.utils.showAllowingStateLoss +import cn.sinata.xldutils.visible import com.dollearn.student.R import com.dollearn.student.dialog.TipDialog import com.dollearn.student.network.HttpManager @@ -17,7 +20,13 @@ import com.dollearn.student.utils.Const import com.dollearn.student.utils.event.EmptyEvent import kotlinx.android.synthetic.main.activity_memory.* +import kotlinx.android.synthetic.main.item_card.view.* import org.greenrobot.eventbus.EventBus +import org.jetbrains.anko.imageResource +import kotlin.math.abs +import kotlin.math.max +import kotlin.math.min +import kotlin.math.sqrt class MemoryActivity : TransparentStatusBarActivity(), AudioUtils.OnAudioStatusUpdateListener { override fun setContentView() = R.layout.activity_memory @@ -27,17 +36,18 @@ } private val list = arrayListOf<Card>() private val adapter = CardAdapter(list) + val TAG = "Memory====>" private var lastTime = 600 //剩余秒 private var totalCount = 0 private var rightCount = 0 - private var handler: Handler? = null + var handler: Handler? = null var time = 0 //学习秒数 - private val PLAY_VOICE = 1 + val PLAY_VOICE = 1 private val STUDY_TIME = 2 val PLAY_RIGHT = 4 @@ -51,7 +61,7 @@ private val player by lazy { AudioUtils() } - private var index = 0 + var index = 0 var playing = false @@ -97,13 +107,17 @@ sendEmptyMessageDelayed(STUDY_TIME,1000) } PLAY_VOICE->{ + playing = true player.startPlayMusic(this@MemoryActivity,list[index].url) + rv_list.getChildAt(index).iv_play.setImageResource(R.mipmap.playing_blue) } PLAY_RIGHT->{ + playing = true rightPlaying = true player.startPlayMusic(this@MemoryActivity,rightVoice) } PLAY_ERROR->{ + playing = true errorPlaying = true player.startPlayMusic(this@MemoryActivity,errorVoice) } @@ -114,11 +128,41 @@ 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) }) list.addAll(data.voiceList.map { Card(it.id,2,it.voice) }) list.shuffle() + rv_list.postDelayed({ + initRecycler(list.size) + },500) + } + + /** + * 需要计算行列数 + */ + private fun initRecycler(total: Int){ + var bestRows = 1 + var bestColumns: Int = total + var i = 1 + while (i <= sqrt(total.toDouble())) { + val rows = i + val columns: Int = if (total%i>0) (total / i)+1 else total / i + // Calculate the absolute difference between rows and columns + val diff = abs(rows - columns) + // Update the best rows and columns if this pair has a smaller difference + if (diff < abs(bestRows - bestColumns)) { + bestRows = rows + bestColumns = columns + } + i++ + } + Log.e(TAG,"总数:$total,计算得到行数:${min(bestColumns,bestRows)},列数:${max(bestColumns,bestRows)}") + val lineHeight = rv_list.height.toDouble() / min(bestColumns, bestRows) + val lineWidth = rv_list.width.toDouble() / max(bestColumns, bestRows) + Log.e(TAG,"高度:${rv_list.height},计算得到行高:${lineHeight},宽度:${rv_list.width},计算得到行宽:${lineWidth}") + rv_list.layoutManager = GridLayoutManager(this, max(bestColumns,bestRows)) + adapter.height = lineHeight.toInt() + adapter.widgh = lineWidth.toInt() adapter.notifyDataSetChanged() } @@ -143,6 +187,20 @@ if (card1.type!=card2.type&&card1.id == card2.id){//匹配成功 handler?.sendEmptyMessage(PLAY_RIGHT) rightCount++ + rv_list.getChildAt(adapter.position1).iv_result?.apply { + imageResource = R.mipmap.successs + visible() + postDelayed({ + gone() + },3000) + } + rv_list.getChildAt(adapter.position2).iv_result?.apply { + imageResource = R.mipmap.successs + visible() + postDelayed({ + gone() + },3000) + } tv_timer.postDelayed({ if (list.filter { !it.isBack }.size == list.size){ //全部答对 tv_exit.text = "提交" @@ -151,6 +209,20 @@ },500) }else{ handler?.sendEmptyMessage(PLAY_ERROR) + rv_list.getChildAt(adapter.position1).iv_result?.apply { + imageResource = R.mipmap.zhifushibai + visible() + postDelayed({ + gone() + },3000) + } + rv_list.getChildAt(adapter.position2).iv_result?.apply { + imageResource = R.mipmap.zhifushibai + visible() + postDelayed({ + gone() + },3000) + } } } } @@ -189,8 +261,10 @@ playing = false if (errorPlaying){ errorPlaying = false + playing = true tv_timer.postDelayed({ adapter.bothToBack() + playing = false //防止翻转过程中点击,造成缓存view被销毁 },500) }else if (rightPlaying){ rightPlaying = false @@ -202,6 +276,7 @@ adapter.releaseHolder() handler?.sendEmptyMessage(PLAY_VOICE) }else{ + rv_list.getChildAt(index).iv_play.setImageResource(R.mipmap.play_blue) checkResult() } } -- Gitblit v1.7.1