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/SuperListenActivity.kt | 126 +++++++++++++++++++++++++++++++++++++----
1 files changed, 113 insertions(+), 13 deletions(-)
diff --git a/app/src/main/java/com/dollearn/student/ui/home/SuperListenActivity.kt b/app/src/main/java/com/dollearn/student/ui/home/SuperListenActivity.kt
index bc2b591..2cfe8e6 100644
--- a/app/src/main/java/com/dollearn/student/ui/home/SuperListenActivity.kt
+++ b/app/src/main/java/com/dollearn/student/ui/home/SuperListenActivity.kt
@@ -1,10 +1,17 @@
package com.dollearn.student.ui.home
+import android.R.attr.animation
+import android.R.attr.max
+import android.animation.Animator
+import android.animation.ObjectAnimator
+import android.animation.PropertyValuesHolder
+import android.animation.ValueAnimator
import android.os.Handler
import android.os.Looper
import android.os.Message
import android.util.Log
import android.view.View
+import android.view.animation.LinearInterpolator
import androidx.recyclerview.widget.GridLayoutManager
import cn.sinata.xldutils.gone
import cn.sinata.xldutils.utils.SPUtils
@@ -23,8 +30,11 @@
import com.dollearn.student.utils.event.EmptyEvent
import com.dollearn.student.utils.interfaces.StringCallback
import kotlinx.android.synthetic.main.activity_super_listen.*
+import kotlinx.android.synthetic.main.fragment_q_a.*
import kotlinx.android.synthetic.main.fragmetn_look_img.*
+import kotlinx.android.synthetic.main.item_game_1.view.*
import org.greenrobot.eventbus.EventBus
+import org.jetbrains.anko.dip
import kotlin.math.abs
import kotlin.math.max
import kotlin.math.min
@@ -34,6 +44,9 @@
class SuperListenActivity : TransparentStatusBarActivity(), AudioUtils.OnAudioStatusUpdateListener {
override fun setContentView() = R.layout.activity_super_listen
+ val level by lazy { //0就只能点入门,1就是入门和中级都能点,2就是入门、中级高级三个难度都可以点
+ intent.getIntExtra("level", 0)
+ }
private val week by lazy {
intent.getIntExtra("week", 0)
}
@@ -48,7 +61,7 @@
val TAG = "Listen====>"
- val list = arrayListOf<Subject>()
+ var list = arrayListOf<Subject>()
private val adapter = GameAdapter(list)
val PLAY_VOICE = 1
@@ -78,6 +91,9 @@
var state = 0 //0:准备听题 1:听题中 2:请作答 3:结束答题
+ var showFullImage = false
+ var paused = false
+
override fun initClick() {
tv_exit.setOnClickListener {
if (tv_exit.text == "提交"){
@@ -97,6 +113,12 @@
finish()
}else
onBackPressed()
+ }
+
+ cl_voice.setOnClickListener {
+ if (!playing){
+ handler?.sendEmptyMessage(PLAY_VOICE)
+ }
}
}
@@ -132,8 +154,10 @@
sendEmptyMessageDelayed(STUDY_TIME, 1000)
}
PLAY_VOICE -> {
- if (index < voiceList.size)
+ if (!paused&&!playing&&index < voiceList.size) {
+ playing = true
player.startPlayMusic(this@SuperListenActivity, voiceList[index])
+ }
}
COUNT_DOWN -> {
if (!playing) {
@@ -143,16 +167,18 @@
tv_tip.text = "请在${countTime}s内选择答案!"
if (countTime == 0) {
index++
- startGame()
+ startGame(true)
} else {
sendEmptyMessageDelayed(COUNT_DOWN, 1000)
}
}
PLAY_RIGHT -> {
+ playing = true
rightPlaying = true
player.startPlayMusic(this@SuperListenActivity, rightVoice)
}
PLAY_ERROR -> {
+ playing = true
errorPlaying = true
player.startPlayMusic(this@SuperListenActivity, errorVoice)
}
@@ -181,7 +207,7 @@
countdownDialog.callback = object :StringCallback{
override fun onResult(rst: String) {
index = 0
- startGame()
+ startGame(true)
}
}
countdownDialog.show(supportFragmentManager, "timer")
@@ -206,15 +232,19 @@
}
i++
}
- Log.e(TAG,"总数:$total,计算得到行数:${min(bestColumns,bestRows)},列数:${max(bestColumns,bestRows)}")
+ Log.e(TAG, "总数:$total,计算得到行数:${min(bestColumns, bestRows)},列数:${max(bestColumns, bestRows)}")
val lineHeight = rv_list.height.toDouble() / min(bestColumns, bestRows)
- Log.e(TAG,"高度:${rv_list.height},计算得到行高:${lineHeight}")
- rv_list.layoutManager = GridLayoutManager(this, max(bestColumns,bestRows))
+ Log.e(TAG, "高度:${rv_list.height},计算得到行高:${lineHeight}")
+ rv_list.layoutManager = GridLayoutManager(this, max(bestColumns, bestRows))
adapter.height = lineHeight.toInt()
adapter.notifyDataSetChanged()
}
- fun startGame() {
+ /**
+ * 切题
+ * @param playNow true:表示立即播放下一题 false:3秒后播放下一题
+ */
+ fun startGame(playNow: Boolean = false) {
if (index < voiceList.size){
Log.e(TAG, "开始答题:index=${index}")
tv_sort.text = (index+1).toString()
@@ -222,9 +252,10 @@
countTime = TIME //重置答题时间
tv_tip.text = "准备听题"
state = 0
- handler?.sendEmptyMessageDelayed(PLAY_VOICE, if (index == 0) 200 else 3000)
+ handler?.sendEmptyMessageDelayed(PLAY_VOICE, if (playNow) 200 else 3000)
}else{
tv_sort.visibility = View.INVISIBLE
+ cl_voice.visibility = View.INVISIBLE
tv_tip.text = ""
state = 3
tv_end.text = "已完成全部问题"
@@ -232,6 +263,56 @@
handler?.removeMessages(STUDY_TIME)
}
}
+
+ fun transAnimation(endView: View){
+ val offx = getScreenX(endView) - getScreenX(cl_voice)
+ val offy = getScreenY(endView) - getScreenY(cl_voice)
+ val x = PropertyValuesHolder.ofFloat("translationX", 0f, offx.toFloat())
+ val y = PropertyValuesHolder.ofFloat("translationY", 0f, offy.toFloat())
+ val animator = ObjectAnimator.ofPropertyValuesHolder(cl_voice, x, y)
+ animator.duration = 500
+ animator.interpolator = LinearInterpolator()
+ val withAnim = ValueAnimator.ofInt(cl_voice.width, endView.width).setDuration(500) //会影响结束坐标
+ withAnim.addUpdateListener {
+ cl_voice.layoutParams.width = it.animatedValue as Int
+ cl_voice.requestLayout()
+ }
+ val heightAnim = ValueAnimator.ofInt(cl_voice.height, endView.height).setDuration(500)
+ heightAnim.addUpdateListener {
+ cl_voice.layoutParams.height = it.animatedValue as Int
+ cl_voice.requestLayout()
+ }
+ withAnim.start()
+ heightAnim.start()
+ animator.start()
+ animator.addListener(object : Animator.AnimatorListener {
+ override fun onAnimationStart(animation: Animator?) {
+
+ }
+
+ override fun onAnimationEnd(animation: Animator?) {
+ endView.visible()
+ }
+
+ override fun onAnimationCancel(animation: Animator?) {
+ }
+
+ override fun onAnimationRepeat(animation: Animator?) {
+ }
+ })
+ }
+
+ private fun getScreenY(v: View):Int{
+ val xy = IntArray(2)
+ v.getLocationOnScreen(xy)
+ return xy[1]
+ }
+ private fun getScreenX(v: View):Int{
+ val xy = IntArray(2)
+ v.getLocationOnScreen(xy)
+ return xy[0]
+ }
+
override fun onUpdate(db: Double, time: Long) {
}
@@ -243,7 +324,8 @@
playing = true
if (errorPlaying||rightPlaying)
return
- if (!data!!.subjectList[data!!.subjectList.map { it.correct }.indexOf(voiceList[index])].completed){//首次播放
+// if (!data!!.subjectList[data!!.subjectList.map { it.correct }.indexOf(voiceList[index])].completed){//首次播放
+ if (handler?.hasMessages(COUNT_DOWN) == false){//首次播放
state = 1
tv_tip.text = "请在${countTime}s内选择答案!"
handler?.sendEmptyMessageDelayed(COUNT_DOWN, 1000)
@@ -258,18 +340,24 @@
iv1.visible()
iv2.visible()
iv_playing.gone()
- if (data!!.subjectList[data!!.subjectList.map { it.correct }.indexOf(voiceList[index])].completed){ //当前题目已作答,3秒后进入下一题
+ if (data!!.subjectList[data!!.subjectList.map { it.correct }.indexOf(voiceList[min(index,voiceList.lastIndex)])].completed){ //当前题目已作答,3秒后进入下一题
index++
startGame()
}
if (errorPlaying)
errorPlaying = false
- if (rightPlaying){
+ else if (rightPlaying){
rightPlaying = false
val subject = data!!.subjectList[data!!.subjectList.map { it.correct }
.indexOf(voiceList[index])] //当前音频对应题目
subject.completed = true
handler?.sendEmptyMessage(PLAY_VOICE)
+ }else{
+ cl_voice.translationX = 0f
+ cl_voice.translationY = 0f
+ cl_voice.layoutParams.width = dip(159)
+ cl_voice.layoutParams.height = dip(52)
+ cl_voice.requestLayout()
}
}
@@ -285,8 +373,20 @@
EventBus.getDefault().post(EmptyEvent(Const.EventCode.STOP_TIMER))
}
+ override fun onResume() {
+ super.onResume()
+ if (paused){
+ paused = false
+ handler?.sendEmptyMessageDelayed(PLAY_VOICE, 200)
+ }
+ }
+
override fun onPause() {
super.onPause()
- player.stopPlayMusic()
+ if (!showFullImage){
+ player.stopPlayMusic()
+ paused = true
+ }
+ showFullImage = false
}
}
--
Gitblit v1.7.1