From 855a7e18a795f0db2453a19e3e8f26ba2ff553b4 Mon Sep 17 00:00:00 2001
From: lmw <125975490@qq.com>
Date: 星期四, 29 五月 2025 16:32:41 +0800
Subject: [PATCH] UI调整
---
app/src/main/java/com/dollearn/student/ui/home/ListenFragment.kt | 119 +++++++++++++++++++++++++++++++++++++++++++++++------------
1 files changed, 94 insertions(+), 25 deletions(-)
diff --git a/app/src/main/java/com/dollearn/student/ui/home/ListenFragment.kt b/app/src/main/java/com/dollearn/student/ui/home/ListenFragment.kt
index 7cfdf3b..1e343a0 100644
--- a/app/src/main/java/com/dollearn/student/ui/home/ListenFragment.kt
+++ b/app/src/main/java/com/dollearn/student/ui/home/ListenFragment.kt
@@ -10,11 +10,14 @@
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 com.dollearn.student.utils.glide.GlideUtil
import kotlinx.android.synthetic.main.fragment_listen.*
import org.jetbrains.anko.imageResource
@@ -26,6 +29,16 @@
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 var playing = false //播放中,不能有任何操作
+
private var correctVoice = "" //本题音频
private val player by lazy { AudioUtils() }
@@ -34,12 +47,14 @@
private val data by lazy {
(requireActivity() as ListenActivity).data
}
- private var hasListen = true //要听一次才能作答 true:已经听完题目
+ private var hasListen = false //要听一次才能作答 true:已经听完题目
private var hasRight = false //正确以后不再做出选择 true:已经选出正确答案
private val randomList by lazy { data?.subjectList!![group].shuffled() }//随机排序后的题目
private val resultViewList by lazy { arrayListOf(result_1,result_2,result_3,result_4) }
+
+ var right = true //true进入下一题为全对,false 一旦答错过就置为false,此时进入下一题,本题算做错误
override fun onFirstVisibleToUser() {
player.setOnAudioStatusUpdateListener(this)
@@ -49,11 +64,32 @@
super.handleMessage(msg)
when(msg.what){
PLAY_VOICE->{
- if (iv_playing.visibility != View.VISIBLE)
+ playing = true
+ if (activity == null){
+ return
+ }
+ val listenActivity = activity as ListenActivity
+ val indexOf = listenActivity.fragments.indexOf(this@ListenFragment) //当前题目序号
+ if (iv_playing.visibility != View.VISIBLE&&indexOf == listenActivity.viewPager.currentItem){ //没有播放并且是当前题号
player.startPlayMusic(requireContext(),correctVoice)
+ Log.e(TAG,"播放声音:$indexOf,${correctVoice}")
+ }
}
TO_NEXT->{
- (requireActivity() as ListenActivity).next()
+ if (isAdded&&!playing){
+ (requireActivity() as ListenActivity).next()
+ removeMessages(TO_NEXT)
+ }
+ }
+ PLAY_RIGHT->{
+ playing = true
+ rightPlaying = true
+ player.startPlayMusic(requireContext(),rightVoice)
+ }
+ PLAY_ERROR->{
+ playing = true
+ errorPlaying = true
+ player.startPlayMusic(requireContext(),errorVoice)
}
}
}
@@ -61,10 +97,14 @@
data?.apply {
val originList = subjectList[group]
correctVoice = originList[index].correct
- iv_1.setImageURI(randomList[0].img)
- iv_2.setImageURI(randomList[1].img)
- iv_3.setImageURI(randomList[2].img)
- iv_4.setImageURI(randomList[3].img)
+ GlideUtil.load(requireContext(),randomList[0].img,iv_1,0)
+ GlideUtil.load(requireContext(),randomList[1].img,iv_2,0)
+ GlideUtil.load(requireContext(),randomList[2].img,iv_3,0)
+ GlideUtil.load(requireContext(),randomList[3].img,iv_4,0)
+// iv_1.setImageURI(randomList[0].img)
+// iv_2.setImageURI(randomList[1].img)
+// iv_3.setImageURI(randomList[2].img)
+// iv_4.setImageURI(randomList[3].img)
resultViewList.forEachIndexed { index, imageView ->
imageView.imageResource = if (randomList[index].correct == correctVoice){
motion.setTransition(R.id.start,if (index == 0) R.id.end_1 else if (index == 1) R.id.end_2 else if (index == 2) R.id.end_3 else R.id.end_4)
@@ -73,14 +113,15 @@
}
}
- handler?.sendEmptyMessageDelayed(PLAY_VOICE,1500) //进入题目2秒后播放,这里写1.5秒 预算进网络语音加载时间
+ handler?.sendEmptyMessageDelayed(PLAY_VOICE,200) //2025.4.8 立即播放
initClick()
}
private fun initClick() {
cl_voice.clickDelay {
- handler?.sendEmptyMessage(PLAY_VOICE)
+ if (!playing)
+ handler?.sendEmptyMessage(PLAY_VOICE)
}
setResultAnimation(cl_1,0)
setResultAnimation(cl_2,1)
@@ -95,12 +136,13 @@
Log.e(TAG,"回到上一题,恢复答题前的状态")
hasListen = false
hasRight = false
- handler?.sendEmptyMessageDelayed(PLAY_VOICE,1500) //进入题目2秒后播放,这里写1.5秒 预算进网络语音加载时间
- cl_1.progress = 0f
- cl_2.progress = 0f
- cl_3.progress = 0f
- cl_4.progress = 0f
- motion.progress = 0f
+ right = true
+ handler?.sendEmptyMessageDelayed(PLAY_VOICE,200) //改为立即播放
+ cl_1?.progress = 0f
+ cl_2?.progress = 0f
+ cl_3?.progress = 0f
+ cl_4?.progress = 0f
+ motion?.progress = 0f
}
companion object{
@@ -124,13 +166,19 @@
private fun setResultAnimation(v:MotionLayout,index: Int){
v.clickDelay {
if (!hasListen) {
- myToast("请先听题")
+// myToast("请先听题")
return@clickDelay
}
+ if (playing)
+ return@clickDelay
+ (activity as ListenActivity).totalCount ++
if (!hasRight){
v.progress = 0f
v.transitionToEnd()
if (randomList[index].correct != correctVoice){ //答案不对,结束后消失
+ hasListen = false
+ right = false
+ handler?.sendEmptyMessage(PLAY_ERROR)
v.setTransitionListener(object :MotionLayout.TransitionListener{
override fun onTransitionStarted(p0: MotionLayout?, p1: Int, p2: Int) {
}
@@ -146,30 +194,51 @@
}
})
}else{
- hasRight = true
+ (activity as ListenActivity).rightCount ++
motion.transitionToEnd()
- handler?.sendEmptyMessage(PLAY_VOICE)
+ handler?.sendEmptyMessage(PLAY_RIGHT)
}
}
}
-
}
override fun onStartPlay() {
- iv1.gone()
- iv2.gone()
- iv_playing.visible()
+ if (!errorPlaying&&!rightPlaying){
+ iv1.gone()
+ iv2.gone()
+ iv_playing.visible()
+ }
}
override fun onFinishPlay() {
+ playing = false
iv1.visible()
iv2.visible()
iv_playing.gone()
- hasListen = true
- if (hasRight){ //选对答案后的播放结束3秒后进入下一图
+ if (hasRight&&!playing){ //选对答案后的播放结束3秒后进入下一图
Log.e(TAG,"选对答案后的播放结束3秒后进入下一图")
- handler?.sendEmptyMessageDelayed(TO_NEXT,3000)
+ handler?.sendEmptyMessageDelayed(TO_NEXT,500) //万俊杰:缩短为0.5秒
}
+ if (rightPlaying){
+ rightPlaying = false
+ hasRight = true
+ handler?.sendEmptyMessage(PLAY_VOICE)
+ }else if (errorPlaying){
+ errorPlaying = false
+ cl_voice.callOnClick()
+ }
+ else if (!hasRight)
+ hasListen = true
+ }
+
+ override fun onPause() {
+ super.onPause()
+ player.stopPlayMusic()
+ }
+
+ override fun onDestroy() {
+ super.onDestroy()
+ handler?.removeCallbacksAndMessages(null)
}
}
\ No newline at end of file
--
Gitblit v1.7.1