From c9f6a2283ee7e5595c91c6d721726a89a3ab9ecd Mon Sep 17 00:00:00 2001
From: 罗明文 <125975490@qq.com>
Date: 星期二, 18 六月 2024 02:49:22 +0800
Subject: [PATCH] save

---
 app/src/main/res/layout/fragment_match.xml                       |  146 +++++++++
 app/src/main/java/com/dollearn/student/ui/home/MatchFragment.kt  |  396 ++++++++++++---------------
 app/src/main/java/com/dollearn/student/ui/home/MatchActivity.kt  |    6 
 app/src/main/res/xml/scene_fragment_match.xml                    |  283 ++++++++++++++++++++
 app/src/main/java/com/dollearn/student/ui/home/ListenFragment.kt |    1 
 app/src/main/java/com/dollearn/student/ui/home/DailyFragment.kt  |    2 
 6 files changed, 602 insertions(+), 232 deletions(-)

diff --git a/app/src/main/java/com/dollearn/student/ui/home/DailyFragment.kt b/app/src/main/java/com/dollearn/student/ui/home/DailyFragment.kt
index 06ff846..ee1cb7d 100644
--- a/app/src/main/java/com/dollearn/student/ui/home/DailyFragment.kt
+++ b/app/src/main/java/com/dollearn/student/ui/home/DailyFragment.kt
@@ -59,7 +59,7 @@
         cl_5.clickDelay {
             showDialog("加载题目...")
             HttpManager.pictureMateVoice(season, week, day).requestByF(this){_,data->
-//                startActivityForResult<IncludeActivity>(1,"data" to data,"day" to day,"week" to week,"season" to season)
+                startActivityForResult<MatchActivity>(1,"data" to data,"day" to day,"week" to week,"season" to season)
             }
         }
     }
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 559ca27..0ae0268 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
@@ -160,7 +160,6 @@
             }
         }
 
-
     }
 
     override fun onStartPlay() {
diff --git a/app/src/main/java/com/dollearn/student/ui/home/MatchActivity.kt b/app/src/main/java/com/dollearn/student/ui/home/MatchActivity.kt
index 19d4c00..001f1c8 100644
--- a/app/src/main/java/com/dollearn/student/ui/home/MatchActivity.kt
+++ b/app/src/main/java/com/dollearn/student/ui/home/MatchActivity.kt
@@ -41,7 +41,7 @@
 
     override fun initClick() {
         tv_last.setOnClickListener {
-            (fragments[view_pager.currentItem-1] as IncludeFragment).recover()
+            (fragments[view_pager.currentItem-1] as MatchFragment).recover()
             view_pager.setCurrentItem(view_pager.currentItem-1,true)
             if (view_pager.currentItem == 0)
                 tv_last.gone()
@@ -58,7 +58,7 @@
             ResultActivity.startResult(this,day,week,season,3,totalCount,rightCount,data!!.data.integral,time,data!!.data.id)
             finish()
         }else{
-            (fragments[view_pager.currentItem+1] as IncludeFragment).recover()
+            (fragments[view_pager.currentItem+1] as MatchFragment).recover()
             view_pager.setCurrentItem(view_pager.currentItem+1,true)
             tv_last.visible()
         }
@@ -68,7 +68,7 @@
         data?.apply {
             tv_progress.text = "已完成:1/${subjectList.size}"
             subjectList.forEachIndexed { index, subject ->
-                fragments.add(IncludeFragment.getInstance(index))
+                fragments.add(MatchFragment.getInstance(index))
             }
             view_pager.adapter = @SuppressLint("WrongConstant")
             object : FragmentPagerAdapter(supportFragmentManager,0) {
diff --git a/app/src/main/java/com/dollearn/student/ui/home/MatchFragment.kt b/app/src/main/java/com/dollearn/student/ui/home/MatchFragment.kt
index c7e7288..7f3423a 100644
--- a/app/src/main/java/com/dollearn/student/ui/home/MatchFragment.kt
+++ b/app/src/main/java/com/dollearn/student/ui/home/MatchFragment.kt
@@ -8,15 +8,17 @@
 import androidx.core.os.bundleOf
 import cn.sinata.xldutils.fragment.BaseFragment
 import cn.sinata.xldutils.gone
-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.extention.clickDelay
-import kotlinx.android.synthetic.main.fragment_include.*
+import kotlinx.android.synthetic.main.fragment_match.*
+import org.jetbrains.anko.imageResource
 
+
+//todo 1.首次播放播放中图标不显示 2.选择正确后不能再选择 3.选择正确后处理语音条位置
 class MatchFragment : BaseFragment(), AudioUtils.OnAudioStatusUpdateListener {
-    override fun contentViewId() = R.layout.fragment_include
+    override fun contentViewId() = R.layout.fragment_match
 
     private val TAG = "Match=======》"
 
@@ -27,17 +29,15 @@
     private val player by lazy { AudioUtils() }
     private val group by lazy { arguments?.getInt("group")?:0 }
     private val data by lazy {
-        (requireActivity() as IncludeActivity).data
+        (requireActivity() as MatchActivity).data
     }
 
-    private val act by lazy { requireActivity() as IncludeActivity }
+    private val act by lazy { requireActivity() as MatchActivity }
 
-    private var voiceIndex = -1 //点击播放的声音序号 0-5取值
-    private val voiceViews by lazy { arrayListOf(cl_voice1,cl_voice2,cl_voice3,cl_voice4,cl_voice5,cl_voice6) }
+    private val voiceViews by lazy { arrayListOf(cl_voice_1,cl_voice_2,cl_voice_3,cl_voice_4) }
     private var playing = false
-
-    private val answerImg = arrayListOf<String>() //随机答案图片
-    private var currentImage = 0 //当前作答的题号:2,4,5
+    private val voiceList = arrayListOf<String>() //语音列表,随机排序
+    private var voiceIndex = -1 //点击播放的声音序号 0-3取值
 
     override fun onFirstVisibleToUser() {
         player.setOnAudioStatusUpdateListener(this)
@@ -47,7 +47,7 @@
                 super.handleMessage(msg)
                 when(msg.what){
                     PLAY_VOICE->{
-                        player.startPlayMusic(requireContext(),data!!.subjectList[group][voiceIndex].correct)
+                        player.startPlayMusic(requireContext(),voiceList[voiceIndex])
                     }
                     TO_NEXT->{
                         if (isAdded&&!playing){
@@ -58,26 +58,14 @@
             }
         }
         data?.apply {
-            val originList = subjectList[group]
-            iv_1.setImageURI(originList[0].img)
-            iv_2.setImageURI(originList[1].img)
-            iv_4.setImageURI(originList[3].img)
-            answerImg.clear()
-            answerImg.add(originList[2].img)
-            answerImg.add(originList[4].img)
-            answerImg.add(originList[5].img)
+            val imgs = subjectList[group]
+            iv_1.setImageURI(imgs[0].img)
+            iv_2.setImageURI(imgs[1].img)
+            iv_3.setImageURI(imgs[2].img)
+            iv_4.setImageURI(imgs[3].img)
+            voiceList.addAll(imgs.map { it.correct })
+            voiceList.shuffle()
         }
-        voiceViews.forEachIndexed { index, constraintLayout ->
-            if (index == 0)
-                constraintLayout.isEnabled = true
-            else{
-                if (index == 3||index == 5)
-                    constraintLayout.isEnabled = data!!.subjectList[group][index-1].completed
-                else
-                    constraintLayout.isEnabled = data!!.subjectList[group][index].listend
-            }
-        }
-        showVoiceEnable()
         initClick()
     }
 
@@ -85,178 +73,181 @@
         voiceViews.forEachIndexed { index, constraintLayout ->
             constraintLayout.clickDelay {
                 if (!playing){
-                    if (index!=0&&!data!!.subjectList[group][index-1].listend){
-                        myToast("请按顺序听语音")
-                        return@clickDelay
-                    }
                     voiceIndex = index
                     handler?.sendEmptyMessage(PLAY_VOICE)
+                    motion.transitionToEnd()
                 }
             }
         }
 
-        cl_answer_1.clickDelay {
-            if (currentImage == 0)
+        cl_1.clickDelay {
+            if (playing||voiceIndex == -1) //未播放或者正在播放,不可点击
                 return@clickDelay
-            val subject = data!!.subjectList[group][currentImage]
-            if (!subject.listend||subject.completed){
+            if (data!!.subjectList[group][0].completed) //已作答不可点击
                 return@clickDelay
-            }
-            act.totalCount++
-            if (answerImg[0] == subject.img){
-                act.rightCount++
-                data!!.subjectList[group][currentImage].completed = true
-                voiceViews[currentImage].callOnClick()
-                motion.transitionToEnd()
-            }else{
-                iv_error_1.visible()
-                iv_error_1.postDelayed({
-                    clearAnswerImg()
-                },3000)
-            }
-        }
-
-        cl_answer_2.clickDelay {
-            if (currentImage == 0)
-                return@clickDelay
-            val subject = data!!.subjectList[group][currentImage]
-            if (!subject.listend||subject.completed){
-                return@clickDelay
-            }
-            if (answerImg[1] == subject.img){
-                data!!.subjectList[group][currentImage].completed = true
-                voiceViews[currentImage].callOnClick()
-                motion.transitionToEnd()
-            }else{
-                iv_error_2.visible()
-                iv_error_2.postDelayed({
-                    clearAnswerImg()
-                },3000)
-            }
-        }
-
-        cl_answer_3.clickDelay {
-            if (currentImage == 0)
-                return@clickDelay
-            val subject = data!!.subjectList[group][currentImage]
-            if (!subject.listend||subject.completed){
-                return@clickDelay
-            }
-            if (answerImg[2] == subject.img){
-                data!!.subjectList[group][currentImage].completed = true
-                voiceViews[currentImage].callOnClick()
-                motion.transitionToEnd()
-            }else{
-                iv_error_3.visible()
-                iv_error_3.postDelayed({
-                    clearAnswerImg()
-                },3000)
-            }
-        }
-    }
-
-    private fun showVoiceEnable(){
-        voiceViews.forEachIndexed { index, constraintLayout ->
-            if (index == 0)
-                constraintLayout.isEnabled = true
-            else{
-                if (index == 3||index == 5)
-                    constraintLayout.isEnabled = data!!.subjectList[group][index-1].completed
-                else
-                    constraintLayout.isEnabled = data!!.subjectList[group][index-1].listend
-            }
-        }
-    }
-
-    private fun clearAnswerImg(){
-        iv_answer_1.setImageURI("")
-        iv_answer_2.setImageURI("")
-        iv_answer_3.setImageURI("")
-        iv_3.setImageURI("")
-        iv_5.setImageURI("")
-        iv_6.setImageURI("")
-        iv_full_1.gone()
-        iv_full_2.gone()
-        iv_full_3.gone()
-        iv_error_1.gone()
-        iv_error_2.gone()
-        iv_error_3.gone()
-        data!!.subjectList[group][currentImage].listend = false
-    }
-
-    private fun showAnswerImg(){
-        answerImg.shuffle()
-        iv_answer_1.setImageURI(answerImg[0])
-        iv_answer_2.setImageURI(answerImg[1])
-        iv_answer_3.setImageURI(answerImg[2])
-
-        iv_full_1.visible()
-        iv_full_2.visible()
-        iv_full_3.visible()
-
-        val voiceNow = data!!.subjectList[group][currentImage]
-        //设置动画飞行路径 3对3
-        val rightImageIndex = answerImg.indexOf(voiceNow.img)
-        var start = 0
-        var end = 0
-        when(rightImageIndex){
-            0->{
-                start = R.id.start_1
-                when(currentImage){
-                    2-> end = R.id.end_1_1
-                    4-> end = R.id.end_1_2
-                    5-> end = R.id.end_1_3
-                }
-            }
-            1->{
-                start = R.id.start_2
-                when(currentImage){
-                    2-> end = R.id.end_2_1
-                    4-> end = R.id.end_2_2
-                    5-> end = R.id.end_2_3
-                }
-            }
-            2->{
-                start = R.id.start_3
-                when(currentImage){
-                    2-> end = R.id.end_3_1
-                    4-> end = R.id.end_3_2
-                    5-> end = R.id.end_3_3
-                }
-            }
-        }
-        motion.progress = 0f
-        motion.setTransition(start,end)
-        motion.setTransitionListener(object : MotionLayout.TransitionListener{
-            override fun onTransitionStarted(p0: MotionLayout?, p1: Int, p2: Int) {
-                when(rightImageIndex){
+            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
+                var end = 0
+                when(voiceIndex){
                     0->{
-                        iv_full_1.gone()
+                        start = R.id.start_1
+                        end = R.id.end_1_1
                     }
                     1->{
-                        iv_full_2.gone()
+                        start = R.id.start_2
+                        end = R.id.end_2_1
                     }
                     2->{
-                        iv_full_3.gone()
+                        start = R.id.start_3
+                        end = R.id.end_3_1
+                    }
+                    3->{
+                        start = R.id.start_4
+                        end = R.id.end_4_1
                     }
                 }
+                motion.setTransition(start,end)
+                motion.transitionToEnd()
+            }else{
+                result_1.imageResource = R.mipmap.zhifushibai
+            }
+            showResultAnim(cl_1)
+        }
+
+        cl_2.clickDelay {
+            if (playing||voiceIndex == -1) //未播放或者正在播放,不可点击
+                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 ++
+                //执行飞行动画
+                var start = 0
+                var end = 0
+                when(voiceIndex){
+                    0->{
+                        start = R.id.start_1
+                        end = R.id.end_1_2
+                    }
+                    1->{
+                        start = R.id.start_2
+                        end = R.id.end_2_2
+                    }
+                    2->{
+                        start = R.id.start_3
+                        end = R.id.end_3_2
+                    }
+                    3->{
+                        start = R.id.start_4
+                        end = R.id.end_4_2
+                    }
+                }
+                motion.setTransition(start,end)
+                motion.transitionToEnd()
+            }else{
+                result_2.imageResource = R.mipmap.zhifushibai
+            }
+            showResultAnim(cl_2)
+        }
+
+        cl_3.clickDelay {
+            if (playing||voiceIndex == -1) //未播放或者正在播放,不可点击
+                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
+                act.rightCount ++
+                //执行飞行动画
+                var start = 0
+                var end = 0
+                when(voiceIndex){
+                    0->{
+                        start = R.id.start_1
+                        end = R.id.end_1_3
+                    }
+                    1->{
+                        start = R.id.start_2
+                        end = R.id.end_2_3
+                    }
+                    2->{
+                        start = R.id.start_3
+                        end = R.id.end_3_3
+                    }
+                    3->{
+                        start = R.id.start_4
+                        end = R.id.end_4_3
+                    }
+                }
+                motion.setTransition(start,end)
+                motion.transitionToEnd()
+            }else{
+                result_3.imageResource = R.mipmap.zhifushibai
+            }
+            showResultAnim(cl_3)
+        }
+
+        cl_4.clickDelay {
+            if (playing||voiceIndex == -1) //未播放或者正在播放,不可点击
+                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
+                act.rightCount ++
+                //执行飞行动画
+                var start = 0
+                var end = 0
+                when(voiceIndex){
+                    0->{
+                        start = R.id.start_1
+                        end = R.id.end_1_4
+                    }
+                    1->{
+                        start = R.id.start_2
+                        end = R.id.end_2_4
+                    }
+                    2->{
+                        start = R.id.start_3
+                        end = R.id.end_3_4
+                    }
+                    3->{
+                        start = R.id.start_4
+                        end = R.id.end_4_4
+                    }
+                }
+                motion.setTransition(start,end)
+                motion.transitionToEnd()
+            }else{
+                result_4.imageResource = R.mipmap.zhifushibai
+            }
+            showResultAnim(cl_4)
+        }
+    }
+
+    private fun showResultAnim(m:MotionLayout){
+        m.transitionToEnd()
+        m.setTransitionListener(object :MotionLayout.TransitionListener{
+            override fun onTransitionStarted(p0: MotionLayout?, p1: Int, p2: Int) {
             }
 
             override fun onTransitionChange(p0: MotionLayout?, p1: Int, p2: Int, p3: Float) {
             }
 
             override fun onTransitionCompleted(p0: MotionLayout?, p1: Int) {
-                when(currentImage){
-                    2->{
-                        iv_3.setImageURI(data!!.subjectList[group][2].img)
-                    }
-                    4->{
-                        iv_5.setImageURI(data!!.subjectList[group][4].img)
-                    }
-                    5->{
-                        iv_6.setImageURI(data!!.subjectList[group][5].img)
-                    }
-                }
+                m.progress = 0f
             }
 
             override fun onTransitionTrigger(p0: MotionLayout?, p1: Int, p2: Boolean, p3: Float) {
@@ -270,13 +261,11 @@
     fun recover(){
         Log.e(TAG,"回到上一题,恢复答题前的状态")
         motion.progress = 0f
-        clearAnswerImg()
-        currentImage = 0
         data!!.subjectList[group].forEach {
             it.completed = false
             it.listend = false
         }
-        showVoiceEnable()
+
     }
 
     companion object{
@@ -299,6 +288,8 @@
 
     override fun onStartPlay() {
         playing = true
+        val list = data!!.subjectList[group]
+        tv_name.text = list[list.map { it.correct }.indexOf(voiceList[voiceIndex])].name
         when(voiceIndex){
             0->{
                 iv1_1.gone()
@@ -320,16 +311,6 @@
                 iv1_4.gone()
                 iv2_4.gone()
                 iv_playing_4.visible()
-            }
-            4->{
-                iv1_5.gone()
-                iv2_5.gone()
-                iv_playing_5.visible()
-            }
-            5->{
-                iv1_6.gone()
-                iv2_6.gone()
-                iv_playing_6.visible()
             }
 
         }
@@ -354,38 +335,13 @@
                 iv1_3.visible()
                 iv2_3.visible()
                 iv_playing_3.gone()
-                if (!subject.completed){
-                    currentImage = 2
-                    showAnswerImg()
-                }
             }
             3->{
                 iv1_4.visible()
                 iv2_4.visible()
                 iv_playing_4.gone()
             }
-            4->{
-                iv1_5.visible()
-                iv2_5.visible()
-                iv_playing_5.gone()
-                if (!subject.completed){
-                    currentImage = 4
-                    showAnswerImg()
-                }
-            }
-            5->{
-                iv1_6.visible()
-                iv2_6.visible()
-                iv_playing_6.gone()
-                if (!subject.completed){
-                    currentImage = 5
-                    showAnswerImg()
-                }else{
-                    Log.e(TAG,"本题全部答对,3秒后进入下一图")
-                    handler?.sendEmptyMessageDelayed(TO_NEXT,3000)
-                }
-            }
+
         }
-        showVoiceEnable()
     }
 }
\ No newline at end of file
diff --git a/app/src/main/res/layout/fragment_match.xml b/app/src/main/res/layout/fragment_match.xml
index d786ca8..38685cb 100644
--- a/app/src/main/res/layout/fragment_match.xml
+++ b/app/src/main/res/layout/fragment_match.xml
@@ -4,7 +4,7 @@
     android:layout_width="match_parent"
     android:layout_height="match_parent"
     android:id="@+id/motion"
-    app:layoutDescription="@xml/scene_fragment_listen_voice">
+    app:layoutDescription="@xml/scene_fragment_match">
 
     <androidx.constraintlayout.widget.Guideline
         android:layout_width="wrap_content"
@@ -36,6 +36,16 @@
         android:id="@+id/line4"
         app:layout_constraintGuide_percent="0.8"
         android:orientation="vertical"/>
+    <TextView
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content"
+        android:gravity="center"
+        android:id="@+id/tv_name"
+        app:layout_constraintTop_toTopOf="parent"
+        android:layout_marginTop="70dp"
+        android:textSize="16sp"
+        android:textColor="@color/black"
+        android:textStyle="bold"/>
     <androidx.constraintlayout.motion.widget.MotionLayout
         android:id="@+id/cl_1"
         android:layout_width="0dp"
@@ -43,8 +53,9 @@
         android:padding="4dp"
         android:elevation="2dp"
         app:layout_constraintDimensionRatio="333:259"
-        android:layout_marginTop="96dp"
+        android:layout_marginTop="104dp"
         app:layout_constraintHorizontal_chainStyle="packed"
+        app:layout_constraintVertical_chainStyle="packed"
         android:background="@drawable/bg_white_8dp"
         app:layout_constraintTop_toTopOf="parent"
         app:layout_constraintEnd_toStartOf="@id/center"
@@ -108,8 +119,9 @@
         app:layoutDescription="@xml/fragment_listen_scene_result_3"
         app:layout_constraintStart_toStartOf="@id/cl_1"
         app:layout_constraintEnd_toEndOf="@id/cl_1"
-        android:background="@drawable/bg_white_8dp"
         app:layout_constraintTop_toBottomOf="@id/cl_1"
+        android:background="@drawable/bg_white_8dp"
+        android:layout_marginBottom="10dp"
         app:layout_constraintBottom_toBottomOf="parent">
         <View
             android:layout_width="match_parent"
@@ -168,10 +180,13 @@
         android:layout_height="52dp"
         app:layout_constraintTop_toTopOf="parent"
         android:elevation="2dp"
-        android:id="@+id/cl_voice"
+        android:id="@+id/cl_voice_1"
+        app:layout_constraintStart_toStartOf="@id/line1"
+        app:layout_constraintEnd_toEndOf="@id/line1"
+        android:layout_marginTop="15dp"
         android:background="@drawable/bg_blue_8dp">
         <ImageView
-            android:id="@+id/iv1"
+            android:id="@+id/iv1_1"
             android:layout_width="wrap_content"
             android:layout_height="wrap_content"
             android:src="@mipmap/yuyin"
@@ -180,7 +195,7 @@
             app:layout_constraintStart_toStartOf="parent"
             android:layout_marginStart="25dp"/>
         <ImageView
-            android:id="@+id/iv2"
+            android:id="@+id/iv2_1"
             android:layout_width="wrap_content"
             android:layout_height="wrap_content"
             android:src="@mipmap/play"
@@ -189,7 +204,124 @@
             app:layout_constraintEnd_toEndOf="parent"
             android:layout_marginEnd="23dp"/>
         <ImageView
-            android:id="@+id/iv_playing"
+            android:id="@+id/iv_playing_1"
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:visibility="gone"
+            android:src="@mipmap/bofangzhong"
+            app:layout_constraintTop_toTopOf="parent"
+            app:layout_constraintBottom_toBottomOf="parent"
+            app:layout_constraintEnd_toEndOf="parent"
+            app:layout_constraintStart_toStartOf="parent" />
+    </androidx.constraintlayout.widget.ConstraintLayout>
+    <androidx.constraintlayout.widget.ConstraintLayout
+        android:layout_width="159dp"
+        android:layout_height="52dp"
+        app:layout_constraintTop_toTopOf="parent"
+        android:elevation="2dp"
+        android:id="@+id/cl_voice_2"
+        app:layout_constraintStart_toStartOf="@id/line2"
+        app:layout_constraintEnd_toEndOf="@id/line2"
+        android:layout_marginTop="15dp"
+        android:background="@drawable/bg_blue_8dp">
+        <ImageView
+            android:id="@+id/iv1_2"
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:src="@mipmap/yuyin"
+            app:layout_constraintTop_toTopOf="parent"
+            app:layout_constraintBottom_toBottomOf="parent"
+            app:layout_constraintStart_toStartOf="parent"
+            android:layout_marginStart="25dp"/>
+        <ImageView
+            android:id="@+id/iv2_2"
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:src="@mipmap/play"
+            app:layout_constraintTop_toTopOf="parent"
+            app:layout_constraintBottom_toBottomOf="parent"
+            app:layout_constraintEnd_toEndOf="parent"
+            android:layout_marginEnd="23dp"/>
+        <ImageView
+            android:id="@+id/iv_playing_2"
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:visibility="gone"
+            android:src="@mipmap/bofangzhong"
+            app:layout_constraintTop_toTopOf="parent"
+            app:layout_constraintBottom_toBottomOf="parent"
+            app:layout_constraintEnd_toEndOf="parent"
+            app:layout_constraintStart_toStartOf="parent" />
+    </androidx.constraintlayout.widget.ConstraintLayout>
+    <androidx.constraintlayout.widget.ConstraintLayout
+        android:layout_width="159dp"
+        android:layout_height="52dp"
+        app:layout_constraintTop_toTopOf="parent"
+        android:elevation="2dp"
+        android:id="@+id/cl_voice_3"
+        app:layout_constraintStart_toStartOf="@id/line3"
+        app:layout_constraintEnd_toEndOf="@id/line3"
+        android:layout_marginTop="15dp"
+        android:background="@drawable/bg_blue_8dp">
+        <ImageView
+            android:id="@+id/iv1_3"
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:src="@mipmap/yuyin"
+            app:layout_constraintTop_toTopOf="parent"
+            app:layout_constraintBottom_toBottomOf="parent"
+            app:layout_constraintStart_toStartOf="parent"
+            android:layout_marginStart="25dp"/>
+        <ImageView
+            android:id="@+id/iv2_3"
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:src="@mipmap/play"
+            app:layout_constraintTop_toTopOf="parent"
+            app:layout_constraintBottom_toBottomOf="parent"
+            app:layout_constraintEnd_toEndOf="parent"
+            android:layout_marginEnd="23dp"/>
+        <ImageView
+            android:id="@+id/iv_playing_3"
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:visibility="gone"
+            android:src="@mipmap/bofangzhong"
+            app:layout_constraintTop_toTopOf="parent"
+            app:layout_constraintBottom_toBottomOf="parent"
+            app:layout_constraintEnd_toEndOf="parent"
+            app:layout_constraintStart_toStartOf="parent" />
+    </androidx.constraintlayout.widget.ConstraintLayout>
+    <androidx.constraintlayout.widget.ConstraintLayout
+        android:layout_width="159dp"
+        android:layout_height="52dp"
+        app:layout_constraintTop_toTopOf="parent"
+        android:elevation="2dp"
+        android:id="@+id/cl_voice_4"
+        app:layout_constraintStart_toStartOf="@id/line4"
+        app:layout_constraintEnd_toEndOf="@id/line4"
+        android:layout_marginTop="15dp"
+        android:background="@drawable/bg_blue_8dp">
+        <ImageView
+            android:id="@+id/iv1_4"
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:src="@mipmap/yuyin"
+            app:layout_constraintTop_toTopOf="parent"
+            app:layout_constraintBottom_toBottomOf="parent"
+            app:layout_constraintStart_toStartOf="parent"
+            android:layout_marginStart="25dp"/>
+        <ImageView
+            android:id="@+id/iv2_4"
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:src="@mipmap/play"
+            app:layout_constraintTop_toTopOf="parent"
+            app:layout_constraintBottom_toBottomOf="parent"
+            app:layout_constraintEnd_toEndOf="parent"
+            android:layout_marginEnd="23dp"/>
+        <ImageView
+            android:id="@+id/iv_playing_4"
             android:layout_width="wrap_content"
             android:layout_height="wrap_content"
             android:visibility="gone"
diff --git a/app/src/main/res/xml/scene_fragment_match.xml b/app/src/main/res/xml/scene_fragment_match.xml
new file mode 100644
index 0000000..b57c014
--- /dev/null
+++ b/app/src/main/res/xml/scene_fragment_match.xml
@@ -0,0 +1,283 @@
+<?xml version="1.0" encoding="utf-8"?>
+<MotionScene 
+    xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:motion="http://schemas.android.com/apk/res-auto">
+
+    <Transition
+        motion:constraintSetEnd="@+id/end"
+        motion:constraintSetStart="@id/start"
+        motion:duration="2000">
+       <KeyFrameSet>
+
+       </KeyFrameSet>
+
+    </Transition>
+
+    <ConstraintSet android:id="@+id/start">
+<!--        <Constraint android:id="@+id/cl_1"-->
+<!--            android:layout_marginTop="90dp"-->
+<!--            android:layout_width="0dp"-->
+<!--            android:layout_height="0dp"-->
+<!--            motion:layout_constraintEnd_toStartOf="@+id/center"-->
+<!--            android:layout_marginEnd="11dp"-->
+<!--            motion:layout_constraintDimensionRatio="333:259"-->
+<!--            android:layout_marginBottom="8dp"-->
+<!--            motion:layout_constraintBottom_toTopOf="@id/cl_3"-->
+<!--            motion:layout_constraintTop_toTopOf="parent"/>-->
+<!--        <Constraint android:id="@+id/cl_3"-->
+<!--            android:layout_marginTop="90dp"-->
+<!--            android:layout_width="0dp"-->
+<!--            motion:layout_constraintStart_toStartOf="@id/cl_1"-->
+<!--            motion:layout_constraintEnd_toEndOf="@id/cl_1"-->
+<!--            motion:layout_constraintTop_toBottomOf="@id/cl_1"-->
+<!--            android:layout_height="0dp"-->
+<!--            motion:layout_constraintBottom_toBottomOf="parent"-->
+<!--            android:layout_marginBottom="15dp"/>-->
+    </ConstraintSet>
+
+    <ConstraintSet android:id="@+id/end">
+<!--        <Constraint android:id="@+id/cl_1"-->
+<!--            android:layout_marginTop="103dp"-->
+<!--            android:layout_width="0dp"-->
+<!--            android:layout_height="0dp"-->
+<!--            motion:layout_constraintTop_toTopOf="parent"/>-->
+<!--        <Constraint android:id="@+id/cl_3"-->
+<!--            android:layout_marginTop="108dp"-->
+<!--            android:layout_width="0dp"-->
+<!--            android:layout_height="0dp"-->
+<!--            motion:layout_constraintBottom_toBottomOf="parent"-->
+<!--            android:layout_marginBottom="3dp"/>-->
+    </ConstraintSet>
+
+    <ConstraintSet android:id="@+id/start_1">
+        <Constraint android:id="@+id/cl_voice_1"
+            motion:layout_constraintStart_toStartOf="@+id/line1"
+            motion:layout_constraintEnd_toEndOf="@+id/line1"
+            motion:layout_constraintTop_toTopOf="parent"
+            android:layout_width="159dp"
+            android:layout_marginTop="15dp"
+            android:layout_height="52dp"/>
+    </ConstraintSet>
+
+    <ConstraintSet android:id="@+id/start_2">
+        <Constraint android:id="@+id/cl_voice_2"
+            motion:layout_constraintStart_toStartOf="@+id/line2"
+            motion:layout_constraintEnd_toEndOf="@+id/line2"
+            motion:layout_constraintTop_toTopOf="parent"
+            android:layout_width="159dp"
+            android:layout_marginTop="15dp"
+            android:layout_height="52dp"/>
+    </ConstraintSet>
+
+    <ConstraintSet android:id="@+id/start_3">
+        <Constraint android:id="@+id/cl_voice_3"
+            motion:layout_constraintStart_toStartOf="@+id/line3"
+            motion:layout_constraintEnd_toEndOf="@+id/line3"
+            motion:layout_constraintTop_toTopOf="parent"
+            android:layout_width="159dp"
+            android:layout_marginTop="15dp"
+            android:layout_height="52dp"/>
+    </ConstraintSet>
+
+    <ConstraintSet android:id="@+id/start_4">
+        <Constraint android:id="@+id/cl_voice_4"
+            motion:layout_constraintStart_toStartOf="@+id/line4"
+            motion:layout_constraintEnd_toEndOf="@+id/line4"
+            motion:layout_constraintTop_toTopOf="parent"
+            android:layout_width="159dp"
+            android:layout_marginTop="15dp"
+            android:layout_height="52dp"/>
+    </ConstraintSet>
+
+    <ConstraintSet android:id="@+id/end_1_1">
+        <Constraint android:id="@+id/cl_voice_1"
+            motion:layout_constraintStart_toStartOf="@+id/cl_1"
+            motion:layout_constraintEnd_toEndOf="@+id/cl_1"
+            motion:layout_constraintTop_toTopOf="@+id/cl_1"
+            android:layout_marginTop="4dp"
+            android:layout_marginStart="4dp"
+            android:layout_marginEnd="4dp"
+            android:layout_width="0dp"
+            android:layout_height="40dp"/>
+    </ConstraintSet>
+
+    <ConstraintSet android:id="@+id/end_1_2">
+        <Constraint android:id="@+id/cl_voice_1"
+            motion:layout_constraintStart_toStartOf="@+id/cl_2"
+            motion:layout_constraintEnd_toEndOf="@+id/cl_2"
+            motion:layout_constraintTop_toTopOf="@+id/cl_2"
+            android:layout_marginTop="4dp"
+            android:layout_marginStart="4dp"
+            android:layout_marginEnd="4dp"
+            android:layout_width="0dp"
+            android:layout_height="40dp"/>
+    </ConstraintSet>
+
+    <ConstraintSet android:id="@+id/end_1_3">
+        <Constraint android:id="@+id/cl_voice_1"
+            motion:layout_constraintStart_toStartOf="@+id/cl_3"
+            motion:layout_constraintEnd_toEndOf="@+id/cl_3"
+            motion:layout_constraintTop_toTopOf="@+id/cl_3"
+            android:layout_marginTop="4dp"
+            android:layout_marginStart="4dp"
+            android:layout_marginEnd="4dp"
+            android:layout_width="0dp"
+            android:layout_height="40dp"/>
+    </ConstraintSet>
+
+    <ConstraintSet android:id="@+id/end_1_4">
+        <Constraint android:id="@+id/cl_voice_1"
+            motion:layout_constraintStart_toStartOf="@+id/cl_4"
+            motion:layout_constraintEnd_toEndOf="@+id/cl_4"
+            motion:layout_constraintTop_toTopOf="@+id/cl_4"
+            android:layout_marginTop="4dp"
+            android:layout_marginStart="4dp"
+            android:layout_marginEnd="4dp"
+            android:layout_width="0dp"
+            android:layout_height="40dp"/>
+    </ConstraintSet>
+
+    <ConstraintSet android:id="@+id/end_2_1">
+        <Constraint android:id="@+id/cl_voice_2"
+            motion:layout_constraintStart_toStartOf="@+id/cl_1"
+            motion:layout_constraintEnd_toEndOf="@+id/cl_1"
+            motion:layout_constraintTop_toTopOf="@+id/cl_1"
+            android:layout_marginTop="4dp"
+            android:layout_marginStart="4dp"
+            android:layout_marginEnd="4dp"
+            android:layout_width="0dp"
+            android:layout_height="40dp"/>
+    </ConstraintSet>
+
+    <ConstraintSet android:id="@+id/end_2_2">
+        <Constraint android:id="@+id/cl_voice_2"
+            motion:layout_constraintStart_toStartOf="@+id/cl_2"
+            motion:layout_constraintEnd_toEndOf="@+id/cl_2"
+            motion:layout_constraintTop_toTopOf="@+id/cl_2"
+            android:layout_marginTop="4dp"
+            android:layout_marginStart="4dp"
+            android:layout_marginEnd="4dp"
+            android:layout_width="0dp"
+            android:layout_height="40dp"/>
+    </ConstraintSet>
+
+    <ConstraintSet android:id="@+id/end_2_3">
+        <Constraint android:id="@+id/cl_voice_2"
+            motion:layout_constraintStart_toStartOf="@+id/cl_3"
+            motion:layout_constraintEnd_toEndOf="@+id/cl_3"
+            motion:layout_constraintTop_toTopOf="@+id/cl_3"
+            android:layout_marginTop="4dp"
+            android:layout_marginStart="4dp"
+            android:layout_marginEnd="4dp"
+            android:layout_width="0dp"
+            android:layout_height="40dp"/>
+    </ConstraintSet>
+
+    <ConstraintSet android:id="@+id/end_2_4">
+        <Constraint android:id="@+id/cl_voice_2"
+            motion:layout_constraintStart_toStartOf="@+id/cl_4"
+            motion:layout_constraintEnd_toEndOf="@+id/cl_4"
+            motion:layout_constraintTop_toTopOf="@+id/cl_4"
+            android:layout_marginTop="4dp"
+            android:layout_marginStart="4dp"
+            android:layout_marginEnd="4dp"
+            android:layout_width="0dp"
+            android:layout_height="40dp"/>
+    </ConstraintSet>
+
+    <ConstraintSet android:id="@+id/end_3_1">
+        <Constraint android:id="@+id/cl_voice_3"
+            motion:layout_constraintStart_toStartOf="@+id/cl_1"
+            motion:layout_constraintEnd_toEndOf="@+id/cl_1"
+            motion:layout_constraintTop_toTopOf="@+id/cl_1"
+            android:layout_marginTop="4dp"
+            android:layout_marginStart="4dp"
+            android:layout_marginEnd="4dp"
+            android:layout_width="0dp"
+            android:layout_height="40dp"/>
+    </ConstraintSet>
+
+    <ConstraintSet android:id="@+id/end_3_2">
+        <Constraint android:id="@+id/cl_voice_3"
+            motion:layout_constraintStart_toStartOf="@+id/cl_2"
+            motion:layout_constraintEnd_toEndOf="@+id/cl_2"
+            motion:layout_constraintTop_toTopOf="@+id/cl_2"
+            android:layout_marginTop="4dp"
+            android:layout_marginStart="4dp"
+            android:layout_marginEnd="4dp"
+            android:layout_width="0dp"
+            android:layout_height="40dp"/>
+    </ConstraintSet>
+
+    <ConstraintSet android:id="@+id/end_3_3">
+        <Constraint android:id="@+id/cl_voice_3"
+            motion:layout_constraintStart_toStartOf="@+id/cl_3"
+            motion:layout_constraintEnd_toEndOf="@+id/cl_3"
+            motion:layout_constraintTop_toTopOf="@+id/cl_3"
+            android:layout_marginTop="4dp"
+            android:layout_marginStart="4dp"
+            android:layout_marginEnd="4dp"
+            android:layout_width="0dp"
+            android:layout_height="40dp"/>
+    </ConstraintSet>
+
+    <ConstraintSet android:id="@+id/end_3_4">
+        <Constraint android:id="@+id/cl_voice_3"
+            motion:layout_constraintStart_toStartOf="@+id/cl_4"
+            motion:layout_constraintEnd_toEndOf="@+id/cl_4"
+            motion:layout_constraintTop_toTopOf="@+id/cl_4"
+            android:layout_marginTop="4dp"
+            android:layout_marginStart="4dp"
+            android:layout_marginEnd="4dp"
+            android:layout_width="0dp"
+            android:layout_height="40dp"/>
+    </ConstraintSet>
+
+    <ConstraintSet android:id="@+id/end_4_1">
+        <Constraint android:id="@+id/cl_voice_4"
+            motion:layout_constraintStart_toStartOf="@+id/cl_1"
+            motion:layout_constraintEnd_toEndOf="@+id/cl_1"
+            motion:layout_constraintTop_toTopOf="@+id/cl_1"
+            android:layout_marginTop="4dp"
+            android:layout_marginStart="4dp"
+            android:layout_marginEnd="4dp"
+            android:layout_width="0dp"
+            android:layout_height="40dp"/>
+    </ConstraintSet>
+
+    <ConstraintSet android:id="@+id/end_4_2">
+        <Constraint android:id="@+id/cl_voice_4"
+            motion:layout_constraintStart_toStartOf="@+id/cl_2"
+            motion:layout_constraintEnd_toEndOf="@+id/cl_2"
+            motion:layout_constraintTop_toTopOf="@+id/cl_2"
+            android:layout_marginTop="4dp"
+            android:layout_marginStart="4dp"
+            android:layout_marginEnd="4dp"
+            android:layout_width="0dp"
+            android:layout_height="40dp"/>
+    </ConstraintSet>
+
+    <ConstraintSet android:id="@+id/end_4_3">
+        <Constraint android:id="@+id/cl_voice_4"
+            motion:layout_constraintStart_toStartOf="@+id/cl_3"
+            motion:layout_constraintEnd_toEndOf="@+id/cl_3"
+            motion:layout_constraintTop_toTopOf="@+id/cl_3"
+            android:layout_marginTop="4dp"
+            android:layout_marginStart="4dp"
+            android:layout_marginEnd="4dp"
+            android:layout_width="0dp"
+            android:layout_height="40dp"/>
+    </ConstraintSet>
+
+    <ConstraintSet android:id="@+id/end_4_4">
+        <Constraint android:id="@+id/cl_voice_4"
+            motion:layout_constraintStart_toStartOf="@+id/cl_4"
+            motion:layout_constraintEnd_toEndOf="@+id/cl_4"
+            motion:layout_constraintTop_toTopOf="@+id/cl_4"
+            android:layout_marginTop="4dp"
+            android:layout_marginStart="4dp"
+            android:layout_marginEnd="4dp"
+            android:layout_width="0dp"
+            android:layout_height="40dp"/>
+    </ConstraintSet>
+</MotionScene>
\ No newline at end of file

--
Gitblit v1.7.1