From 1f45a54dc8e149548d3a61d1228741627aa4f23e Mon Sep 17 00:00:00 2001
From: lmw <125975490@qq.com>
Date: 星期二, 18 六月 2024 23:05:42 +0800
Subject: [PATCH] save

---
 app/src/main/res/layout/dialog_diff.xml                                  |  115 +
 app/src/main/res/mipmap-xxhdpi/ic_launcher.png                           |    0 
 app/src/main/res/xml/activity_memory_scene.xml                           |   19 
 app/src/main/java/com/dollearn/student/network/entity/ReqFinishStory.kt  |    7 
 app/src/main/java/com/dollearn/student/network/entity/StoryBean.kt       |   31 
 app/src/main/res/layout/item_game_1.xml                                  |   90 +
 app/src/main/res/xml/scene_fragment_look.xml                             |   78 +
 app/src/main/java/com/dollearn/student/dialog/DifficultyDialog.kt        |   55 
 app/src/main/java/com/dollearn/student/network/Apis.kt                   |   10 
 app/src/main/java/com/dollearn/student/dialog/CountdownDialog.kt         |   58 
 app/src/main/res/layout/activity_super_listen.xml                        |  110 +
 app/src/main/res/layout/dialog_tip.xml                                   |    4 
 app/src/main/java/com/dollearn/student/network/entity/MemoryBean.kt      |   50 
 app/src/main/java/com/dollearn/student/ui/home/LookImgFragment.kt        |  240 +++
 app/src/main/res/layout/fragmetn_remember.xml                            |   70 +
 app/src/main/java/com/dollearn/student/ui/home/QAActivity.kt             |  151 ++
 app/src/main/res/mipmap-xxhdpi/bg_card_back.png                          |    0 
 app/src/main/java/com/dollearn/student/ui/home/WeekendFragment.kt        |   29 
 app/src/main/res/mipmap-xxhdpi/voice_question.png                        |    0 
 app/src/main/java/com/dollearn/student/ui/home/ListenStoryActivity.kt    |  150 ++
 app/src/main/java/com/dollearn/student/ui/home/ResultActivity.kt         |   35 
 app/src/main/java/com/dollearn/student/ui/home/adapter/CardAdapter.kt    |   51 
 app/src/main/java/com/dollearn/student/ui/home/MemoryActivity.kt         |   50 
 app/src/main/res/layout/activity_finish_remember.xml                     |   46 
 app/src/main/java/com/dollearn/student/ui/home/RememberFinishActivity.kt |   23 
 app/src/main/java/com/dollearn/student/ui/home/MatchFragment.kt          |  226 +++
 app/src/main/java/com/dollearn/student/network/entity/GoodsOrder.kt      |    2 
 app/src/main/res/layout/activity_memory.xml                              |   58 
 app/src/main/res/xml/item_game_1_scene.xml                               |   63 
 app/src/main/res/layout/fragmetn_look_img.xml                            |  300 ++++
 app/src/main/res/layout/dialog_rule.xml                                  |    4 
 app/src/main/java/com/dollearn/student/ui/home/DailyFragment.kt          |    4 
 app/src/main/java/com/dollearn/student/network/HttpManager.kt            |   49 
 app/src/main/res/layout/dialog_countdown.xml                             |   75 +
 app/src/main/res/drawable/bg_yellow_circle.xml                           |    5 
 app/src/main/res/layout/fragment_q_a.xml                                 |  574 ++++++++
 app/src/main/res/mipmap-xxhdpi/voice_answer.png                          |    0 
 app/src/main/java/com/dollearn/student/ui/shop/ExchangeActivity.kt       |    6 
 app/src/main/res/layout/activity_listen_stroy.xml                        |   75 +
 app/src/main/java/com/dollearn/student/network/entity/GoodsDetail.kt     |    1 
 app/src/main/java/com/dollearn/student/network/entity/ReqFinishGame.kt   |    9 
 app/src/main/AndroidManifest.xml                                         |   22 
 app/src/main/java/com/dollearn/student/ui/home/LookImgActivity.kt        |  145 ++
 app/src/main/java/com/dollearn/student/utils/ViewAnimUtils.java          |   47 
 app/src/main/java/com/dollearn/student/network/entity/SubjectBean.kt     |    2 
 app/src/main/java/com/dollearn/student/ui/home/adapter/GameAdapter.kt    |   22 
 app/src/main/java/com/dollearn/student/ui/home/ChooseVoiceFragment.kt    |    1 
 app/src/main/res/layout/item_card.xml                                    |   76 +
 app/src/main/res/layout/fragment_match.xml                               |  269 +++
 app/src/main/java/com/dollearn/student/network/ApiService.kt             |   18 
 app/src/main/java/com/dollearn/student/network/entity/GameBean.kt        |   27 
 app/src/main/java/com/dollearn/student/ui/home/QAFragment.kt             |  284 ++++
 app/src/main/java/com/dollearn/student/ui/home/RememberFragment.kt       |  106 +
 app/src/main/res/layout/activity_result.xml                              |   16 
 app/src/main/java/com/dollearn/student/ui/home/SuperListenActivity.kt    |  210 +++
 55 files changed, 4,113 insertions(+), 55 deletions(-)

diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 1dd622a..563c930 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -47,11 +47,11 @@
             android:launchMode="singleTask" />
         <activity android:name=".ui.SplashActivity"
             android:screenOrientation="landscape">
-<!--            <intent-filter>-->
-<!--                <action android:name="android.intent.action.MAIN" />-->
+            <intent-filter>
+                <action android:name="android.intent.action.MAIN" />
 
-<!--                <category android:name="android.intent.category.LAUNCHER" />-->
-<!--            </intent-filter>-->
+                <category android:name="android.intent.category.LAUNCHER" />
+            </intent-filter>
         </activity>
         <activity
             android:name=".wxapi.WXEntryActivity"
@@ -233,11 +233,11 @@
         <activity android:name=".ui.worldcup.RefereeWorldListActivity" android:label="社区世界杯"/>
         <activity android:name=".ui.worldcup.StartWorldActivity" />
         <activity android:name=".ui.home.WeekSelectActivity" android:label="第一年学习周目选择">
-            <intent-filter>
-                <action android:name="android.intent.action.MAIN" />
+<!--            <intent-filter>-->
+<!--                <action android:name="android.intent.action.MAIN" />-->
 
-                <category android:name="android.intent.category.LAUNCHER" />
-            </intent-filter>
+<!--                <category android:name="android.intent.category.LAUNCHER" />-->
+<!--            </intent-filter>-->
         </activity>
         <activity android:name=".ui.home.ScheduleActivity" />
         <activity android:name=".ui.shop.ExchangeActivity" android:label="立即兑换"/>
@@ -249,7 +249,13 @@
         <activity android:name=".ui.home.ListenActivity" android:label="自主学习1-听音选图" android:launchMode="singleTask"/>
         <activity android:name=".ui.home.ChooseVoiceActivity" android:label="自主学习2-看图选音" android:launchMode="singleTask"/>
         <activity android:name=".ui.home.IncludeActivity" android:label="自主学习3-归纳排除" android:launchMode="singleTask"/>
+        <activity android:name=".ui.home.QAActivity" android:label="自主学习4-有问有答" android:launchMode="singleTask"/>
         <activity android:name=".ui.home.ResultActivity" />
+        <activity android:name=".ui.home.LookImgActivity" android:label="自主学故事1-看图配音" android:launchMode="singleTask"/>
+        <activity android:name=".ui.home.RememberFinishActivity" android:label="自主故事2—框架记忆"/>
+        <activity android:name=".ui.home.ListenStoryActivity" android:label="自主故事2—框架记忆" />
+        <activity android:name=".ui.home.MemoryActivity"  android:label="自主游戏1—超级记忆" />
+        <activity android:name=".ui.home.SuperListenActivity"  android:label="自主游戏1—超级听力" />
 
         <meta-data
             android:name="com.amap.api.v2.apikey"
diff --git a/app/src/main/java/com/dollearn/student/dialog/CountdownDialog.kt b/app/src/main/java/com/dollearn/student/dialog/CountdownDialog.kt
new file mode 100644
index 0000000..a61cd16
--- /dev/null
+++ b/app/src/main/java/com/dollearn/student/dialog/CountdownDialog.kt
@@ -0,0 +1,58 @@
+package com.dollearn.student.dialog
+
+import android.content.DialogInterface
+import android.os.Bundle
+import android.os.CountDownTimer
+import android.view.Gravity
+import android.view.LayoutInflater
+import android.view.View
+import android.view.ViewGroup
+import androidx.fragment.app.DialogFragment
+import cn.sinata.xldutils.utils.screenWidth
+import com.dollearn.student.R
+import com.dollearn.student.utils.interfaces.StringCallback
+import kotlinx.android.synthetic.main.dialog_countdown.*
+import org.jetbrains.anko.wrapContent
+
+class CountdownDialog: DialogFragment() {
+    override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? =
+        inflater.inflate(R.layout.dialog_countdown,container,false)
+
+    override fun onCreate(savedInstanceState: Bundle?) {
+        super.onCreate(savedInstanceState)
+        setStyle(STYLE_NO_FRAME, R.style.FadeDialog)
+    }
+
+    private var countDownTimer:CountDownTimer? = null
+    var callback:StringCallback? = null
+
+    override fun onActivityCreated(savedInstanceState: Bundle?) {
+        super.onActivityCreated(savedInstanceState)
+        dialog?.window?.setLayout((screenWidth()*0.45).toInt(), wrapContent)
+        dialog?.window?.setGravity(Gravity.CENTER)
+        dialog?.setCanceledOnTouchOutside(false)
+    }
+
+    override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
+        super.onViewCreated(view, savedInstanceState)
+        countDownTimer = object :CountDownTimer(5000,1000){
+            override fun onTick(millisUntilFinished: Long) {
+                tv_timer.text = (millisUntilFinished/1000+1).toString()
+            }
+
+            override fun onFinish() {
+                dismissAllowingStateLoss()
+            }
+        }.start()
+
+        tv_ok.setOnClickListener {
+            dismissAllowingStateLoss()
+        }
+    }
+
+    override fun onDismiss(dialog: DialogInterface) {
+        super.onDismiss(dialog)
+        countDownTimer?.cancel()
+        callback?.onResult("")
+    }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/dollearn/student/dialog/DifficultyDialog.kt b/app/src/main/java/com/dollearn/student/dialog/DifficultyDialog.kt
new file mode 100644
index 0000000..c0e7b19
--- /dev/null
+++ b/app/src/main/java/com/dollearn/student/dialog/DifficultyDialog.kt
@@ -0,0 +1,55 @@
+package com.dollearn.student.dialog
+
+import android.os.Bundle
+import android.view.Gravity
+import android.view.LayoutInflater
+import android.view.View
+import android.view.ViewGroup
+import androidx.fragment.app.DialogFragment
+import cn.sinata.xldutils.utils.screenWidth
+import com.dollearn.student.R
+import kotlinx.android.synthetic.main.dialog_diff.*
+import org.jetbrains.anko.wrapContent
+
+class DifficultyDialog: DialogFragment() {
+    override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? =
+        inflater.inflate(R.layout.dialog_diff,container,false)
+
+    override fun onCreate(savedInstanceState: Bundle?) {
+        super.onCreate(savedInstanceState)
+        setStyle(STYLE_NO_FRAME, R.style.FadeDialog)
+    }
+
+    override fun onActivityCreated(savedInstanceState: Bundle?) {
+        super.onActivityCreated(savedInstanceState)
+        dialog?.window?.setLayout((screenWidth()*0.45).toInt(), wrapContent)
+        dialog?.window?.setGravity(Gravity.CENTER)
+        dialog?.setCanceledOnTouchOutside(false)
+    }
+
+
+
+    override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
+        super.onViewCreated(view, savedInstanceState)
+        tv_cancel.setOnClickListener {
+            callback?.onCancel()
+            dismiss()
+        }
+
+        tv_ok.setOnClickListener {
+            callback?.onOk(if (rb_0.isChecked) 0 else if (rb_1.isChecked) 1 else 2)
+        }
+    }
+
+
+    interface OnClickCallback{
+        fun onOk(d:Int)
+        fun onCancel()
+    }
+
+    private var callback:OnClickCallback? = null
+
+    fun setCallback(callback:OnClickCallback){
+        this.callback = callback
+    }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/dollearn/student/network/ApiService.kt b/app/src/main/java/com/dollearn/student/network/ApiService.kt
index 8fc9673..1c688ac 100644
--- a/app/src/main/java/com/dollearn/student/network/ApiService.kt
+++ b/app/src/main/java/com/dollearn/student/network/ApiService.kt
@@ -654,6 +654,12 @@
     @POST(Apis.completeLearning)
     fun completeLearning(@Body body: String): Flowable<ResultData<Any>>
 
+    @POST(Apis.completeStory)
+    fun completeStory(@Body body: String): Flowable<ResultData<Any>>
+
+    @POST(Apis.gameAchievement)
+    fun gameAchievement(@Body body: String): Flowable<ResultData<Any>>
+
     @GET(Apis.teamSchedule)
     fun teamSchedule(@Query("day") day:Int,@Query("type") type:Int,@Query("week") week:Int): Flowable<ResultData<ProgressBean>>
 
@@ -699,6 +705,18 @@
     @GET(Apis.pictureMateVoice)
     fun pictureMateVoice(@Query("day")day:Int,@Query("quarter")quarter:Int,@Query("week")week:Int): Flowable<ResultData<SubjectBean>>
 
+    @GET(Apis.lookPictureDbu)
+    fun lookPictureDbu(@Query("quarter")quarter:Int,@Query("week")week:Int): Flowable<ResultData<StoryBean>>
+
+    @GET(Apis.gameHearing)
+    fun gameHearing(@Query("quarter")quarter:Int,@Query("week")week:Int,@Query("difficulty")difficulty:Int): Flowable<ResultData<GameBean>>
+
+    @GET(Apis.gameMemory)
+    fun gameMemory(@Query("quarter")quarter:Int,@Query("week")week:Int): Flowable<ResultData<MemoryBean>>
+
+    @GET(Apis.frameworkMemory)
+    fun frameworkMemory(@Query("quarter")quarter:Int,@Query("week")week:Int): Flowable<ResultData<StoryBean>>
+
     @GET(Apis.redeemNow)
     fun redeemNow(@Query("goodId")goodId:String): Flowable<ResultData<GoodsOrder>>
 
diff --git a/app/src/main/java/com/dollearn/student/network/Apis.kt b/app/src/main/java/com/dollearn/student/network/Apis.kt
index c1d4b13..57f9b32 100644
--- a/app/src/main/java/com/dollearn/student/network/Apis.kt
+++ b/app/src/main/java/com/dollearn/student/network/Apis.kt
@@ -47,14 +47,12 @@
     const val weekList = "study/base/study/weekList"
     const val studySchedule = "study/base/study/studySchedule"
 
-
     const val queryBanner = "other/base/banner/queryBannerList"
     const val querySearchCourseList = "api/app/course/querySearchCourseList"
     const val addStudent = "account/api/startCource/addData"
     const val commitEditStu = "account/api/startCource/commitEditStu"
     const val listOfStu = "account/api/startCource/listOfStu"
     const val queryAvailableCouponList = "activity/api/coupon/queryAvailableCouponList"
-
 
     /**
      * 学习
@@ -68,6 +66,14 @@
     const val teamSchedule = "study/base/study/teamSchedule"
     const val completeLearning = "study/base/study/completeLearning"
 
+    const val lookPictureDbu = "study/base/study/lookPictureDbu"
+    const val frameworkMemory = "study/base/study/frameworkMemory"
+    const val completeStory = "study/base/study/completeStory"
+
+    const val gameHearing = "study/base/study/gameHearing"
+    const val gameMemory = "study/base/study/gameMemory"
+    const val gameAchievement = "study/base/study/gameAchievement"
+
 
     /**
      * 商城
diff --git a/app/src/main/java/com/dollearn/student/network/HttpManager.kt b/app/src/main/java/com/dollearn/student/network/HttpManager.kt
index 317073b..eb8af44 100644
--- a/app/src/main/java/com/dollearn/student/network/HttpManager.kt
+++ b/app/src/main/java/com/dollearn/student/network/HttpManager.kt
@@ -793,6 +793,20 @@
     }
 
     /**
+     * 完成学习
+     */
+    fun completeStory(rate: Int,type: Int,storyId:String): Flowable<ResultData<Any>> {
+        return request().completeStory(Gson().toJson(ReqFinishStory(rate,storyId, type)))
+    }
+
+    /**
+     * 完成游戏
+     */
+    fun gameAchievement(rate: Int,difficulty: Int,gameId:String,gameName:String,useTime:Int): Flowable<ResultData<Any>> {
+        return request().gameAchievement(Gson().toJson(ReqFinishGame(rate,difficulty,gameId,gameName, useTime)))
+    }
+
+    /**
      * 回复进度
      */
     fun teamSchedule(day: Int,week: Int,type: Int): Flowable<ResultData<ProgressBean>> {
@@ -985,6 +999,41 @@
     }
 
     /**
+     * 看图配音
+     */
+    fun lookPictureDbu(season: Int,week: Int): Flowable<ResultData<StoryBean>> {
+        return request().lookPictureDbu(season,week)
+    }
+
+    /**
+     * 超级听力
+     */
+    fun gameHearing(season: Int,week: Int,difficulty:Int): Flowable<ResultData<GameBean>> {
+        return request().gameHearing(season,week,difficulty)
+    }
+
+    /**
+     * 记忆
+     */
+    fun gameMemory(season: Int,week: Int): Flowable<ResultData<MemoryBean>> {
+        return request().gameMemory(season,week)
+    }
+
+    /**
+     * 记忆
+     */
+    fun frameworkMemory(season: Int,week: Int): Flowable<ResultData<StoryBean>> {
+        return request().frameworkMemory(season,week)
+    }
+
+    /**
+     * 又问又答
+     */
+    fun questionsAndAnswers(season: Int,week: Int,day: Int): Flowable<ResultData<SubjectBean>> {
+        return request().questionsAndAnswers(day,season,week)
+    }
+
+    /**
      * 立即兑换
      */
     fun redeemNow(id:String): Flowable<ResultData<GoodsOrder>> {
diff --git a/app/src/main/java/com/dollearn/student/network/entity/GameBean.kt b/app/src/main/java/com/dollearn/student/network/entity/GameBean.kt
index 3d6751e..bddb76b 100644
--- a/app/src/main/java/com/dollearn/student/network/entity/GameBean.kt
+++ b/app/src/main/java/com/dollearn/student/network/entity/GameBean.kt
@@ -1,15 +1,18 @@
 package com.dollearn.student.network.entity
 
 data class GameBean(
-    val cash: Double,
-    val gameId: Int,
-    val id: Int,
-    val img: String,
-    val integral: Int,
-    val gameType: Int, //游戏类型(1=普通游戏,2=世界杯)
-    val name: String,
-    val video: String?,
-    val intro: String?,
-    val otherId: Int,
-    val playCoin: Double
-)
\ No newline at end of file
+    val subjectList: List<Subject>,
+    val data:GameBeanData
+)
+
+data class GameBeanData(
+    val answerCount: Int,
+    val answerIntegral: Int,
+    val answerTime: Int,
+    val count: Int,
+    val id: String,
+    val integral: String,
+    val studyId: Int,
+    val time: String,
+    val week: Int
+)
diff --git a/app/src/main/java/com/dollearn/student/network/entity/GoodsDetail.kt b/app/src/main/java/com/dollearn/student/network/entity/GoodsDetail.kt
index 7592bba..57fb57f 100644
--- a/app/src/main/java/com/dollearn/student/network/entity/GoodsDetail.kt
+++ b/app/src/main/java/com/dollearn/student/network/entity/GoodsDetail.kt
@@ -26,6 +26,5 @@
     val provinceCode: String,
     val recipient: String,
     val recipientPhone: String,
-    val updateBy: String,
     val updateTime: String
 ):Parcelable
\ No newline at end of file
diff --git a/app/src/main/java/com/dollearn/student/network/entity/GoodsOrder.kt b/app/src/main/java/com/dollearn/student/network/entity/GoodsOrder.kt
index 7e6b129..841d1da 100644
--- a/app/src/main/java/com/dollearn/student/network/entity/GoodsOrder.kt
+++ b/app/src/main/java/com/dollearn/student/network/entity/GoodsOrder.kt
@@ -9,5 +9,5 @@
     val good: Goods,
     val goodTypes: List<GoodsType>?,
     val orderNumber: String,
-    val recipient: Recipient
+    val recipient: Recipient?
 ):Parcelable
diff --git a/app/src/main/java/com/dollearn/student/network/entity/MemoryBean.kt b/app/src/main/java/com/dollearn/student/network/entity/MemoryBean.kt
new file mode 100644
index 0000000..1cb1022
--- /dev/null
+++ b/app/src/main/java/com/dollearn/student/network/entity/MemoryBean.kt
@@ -0,0 +1,50 @@
+package com.dollearn.student.network.entity
+
+import android.os.Parcelable
+import kotlinx.android.parcel.Parcelize
+
+@Parcelize
+data class MemoryBean(
+    val `data`: MemoryData,
+    val photoList: List<Photo>,
+    val voiceList: List<Voice>
+):Parcelable
+
+@Parcelize
+data class MemoryData(
+    val answerCount: Int,
+    val answerIntegral: Int,
+    val answerRate: String,
+    val answerTime: Int,
+    val count: Int,
+    val createBy: String,
+    val createTime: String,
+    val disabled: Boolean,
+    val id: Int,
+    val integral: String,
+    val rate: String,
+    val studyId: Int,
+    val time: String,
+    val updateBy: String,
+    val updateTime: String,
+    val week: Int
+):Parcelable
+
+@Parcelize
+data class Photo(
+    val id: Int,
+    val photo: String
+):Parcelable
+
+@Parcelize
+data class Voice(
+    val id: Int,
+    val voice: String
+):Parcelable
+
+data class Card(
+    val id: Int,
+    val type: Int, //1:图片 2:音频
+    val url: String,
+    var isBack:Boolean = true
+)
\ No newline at end of file
diff --git a/app/src/main/java/com/dollearn/student/network/entity/ReqFinishGame.kt b/app/src/main/java/com/dollearn/student/network/entity/ReqFinishGame.kt
new file mode 100644
index 0000000..495cb34
--- /dev/null
+++ b/app/src/main/java/com/dollearn/student/network/entity/ReqFinishGame.kt
@@ -0,0 +1,9 @@
+package com.dollearn.student.network.entity
+
+data class ReqFinishGame(
+    val accuracy: Int,
+    val difficulty: Int,
+    val gameId: String,
+    val gameName: String,
+    val useTime: Int
+)
\ No newline at end of file
diff --git a/app/src/main/java/com/dollearn/student/network/entity/ReqFinishStory.kt b/app/src/main/java/com/dollearn/student/network/entity/ReqFinishStory.kt
new file mode 100644
index 0000000..0715b41
--- /dev/null
+++ b/app/src/main/java/com/dollearn/student/network/entity/ReqFinishStory.kt
@@ -0,0 +1,7 @@
+package com.dollearn.student.network.entity
+
+data class ReqFinishStory(
+    val accuracy: Int,
+    val storyId: String,
+    val type: Int
+)
\ No newline at end of file
diff --git a/app/src/main/java/com/dollearn/student/network/entity/StoryBean.kt b/app/src/main/java/com/dollearn/student/network/entity/StoryBean.kt
new file mode 100644
index 0000000..5513ba1
--- /dev/null
+++ b/app/src/main/java/com/dollearn/student/network/entity/StoryBean.kt
@@ -0,0 +1,31 @@
+package com.dollearn.student.network.entity
+
+import android.os.Parcelable
+import kotlinx.android.parcel.Parcelize
+
+@Parcelize
+data class StoryBean(
+    val `data`: StoryBeanData,
+    val storyList: List<Story>
+):Parcelable
+
+@Parcelize
+data class StoryBeanData(
+    val id: String,
+    val integral: Int
+):Parcelable
+
+@Parcelize
+data class Story(
+    val correct: String,
+    val english: String,
+    val error: String?,
+    val id: String,
+    val img: String,
+    val name: String,
+    val state: Int,
+    val isQuestion: Int,
+    val type: String,
+    var completed:Boolean = false, //已作答
+    var listend:Boolean = false //已听音 归纳排除题需要
+):Parcelable
\ No newline at end of file
diff --git a/app/src/main/java/com/dollearn/student/network/entity/SubjectBean.kt b/app/src/main/java/com/dollearn/student/network/entity/SubjectBean.kt
index 3e86b59..7b29149 100644
--- a/app/src/main/java/com/dollearn/student/network/entity/SubjectBean.kt
+++ b/app/src/main/java/com/dollearn/student/network/entity/SubjectBean.kt
@@ -24,7 +24,9 @@
     val img: String,
     val name: String,
     val state: Int,
+    val isQuestion: Int,
     val type: String,
+    var right:Boolean = false, //回答正确
     var completed:Boolean = false, //已作答
     var listend:Boolean = false //已听音 归纳排除题需要
 ):Parcelable
\ No newline at end of file
diff --git a/app/src/main/java/com/dollearn/student/ui/home/ChooseVoiceFragment.kt b/app/src/main/java/com/dollearn/student/ui/home/ChooseVoiceFragment.kt
index 7a78cd8..7c1086e 100644
--- a/app/src/main/java/com/dollearn/student/ui/home/ChooseVoiceFragment.kt
+++ b/app/src/main/java/com/dollearn/student/ui/home/ChooseVoiceFragment.kt
@@ -24,7 +24,6 @@
     private val TAG = "Choose=======》"
 
     private var handler:Handler? = null
-    private val list = 1
 
     private val PLAY_VOICE = 1
     private val TO_NEXT = 10
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 ee1cb7d..2a47c06 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
@@ -52,8 +52,8 @@
         }
         cl_4.clickDelay {
             showDialog("加载题目...")
-            HttpManager.induceExclude(season, week, day).requestByF(this){_,data->
-//                startActivityForResult<IncludeActivity>(1,"data" to data,"day" to day,"week" to week,"season" to season)
+            HttpManager.questionsAndAnswers(season, week, day).requestByF(this){_,data->
+                startActivityForResult<QAActivity>(1,"data" to data,"day" to day,"week" to week,"season" to season)
             }
         }
         cl_5.clickDelay {
diff --git a/app/src/main/java/com/dollearn/student/ui/home/ListenStoryActivity.kt b/app/src/main/java/com/dollearn/student/ui/home/ListenStoryActivity.kt
new file mode 100644
index 0000000..7c09c84
--- /dev/null
+++ b/app/src/main/java/com/dollearn/student/ui/home/ListenStoryActivity.kt
@@ -0,0 +1,150 @@
+package com.dollearn.student.ui.home
+
+import android.annotation.SuppressLint
+import android.os.Handler
+import android.os.Looper
+import android.os.Message
+import android.view.ViewGroup
+import androidx.core.os.bundleOf
+import androidx.fragment.app.Fragment
+import androidx.fragment.app.FragmentPagerAdapter
+import androidx.viewpager.widget.ViewPager
+import cn.sinata.xldutils.gone
+import com.dollearn.student.R
+import com.dollearn.student.dialog.TipDialog
+import com.dollearn.student.network.HttpManager
+import com.dollearn.student.network.entity.StoryBean
+import com.dollearn.student.network.request
+import com.dollearn.student.ui.TransparentStatusBarActivity
+import kotlinx.android.synthetic.main.activity_listen_stroy.*
+import org.jetbrains.anko.startActivity
+
+class ListenStoryActivity:TransparentStatusBarActivity() {
+    override fun setContentView() = R.layout.activity_listen_stroy
+
+    private val day by lazy {
+        intent.getIntExtra("day",0)
+    }
+    private val week by lazy {
+        intent.getIntExtra("week",0)
+    }
+    private val season by lazy {
+        intent.getIntExtra("season",0)
+    }
+    val data by lazy { intent.getParcelableExtra<StoryBean>("data") }
+    val fragments    = arrayListOf<Fragment>()
+
+    var totalCount = 0 //总答题次数
+    var rightCount = 0 //正确答题次数
+    var time = 0 //学习秒数
+    private var handler:Handler? = null
+
+    override fun initClick() {
+        tv_last.setOnClickListener {
+            (fragments[view_pager.currentItem] as RememberFragment).stopVoice()
+            (fragments[view_pager.currentItem-1] as RememberFragment).recover()
+            view_pager.setCurrentItem(view_pager.currentItem-1,true)
+            if (view_pager.currentItem == 0)
+                tv_last.gone()
+            tv_exit.text = "退出"
+        }
+        tv_next.setOnClickListener {
+            (fragments[view_pager.currentItem] as RememberFragment).stopVoice()
+            (fragments[view_pager.currentItem+1] as RememberFragment).recover()
+            view_pager.setCurrentItem(view_pager.currentItem+1,true)
+            if (view_pager.currentItem == fragments.lastIndex){
+                tv_next.gone()
+                tv_exit.text = "完成"
+            }
+        }
+
+        tv_exit.setOnClickListener {
+            if (tv_exit.text == "退出")
+                onBackPressed()
+            else{
+                (fragments[view_pager.currentItem] as RememberFragment).stopVoice()
+                handler?.removeMessages(0)
+                startActivity<RememberFinishActivity>("score" to data!!.data.integral)
+                finish()
+            }
+        }
+    }
+
+    override fun initView() {
+        data?.apply {
+            tv_progress.text = "已完成:1/${storyList.size}"
+            storyList.forEachIndexed { index, subject ->
+                fragments.add(RememberFragment.getInstance(index))
+            }
+            view_pager.adapter = @SuppressLint("WrongConstant")
+            object : FragmentPagerAdapter(supportFragmentManager,0) {
+                override fun getItem(p0: Int): Fragment {
+                    return fragments[p0]
+                }
+
+                override fun getCount(): Int {
+                    return fragments.size
+                }
+
+                override fun destroyItem(container: ViewGroup, position: Int, `object`: Any) {
+                }
+            }
+            view_pager.offscreenPageLimit = fragments.size
+            view_pager.addOnPageChangeListener(object :ViewPager.OnPageChangeListener{
+                override fun onPageScrolled(
+                    position: Int,
+                    positionOffset: Float,
+                    positionOffsetPixels: Int
+                ) {
+
+                }
+
+                override fun onPageSelected(position: Int) {
+                    tv_progress.text = "已完成:${position+1}/${storyList.size}"
+                }
+
+                override fun onPageScrollStateChanged(state: Int) {
+                }
+            })
+        }
+//        recover()
+        handler= object :Handler(Looper.myLooper()!!){
+            override fun handleMessage(msg: Message) {
+                super.handleMessage(msg)
+                if (msg.what == 0){
+                    time++
+                    handler?.sendEmptyMessageDelayed(0,1000L)
+                }
+            }
+        }
+        handler?.sendEmptyMessageDelayed(0,1000L)
+    }
+
+    private fun recover(){
+        HttpManager.teamSchedule(day,week,3).request(this){_,data->
+            view_pager.setCurrentItem(data?.topicIds?.size?:0,false)
+            totalCount = data?.answerNumber?:0
+            rightCount = data?.correctNumber?:0
+        }
+    }
+
+    override fun onBackPressed() {
+        val tipDialog = TipDialog()
+        tipDialog.arguments = bundleOf("msg" to "未完成全部答题,确认退出吗?")
+        tipDialog.setCallback(object :TipDialog.OnClickCallback{
+            override fun onOk() {
+                finish()
+            }
+
+            override fun onCancel() {
+            }
+        })
+        tipDialog.show(supportFragmentManager,"exit")
+    }
+
+    override fun onDestroy() {
+        super.onDestroy()
+        handler?.removeMessages(0)
+        handler = null
+    }
+}
diff --git a/app/src/main/java/com/dollearn/student/ui/home/LookImgActivity.kt b/app/src/main/java/com/dollearn/student/ui/home/LookImgActivity.kt
new file mode 100644
index 0000000..4ee91a9
--- /dev/null
+++ b/app/src/main/java/com/dollearn/student/ui/home/LookImgActivity.kt
@@ -0,0 +1,145 @@
+package com.dollearn.student.ui.home
+
+import android.annotation.SuppressLint
+import android.os.Handler
+import android.os.Looper
+import android.os.Message
+import android.view.ViewGroup
+import androidx.core.os.bundleOf
+import androidx.fragment.app.Fragment
+import androidx.fragment.app.FragmentPagerAdapter
+import androidx.viewpager.widget.ViewPager
+import cn.sinata.xldutils.gone
+import cn.sinata.xldutils.visible
+import com.dollearn.student.R
+import com.dollearn.student.dialog.TipDialog
+import com.dollearn.student.network.HttpManager
+import com.dollearn.student.network.entity.StoryBean
+import com.dollearn.student.network.entity.SubjectBean
+import com.dollearn.student.network.request
+import com.dollearn.student.ui.TransparentStatusBarActivity
+import kotlinx.android.synthetic.main.activity_listen.*
+
+class LookImgActivity:TransparentStatusBarActivity() {
+    override fun setContentView() = R.layout.activity_listen
+
+    private val day by lazy {
+        intent.getIntExtra("day",0)
+    }
+    private val week by lazy {
+        intent.getIntExtra("week",0)
+    }
+    private val season by lazy {
+        intent.getIntExtra("season",0)
+    }
+    val data by lazy { intent.getParcelableExtra<StoryBean>("data") }
+    val fragments    = arrayListOf<Fragment>()
+
+    var totalCount = 0 //总答题次数
+    var rightCount = 0 //正确答题次数
+    var time = 0 //学习秒数
+    private var handler:Handler? = null
+
+    override fun initClick() {
+        tv_last.setOnClickListener {
+            (fragments[view_pager.currentItem-1] as LookImgFragment).recover()
+            view_pager.setCurrentItem(view_pager.currentItem-1,true)
+            if (view_pager.currentItem == 0)
+                tv_last.gone()
+        }
+
+        tv_exit.setOnClickListener {
+            onBackPressed()
+        }
+    }
+
+    fun next(){
+        if (view_pager.currentItem == fragments.lastIndex){
+            handler?.removeMessages(0)
+            ResultActivity.startResult(this,day,week,season,8,totalCount,rightCount,data!!.data.integral,time,data!!.data.id)
+            finish()
+        }else{
+            (fragments[view_pager.currentItem+1] as LookImgFragment).recover()
+            view_pager.setCurrentItem(view_pager.currentItem+1,true)
+            tv_last.visible()
+        }
+    }
+
+    override fun initView() {
+        data?.apply {
+            tv_progress.text = "已完成:1/${storyList.size}"
+            storyList.forEachIndexed { index, subject ->
+                fragments.add(LookImgFragment.getInstance(index))
+            }
+            view_pager.adapter = @SuppressLint("WrongConstant")
+            object : FragmentPagerAdapter(supportFragmentManager,0) {
+                override fun getItem(p0: Int): Fragment {
+                    return fragments[p0]
+                }
+
+                override fun getCount(): Int {
+                    return fragments.size
+                }
+
+                override fun destroyItem(container: ViewGroup, position: Int, `object`: Any) {
+                }
+            }
+            view_pager.offscreenPageLimit = fragments.size
+            view_pager.addOnPageChangeListener(object :ViewPager.OnPageChangeListener{
+                override fun onPageScrolled(
+                    position: Int,
+                    positionOffset: Float,
+                    positionOffsetPixels: Int
+                ) {
+
+                }
+
+                override fun onPageSelected(position: Int) {
+                    tv_progress.text = "已完成:${position+1}/${storyList.size}"
+                }
+
+                override fun onPageScrollStateChanged(state: Int) {
+                }
+            })
+        }
+//        recover()
+        handler= object :Handler(Looper.myLooper()!!){
+            override fun handleMessage(msg: Message) {
+                super.handleMessage(msg)
+                if (msg.what == 0){
+                    time++
+                    handler?.sendEmptyMessageDelayed(0,1000L)
+                }
+            }
+        }
+        handler?.sendEmptyMessageDelayed(0,1000L)
+    }
+
+    private fun recover(){
+        HttpManager.teamSchedule(day,week,3).request(this){_,data->
+            view_pager.setCurrentItem(data?.topicIds?.size?:0,false)
+            totalCount = data?.answerNumber?:0
+            rightCount = data?.correctNumber?:0
+        }
+    }
+
+    override fun onBackPressed() {
+        val tipDialog = TipDialog()
+        tipDialog.arguments = bundleOf("msg" to "未完成全部答题,确认退出吗?")
+        tipDialog.setCallback(object :TipDialog.OnClickCallback{
+            override fun onOk() {
+                finish()
+            }
+
+            override fun onCancel() {
+            }
+        })
+        tipDialog.show(supportFragmentManager,"exit")
+    }
+
+    override fun onDestroy() {
+        super.onDestroy()
+        handler?.removeMessages(0)
+        handler = null
+    }
+}
diff --git a/app/src/main/java/com/dollearn/student/ui/home/LookImgFragment.kt b/app/src/main/java/com/dollearn/student/ui/home/LookImgFragment.kt
new file mode 100644
index 0000000..465177f
--- /dev/null
+++ b/app/src/main/java/com/dollearn/student/ui/home/LookImgFragment.kt
@@ -0,0 +1,240 @@
+package com.dollearn.student.ui.home
+
+import android.os.Handler
+import android.os.Looper
+import android.os.Message
+import android.util.Log
+import androidx.core.os.bundleOf
+import cn.sinata.xldutils.fragment.BaseFragment
+import cn.sinata.xldutils.gone
+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.fragmetn_look_img.*
+
+class LookImgFragment:BaseFragment(), AudioUtils.OnAudioStatusUpdateListener {
+    override fun contentViewId() = R.layout.fragmetn_look_img
+
+    private val TAG = "Choose=======》"
+
+    private var handler:Handler? = null
+
+    private val index by lazy { arguments?.getInt("index")?:0 }
+    private val data by lazy {
+        (requireActivity() as LookImgActivity).data
+    }
+    private val act by lazy { (requireActivity() as LookImgActivity) }
+    private val voiceList = arrayListOf<String>()
+
+    private val PLAY_VOICE = 1
+    private val TO_NEXT = 10
+    private val player by lazy { AudioUtils() }
+
+    private var voiceIndex = -1 //点击播放的声音序号 0-2取值
+    private var playing = false //播放中,不能有任何操作
+
+    override fun onFirstVisibleToUser() {
+        player.setOnAudioStatusUpdateListener(this)
+        player.stopPlayMusic()
+        handler = object : Handler(Looper.getMainLooper()){
+            override fun handleMessage(msg: Message) {
+                super.handleMessage(msg)
+                when(msg.what){
+                    PLAY_VOICE->{
+                        if (voiceIndex<voiceList.size)
+                            player.startPlayMusic(requireContext(),voiceList[voiceIndex])
+                    }
+                    TO_NEXT->{
+                        if (isAdded&&!playing)
+                            (requireActivity() as LookImgActivity).next()
+                    }
+                }
+            }
+        }
+        data?.storyList?.get(index)?.apply {
+            iv_1.setImageURI(img)
+            voiceList.add(correct)
+            voiceList.addAll(error!!.split(","))
+            voiceList.shuffle()
+        }
+        recover()
+        setOnClick()
+    }
+
+    private fun setOnClick() {
+        cl_voice1.clickDelay {
+            if (playing)
+                return@clickDelay
+            voiceIndex = 0
+            handler?.sendEmptyMessage(PLAY_VOICE)
+        }
+
+        cl_voice2.clickDelay {
+            if (playing)
+                return@clickDelay
+            voiceIndex = 1
+            handler?.sendEmptyMessage(PLAY_VOICE)
+        }
+
+        cl_voice3.clickDelay {
+            if (playing)
+                return@clickDelay
+            voiceIndex = 2
+            handler?.sendEmptyMessage(PLAY_VOICE)
+        }
+
+        rl_check_1.clickDelay {
+            if (playing)
+                return@clickDelay
+            dot_1.visible()
+            act.totalCount++
+            if (voiceList[0] == data!!.storyList[index].correct){
+                act.rightCount++
+                data!!.storyList[index].completed = true
+                motion.transitionToEnd()
+                cl_voice1.callOnClick()
+            }else{
+                iv_error_1.visible()
+                dot_1.postDelayed({
+                    iv_error_1.gone()
+                    dot_1.gone()
+                },2000)
+            }
+        }
+
+        rl_check_2.clickDelay {
+            if (playing)
+                return@clickDelay
+            dot_2.visible()
+            act.totalCount++
+            if (voiceList[1] == data!!.storyList[index].correct){
+                act.rightCount++
+                data!!.storyList[index].completed = true
+                motion.transitionToEnd()
+                cl_voice2.callOnClick()
+            }else{
+                iv_error_2.visible()
+                dot_1.postDelayed({
+                    dot_2.gone()
+                    iv_error_2.gone()
+                },2000)
+            }
+        }
+        rl_check_3.clickDelay {
+            if (playing)
+                return@clickDelay
+            dot_3.visible()
+            act.totalCount++
+            if (voiceList[2] == data!!.storyList[index].correct){
+                data!!.storyList[index].completed = true
+                act.rightCount++
+                motion.transitionToEnd()
+                cl_voice3.callOnClick()
+            }else{
+                iv_error_3.visible()
+                dot_1.postDelayed({
+                    iv_error_3.gone()
+                    dot_3.gone()
+                },2000)
+            }
+        }
+    }
+
+    /**
+     * 重置
+     */
+    fun recover() {
+        voiceList.shuffle()
+        rl_check_1.gone()
+        rl_check_2.gone()
+        rl_check_3.gone()
+        dot_1.gone()
+        dot_2.gone()
+        dot_3.gone()
+        //设置动画飞行路径 3对1
+        val rightVoiceIndex = voiceList.indexOf(data!!.storyList[index].correct)
+        var start = 0
+        var end = 0
+        when(rightVoiceIndex){
+            0->{
+                start = R.id.start_1
+                end = R.id.end_1
+            }
+            1->{
+                start = R.id.start_2
+                end = R.id.end_2
+            }
+            2->{
+                start = R.id.start_3
+                end = R.id.end_3
+            }
+        }
+        motion.progress = 0f
+        motion.setTransition(start,end)
+        data!!.storyList[index].completed = false
+    }
+
+    companion object{
+        /**
+         * @param index 题组号
+         */
+        fun getInstance(index:Int):LookImgFragment{
+            val listenFragment = LookImgFragment()
+            listenFragment.arguments = bundleOf("index" to index)
+            return listenFragment
+        }
+    }
+
+    override fun onUpdate(db: Double, time: Long) {
+    }
+
+    override fun onStop(filePath: String?) {
+    }
+
+    override fun onStartPlay() {
+        playing = true
+        if (voiceIndex == 0){
+            iv1_1.gone()
+            iv2_1.gone()
+            iv_playing_1.visible()
+        }
+        if (voiceIndex == 1){
+            iv1_2.gone()
+            iv2_2.gone()
+            iv_playing_2.visible()
+        }
+        if (voiceIndex == 2){
+            iv1_3.gone()
+            iv2_3.gone()
+            iv_playing_3.visible()
+        }
+    }
+
+    override fun onFinishPlay() {
+        playing = false
+        if (voiceIndex == 0){
+            rl_check_1.visible()
+            iv1_1.visible()
+            iv2_1.visible()
+            iv_playing_1.gone()
+        }
+        if (voiceIndex == 1){
+            rl_check_2.visible()
+            iv1_2.visible()
+            iv2_2.visible()
+            iv_playing_2.gone()
+        }
+        if (voiceIndex == 2){
+            rl_check_3.visible()
+            iv1_3.visible()
+            iv2_3.visible()
+            iv_playing_3.gone()
+        }
+        if (data!!.storyList[index].completed){ //本题已答对
+            Log.e(TAG,"选对答案后的播放结束3秒后进入下一图")
+            handler?.sendEmptyMessageDelayed(TO_NEXT,3000)
+        }
+    }
+
+}
\ No newline at end of file
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 7f3423a..d33c5e6 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
@@ -16,7 +16,7 @@
 import org.jetbrains.anko.imageResource
 
 
-//todo 1.首次播放播放中图标不显示 2.选择正确后不能再选择 3.选择正确后处理语音条位置
+//todo 2.选择正确后不能再选择 3.选择正确后处理语音条位置
 class MatchFragment : BaseFragment(), AudioUtils.OnAudioStatusUpdateListener {
     override fun contentViewId() = R.layout.fragment_match
 
@@ -51,7 +51,7 @@
                     }
                     TO_NEXT->{
                         if (isAdded&&!playing){
-                            (requireActivity() as IncludeActivity).next()
+                            (requireActivity() as MatchActivity).next()
                         }
                     }
                 }
@@ -70,6 +70,10 @@
     }
 
     private fun initClick() {
+        cover_3.setOnClickListener {  }
+        cover_2.setOnClickListener {  }
+        cover_1.setOnClickListener {  }
+        cover_4.setOnClickListener {  }
         voiceViews.forEachIndexed { index, constraintLayout ->
             constraintLayout.clickDelay {
                 if (!playing){
@@ -81,6 +85,7 @@
         }
 
         cl_1.clickDelay {
+            val voiceIndex = voiceIndex
             if (playing||voiceIndex == -1) //未播放或者正在播放,不可点击
                 return@clickDelay
             if (data!!.subjectList[group][0].completed) //已作答不可点击
@@ -111,6 +116,38 @@
                         end = R.id.end_4_1
                     }
                 }
+                voiceViews[voiceIndex].callOnClick()
+                motion.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) {
+                        cl_voice_end_1.visible()
+                        when(voiceIndex){
+                            0->cover_1.visible()
+                            1->cover_2.visible()
+                            2->cover_3.visible()
+                            3->cover_4.visible()
+                        }
+                    }
+
+                    override fun onTransitionTrigger(
+                        p0: MotionLayout?,
+                        p1: Int,
+                        p2: Boolean,
+                        p3: Float
+                    ) {
+                    }
+                })
                 motion.setTransition(start,end)
                 motion.transitionToEnd()
             }else{
@@ -120,6 +157,8 @@
         }
 
         cl_2.clickDelay {
+            val voiceIndex = voiceIndex
+
             if (playing||voiceIndex == -1) //未播放或者正在播放,不可点击
                 return@clickDelay
             if (data!!.subjectList[group][1].completed) //已作答不可点击
@@ -150,6 +189,39 @@
                         end = R.id.end_4_2
                     }
                 }
+                voiceViews[voiceIndex].callOnClick()
+
+                motion.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) {
+                        cl_voice_end_2.visible()
+                        when(voiceIndex){
+                            0->cover_1.visible()
+                            1->cover_2.visible()
+                            2->cover_3.visible()
+                            3->cover_4.visible()
+                        }
+                    }
+
+                    override fun onTransitionTrigger(
+                        p0: MotionLayout?,
+                        p1: Int,
+                        p2: Boolean,
+                        p3: Float
+                    ) {
+                    }
+                })
                 motion.setTransition(start,end)
                 motion.transitionToEnd()
             }else{
@@ -159,6 +231,8 @@
         }
 
         cl_3.clickDelay {
+            val voiceIndex = voiceIndex
+
             if (playing||voiceIndex == -1) //未播放或者正在播放,不可点击
                 return@clickDelay
             if (data!!.subjectList[group][2].completed) //已作答不可点击
@@ -189,6 +263,39 @@
                         end = R.id.end_4_3
                     }
                 }
+                voiceViews[voiceIndex].callOnClick()
+
+                motion.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) {
+                        cl_voice_end_3.visible()
+                        when(voiceIndex){
+                            0->cover_1.visible()
+                            1->cover_2.visible()
+                            2->cover_3.visible()
+                            3->cover_4.visible()
+                        }
+                    }
+
+                    override fun onTransitionTrigger(
+                        p0: MotionLayout?,
+                        p1: Int,
+                        p2: Boolean,
+                        p3: Float
+                    ) {
+                    }
+                })
                 motion.setTransition(start,end)
                 motion.transitionToEnd()
             }else{
@@ -198,6 +305,7 @@
         }
 
         cl_4.clickDelay {
+            val voiceIndex = voiceIndex
             if (playing||voiceIndex == -1) //未播放或者正在播放,不可点击
                 return@clickDelay
             if (data!!.subjectList[group][3].completed) //已作答不可点击
@@ -228,12 +336,65 @@
                         end = R.id.end_4_4
                     }
                 }
+                voiceViews[voiceIndex].callOnClick()
+
+                motion.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) {
+                        cl_voice_end_4.visible()
+                        when(voiceIndex){
+                            0->cover_1.visible()
+                            1->cover_2.visible()
+                            2->cover_3.visible()
+                            3->cover_4.visible()
+                        }
+                    }
+
+                    override fun onTransitionTrigger(
+                        p0: MotionLayout?,
+                        p1: Int,
+                        p2: Boolean,
+                        p3: Float
+                    ) {
+                    }
+                })
                 motion.setTransition(start,end)
                 motion.transitionToEnd()
             }else{
                 result_4.imageResource = R.mipmap.zhifushibai
             }
             showResultAnim(cl_4)
+        }
+
+        cl_voice_end_1.setOnClickListener {
+            voiceIndex = 4
+            player.startPlayMusic(requireContext(),data!!.subjectList[group][0].correct)
+        }
+        cl_voice_end_2.setOnClickListener {
+            voiceIndex = 5
+            player.startPlayMusic(requireContext(),data!!.subjectList[group][1].correct)
+
+        }
+        cl_voice_end_3.setOnClickListener {
+            voiceIndex = 6
+            player.startPlayMusic(requireContext(),data!!.subjectList[group][2].correct)
+
+        }
+        cl_voice_end_4.setOnClickListener {
+            voiceIndex = 7
+            player.startPlayMusic(requireContext(),data!!.subjectList[group][3].correct)
+
         }
     }
 
@@ -265,7 +426,15 @@
             it.completed = false
             it.listend = false
         }
-
+        cover_1.gone()
+        cover_2.gone()
+        cover_3.gone()
+        cover_4.gone()
+        tv_name.text =""
+        cl_voice_end_1.gone()
+        cl_voice_end_2.gone()
+        cl_voice_end_3.gone()
+        cl_voice_end_4.gone()
     }
 
     companion object{
@@ -289,11 +458,13 @@
     override fun onStartPlay() {
         playing = true
         val list = data!!.subjectList[group]
-        tv_name.text = list[list.map { it.correct }.indexOf(voiceList[voiceIndex])].name
+        if (voiceIndex in 0..3)
+            tv_name.text = list[list.map { it.correct }.indexOf(voiceList[voiceIndex])].name
         when(voiceIndex){
             0->{
                 iv1_1.gone()
                 iv2_1.gone()
+                iv_playing_1.visible()
                 iv_playing_1.visible()
             }
             1->{
@@ -313,13 +484,32 @@
                 iv_playing_4.visible()
             }
 
+            4->{
+                iv1_1_end.gone()
+                iv2_1_end.gone()
+                iv_playing_1_end.visible()
+            }
+            5->{
+                iv1_2_end.gone()
+                iv2_2_end.gone()
+                iv_playing_2_end.visible()
+            }
+            6->{
+                iv1_3_end.gone()
+                iv2_3_end.gone()
+                iv_playing_3_end.visible()
+            }
+            7->{
+                iv1_4_end.gone()
+                iv2_4_end.gone()
+                iv_playing_4_end.visible()
+            }
+
         }
     }
 
     override fun onFinishPlay() {
         playing = false
-        val subject = data!!.subjectList[group][voiceIndex]
-        subject.listend = true
         when(voiceIndex){
             0->{
                 iv1_1.visible()
@@ -341,7 +531,29 @@
                 iv2_4.visible()
                 iv_playing_4.gone()
             }
-
+            4->{
+                iv1_1_end.visible()
+                iv2_1_end.visible()
+                iv_playing_1_end.gone()
+            }
+            5->{
+                iv1_2_end.visible()
+                iv2_2_end.visible()
+                iv_playing_2_end.gone()
+            }
+            6->{
+                iv1_3_end.visible()
+                iv2_3_end.visible()
+                iv_playing_3_end.gone()
+            }
+            7->{
+                iv1_4_end.visible()
+                iv2_4_end.visible()
+                iv_playing_4_end.gone()
+            }
+        }
+        if (data!!.subjectList[group].filter { it.completed }.size == 4){ //全部答对
+            handler?.sendEmptyMessage(TO_NEXT)
         }
     }
 }
\ No newline at end of file
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
new file mode 100644
index 0000000..6ab0321
--- /dev/null
+++ b/app/src/main/java/com/dollearn/student/ui/home/MemoryActivity.kt
@@ -0,0 +1,50 @@
+package com.dollearn.student.ui.home
+
+import android.os.CountDownTimer
+import androidx.core.os.bundleOf
+import androidx.recyclerview.widget.GridLayoutManager
+import com.dollearn.student.R
+import com.dollearn.student.dialog.TipDialog
+import com.dollearn.student.network.entity.Card
+import com.dollearn.student.network.entity.MemoryBean
+import com.dollearn.student.ui.TransparentStatusBarActivity
+import com.dollearn.student.ui.home.adapter.CardAdapter
+import kotlinx.android.synthetic.main.activity_memory.*
+
+class MemoryActivity : TransparentStatusBarActivity() {
+    override fun setContentView() = R.layout.activity_memory
+
+    private val data by lazy {
+        intent.getParcelableExtra<MemoryBean>("data")!!
+    }
+    private val list = arrayListOf<Card>()
+    private val adapter = CardAdapter(list)
+    private val TIME = 600*1000L
+    private var timer:CountDownTimer? = null
+
+    override fun initClick() {
+
+    }
+
+    override fun initView() {
+        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()
+        adapter.notifyDataSetChanged()
+
+        timer = object :CountDownTimer(TIME,1000){
+            override fun onTick(millisUntilFinished: Long) {
+
+            }
+
+            override fun onFinish() {
+                val tipDialog = TipDialog()
+                tipDialog.arguments = bundleOf("msg" to "答题时间已结束,停止作答!")
+            }
+
+        }
+    }
+
+}
diff --git a/app/src/main/java/com/dollearn/student/ui/home/QAActivity.kt b/app/src/main/java/com/dollearn/student/ui/home/QAActivity.kt
new file mode 100644
index 0000000..e3ae842
--- /dev/null
+++ b/app/src/main/java/com/dollearn/student/ui/home/QAActivity.kt
@@ -0,0 +1,151 @@
+package com.dollearn.student.ui.home
+
+import android.annotation.SuppressLint
+import android.os.Handler
+import android.os.Looper
+import android.os.Message
+import android.view.ViewGroup
+import androidx.core.os.bundleOf
+import androidx.fragment.app.Fragment
+import androidx.fragment.app.FragmentPagerAdapter
+import androidx.viewpager.widget.ViewPager
+import cn.sinata.xldutils.gone
+import cn.sinata.xldutils.visible
+import com.dollearn.student.R
+import com.dollearn.student.dialog.TipDialog
+import com.dollearn.student.network.HttpManager
+import com.dollearn.student.network.entity.SubjectBean
+import com.dollearn.student.network.request
+import com.dollearn.student.ui.TransparentStatusBarActivity
+import kotlinx.android.synthetic.main.activity_listen.*
+
+class QAActivity:TransparentStatusBarActivity() {
+    override fun setContentView() = R.layout.activity_listen
+
+    private val day by lazy {
+        intent.getIntExtra("day",0)
+    }
+    private val week by lazy {
+        intent.getIntExtra("week",0)
+    }
+    private val season by lazy {
+        intent.getIntExtra("season",0)
+    }
+    val data by lazy { intent.getParcelableExtra<SubjectBean>("data") }
+    val fragments    = arrayListOf<Fragment>()
+
+    var totalCount = 0 //总答题次数
+    var rightCount = 0 //正确答题次数
+    var time = 0 //学习秒数
+    private var handler:Handler? = null
+
+    override fun initClick() {
+        tv_last.setOnClickListener {
+            (fragments[view_pager.currentItem-1] as QAFragment).recover()
+            view_pager.setCurrentItem(view_pager.currentItem-1,true)
+            if (view_pager.currentItem == 0)
+                tv_last.gone()
+        }
+
+        tv_exit.setOnClickListener {
+            onBackPressed()
+        }
+    }
+
+    fun next(){
+        if (view_pager.currentItem == fragments.lastIndex){
+            handler?.removeMessages(0)
+            ResultActivity.startResult(this,day,week,season,4,totalCount,rightCount,data!!.data.integral,time,data!!.data.id)
+            finish()
+        }else{
+            (fragments[view_pager.currentItem+1] as QAFragment).recover()
+            view_pager.setCurrentItem(view_pager.currentItem+1,true)
+            tv_last.visible()
+        }
+    }
+
+    override fun initView() {
+        data?.apply {
+            tv_progress.text = "已完成:1/${subjectList.size}"
+            subjectList.forEachIndexed { index, subject ->
+                fragments.add(QAFragment.getInstance(index))
+            }
+            view_pager.adapter = @SuppressLint("WrongConstant")
+            object : FragmentPagerAdapter(supportFragmentManager,0) {
+                override fun getItem(p0: Int): Fragment {
+                    return fragments[p0]
+                }
+
+                override fun getCount(): Int {
+                    return fragments.size
+                }
+
+                override fun destroyItem(container: ViewGroup, position: Int, `object`: Any) {
+                }
+            }
+            view_pager.offscreenPageLimit = fragments.size
+            view_pager.addOnPageChangeListener(object :ViewPager.OnPageChangeListener{
+                override fun onPageScrolled(
+                    position: Int,
+                    positionOffset: Float,
+                    positionOffsetPixels: Int
+                ) {
+
+                }
+
+                override fun onPageSelected(position: Int) {
+                    tv_progress.text = "已完成:${position+1}/${subjectList.size}"
+                }
+
+                override fun onPageScrollStateChanged(state: Int) {
+                }
+            })
+        }
+        recover()
+        handler= object :Handler(Looper.myLooper()!!){
+            override fun handleMessage(msg: Message) {
+                super.handleMessage(msg)
+                if (msg.what == 0){
+                    time++
+                    handler?.sendEmptyMessageDelayed(0,1000L)
+                }
+            }
+        }
+        handler?.sendEmptyMessageDelayed(0,1000L)
+    }
+
+    private fun recover(){
+        HttpManager.teamSchedule(day,week,4).request(this,false){_,data->
+            view_pager.setCurrentItem(data?.topicIds?.size?:0,false)
+            totalCount = data?.answerNumber?:0
+            rightCount = data?.correctNumber?:0
+        }
+    }
+
+    override fun onBackPressed() {
+        val tipDialog = TipDialog()
+        tipDialog.arguments = bundleOf("msg" to "未完成全部答题,确认退出吗?")
+        tipDialog.setCallback(object :TipDialog.OnClickCallback{
+            override fun onOk() {
+                if (view_pager.currentItem == 0)
+                    finish()
+                else{
+                    val list = (data?.subjectList?: arrayListOf()).flatMap { it }.subList(0,view_pager.currentItem)
+                    HttpManager.exitLearning(totalCount,rightCount,day,week,4,data?.data?.id?:"", list.joinToString(",") { it.id }).request(this@QAActivity){ _, _->
+                        finish()
+                    }
+                }
+            }
+
+            override fun onCancel() {
+            }
+        })
+        tipDialog.show(supportFragmentManager,"exit")
+    }
+
+    override fun onDestroy() {
+        super.onDestroy()
+        handler?.removeMessages(0)
+        handler = null
+    }
+}
diff --git a/app/src/main/java/com/dollearn/student/ui/home/QAFragment.kt b/app/src/main/java/com/dollearn/student/ui/home/QAFragment.kt
new file mode 100644
index 0000000..c6f0d38
--- /dev/null
+++ b/app/src/main/java/com/dollearn/student/ui/home/QAFragment.kt
@@ -0,0 +1,284 @@
+package com.dollearn.student.ui.home
+
+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.constraintlayout.widget.ConstraintLayout
+import androidx.core.os.bundleOf
+import cn.sinata.xldutils.fragment.BaseFragment
+import cn.sinata.xldutils.gone
+import cn.sinata.xldutils.invisible
+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_q_a.*
+import org.jetbrains.anko.support.v4.dip
+
+class QAFragment:BaseFragment(), AudioUtils.OnAudioStatusUpdateListener {
+    override fun contentViewId() = R.layout.fragment_q_a
+
+    private val TAG = "QA=======》"
+
+    private var handler: Handler? = null
+    private val PLAY_VOICE = 1
+    private val TO_NEXT = 2
+
+    private val player by lazy { AudioUtils() }
+    private val group by lazy { arguments?.getInt("group")?:0 }
+    private val data by lazy {
+        (requireActivity() as QAActivity).data
+    }
+    private val list by lazy {  //题组内图片
+        data!!.subjectList[group]
+    }
+
+    private val act by lazy { requireActivity() as QAActivity }
+
+    private val voiceViews by lazy { arrayListOf(cl_voice_1,cl_voice_2,cl_voice_3,cl_voice_4) } //语音蓝条
+    private val v1Views by lazy { arrayListOf(iv1_1,iv1_2,iv1_3,iv1_4,iv1_answer_1,iv1_answer_2,iv1_answer_3) }
+    private val v2Views by lazy { arrayListOf(iv2_1,iv2_2,iv2_3,iv2_4,iv2_answer_1,iv2_answer_2,iv2_answer_3) }
+    private val v3Views by lazy { arrayListOf(iv3_1,iv3_2,iv3_3,iv3_4) }
+    private val playingViews by lazy { arrayListOf(iv_playing_1,iv_playing_2,iv_playing_3,iv_playing_4,iv_playing_answer_1,iv_playing_answer_2,iv_playing_answer_3) }
+
+    private var voiceIndex = -1 //点击播放的声音序号 0-3取值
+    private var questionIndex = -1 //当前题号
+
+    private var playing = false
+
+    private var layoutChanged = false
+
+    private var answerList = arrayListOf<String>() //右侧答案语音
+
+
+    override fun onFirstVisibleToUser() {
+        player.setOnAudioStatusUpdateListener(this)
+        player.stopPlayMusic()
+        handler = object : Handler(Looper.getMainLooper()){
+            override fun handleMessage(msg: Message) {
+                super.handleMessage(msg)
+                when(msg.what){
+                    PLAY_VOICE->{
+                        if (voiceIndex in 0..3)
+                            player.startPlayMusic(requireContext(),list[voiceIndex].correct)
+                        else
+                            player.startPlayMusic(requireContext(),answerList[voiceIndex-4])
+                    }
+                    TO_NEXT->{
+                        if (isAdded&&!playing){
+                            (requireActivity() as QAActivity).next()
+                        }
+                    }
+                }
+            }
+        }
+        iv_1.setImageURI(list[0].img)
+        iv_2.setImageURI(list[1].img)
+        iv_3.setImageURI(list[2].img)
+        iv_4.setImageURI(list[3].img)
+        showVoiceUi()
+
+        rl_check_1.clickDelay {
+            if (list[questionIndex].completed) //已作答
+                return@clickDelay
+            act.totalCount++
+            if (list[questionIndex].correct == answerList[0]){
+                act.rightCount++
+                Log.e(TAG,"选择正确")
+                transAnimation(cl_answer_1,voiceViews[questionIndex])
+                list[questionIndex].completed = true
+            }else{
+                dot_1.visible()
+                iv_error_1.visible()
+                dot_1.postDelayed({
+                    dot_1.gone()
+                    iv_error_1.gone()
+                },500)
+            }
+        }
+        rl_check_2.clickDelay {
+            if (list[questionIndex].completed) //已作答
+                return@clickDelay
+            act.totalCount++
+            if (list[questionIndex].correct == answerList[1]){
+                act.rightCount++
+                Log.e(TAG,"选择正确")
+                transAnimation(cl_answer_2,voiceViews[questionIndex])
+                list[questionIndex].completed = true
+            }else{
+                dot_2.visible()
+                iv_error_2.visible()
+                dot_2.postDelayed({
+                    dot_2.gone()
+                    iv_error_2.gone()
+                },500)
+            }
+        }
+        rl_check_3.clickDelay {
+            if (list[questionIndex].completed) //已作答
+                return@clickDelay
+            act.totalCount++
+            if (list[questionIndex].correct == answerList[2]){
+                act.rightCount++
+                Log.e(TAG,"选择正确")
+                transAnimation(cl_answer_3,voiceViews[questionIndex])
+                list[questionIndex].completed = true
+            }else{
+                dot_3.visible()
+                iv_error_3.visible()
+                dot_3.postDelayed({
+                    dot_3.gone()
+                    iv_error_3.gone()
+                },500)
+            }
+        }
+    }
+
+
+
+    fun recover(){
+
+    }
+
+    private fun showVoiceUi(){
+        list.forEachIndexed { index, subject ->
+            if (subject.isQuestion == 1){
+                v3Views[index].setImageResource(R.mipmap.voice_question)
+                voiceViews[index].visible()
+            }else{
+                v3Views[index].setImageResource(R.mipmap.voice_answer)
+                voiceViews[index].invisible()
+            }
+            voiceViews[index].clickDelay {
+                voiceIndex = index
+                handler?.sendEmptyMessage(PLAY_VOICE)
+            }
+        }
+    }
+
+    private fun showAnswerView(position:Int){
+        if (!layoutChanged){ //布局未改变,执行属性动画
+            val anim = ValueAnimator.ofInt(dip(120))
+            anim.duration = 500
+            anim.addUpdateListener {
+                val i = it.animatedValue as Int
+                val layoutParams = center.layoutParams as ConstraintLayout.LayoutParams
+                layoutParams.marginEnd = i
+                center.layoutParams = layoutParams
+            }
+            anim.start()
+            layoutChanged = true
+        }
+        questionIndex = position
+        rl_check_1.visible()
+        rl_check_2.visible()
+        rl_check_3.visible()
+        cl_answer_1.visible()
+        cl_answer_2.visible()
+        cl_answer_3.visible()
+        answerList.add(list[position].correct)
+        answerList.addAll(list[position].error?.split(",")?: arrayListOf())
+        answerList.shuffle()
+        cl_answer_1.setOnClickListener {
+            voiceIndex = 4
+            handler?.sendEmptyMessage(PLAY_VOICE)
+        }
+        cl_answer_2.setOnClickListener {
+            voiceIndex = 5
+            handler?.sendEmptyMessage(PLAY_VOICE)
+        }
+        cl_answer_3.setOnClickListener {
+            voiceIndex = 6
+            handler?.sendEmptyMessage(PLAY_VOICE)
+        }
+    }
+
+
+    private fun transAnimation(v:View,endView: View){
+        val offx = endView.left - v.left
+        val offy = endView.top - v.top
+        val x = PropertyValuesHolder.ofFloat("translationX",0f,offx.toFloat())
+        val y = PropertyValuesHolder.ofFloat("translationY",0f,offy.toFloat())
+        val animator = ObjectAnimator.ofPropertyValuesHolder(v, x, y)
+        animator.duration = 1000
+        animator.interpolator = LinearInterpolator()
+        animator.start()
+        animator.addListener(object :Animator.AnimatorListener{
+            override fun onAnimationStart(animation: Animator?) {
+
+            }
+
+            override fun onAnimationEnd(animation: Animator?) {
+                endView.visible()
+                v.translationX = 0f
+                v.translationY = 0f
+                rl_check_1.gone()
+                rl_check_2.gone()
+                rl_check_3.gone()
+                cl_answer_1.gone()
+                cl_answer_2.gone()
+                cl_answer_3.gone()
+            }
+
+            override fun onAnimationCancel(animation: Animator?) {
+            }
+
+            override fun onAnimationRepeat(animation: Animator?) {
+            }
+        })
+    }
+
+
+    companion object{
+        /**
+         * @param group 题组号
+         * @param index 组内序号
+         */
+        fun getInstance(group: Int):QAFragment{
+            val listenFragment = QAFragment()
+            listenFragment.arguments = bundleOf("group" to group)
+            return listenFragment
+        }
+    }
+
+    override fun onUpdate(db: Double, time: Long) {
+
+    }
+
+    override fun onStop(filePath: String?) {
+    }
+
+    override fun onStartPlay() {
+        playing = true
+        v1Views[voiceIndex].gone()
+        v2Views[voiceIndex].gone()
+        playingViews[voiceIndex].visible()
+        if (voiceIndex == 0&&!list[1].completed){
+            showAnswerView(1)
+        }
+        if (voiceIndex == 1&&!list[0].completed){
+            showAnswerView(0)
+
+        }
+        if (voiceIndex == 2&&!list[3].completed){
+            showAnswerView(3)
+        }
+        if (voiceIndex == 3&&!list[2].completed){
+            showAnswerView(2)
+        }
+    }
+
+    override fun onFinishPlay() {
+        playing = false
+        v1Views[voiceIndex].visible()
+        v2Views[voiceIndex].visible()
+        playingViews[voiceIndex].gone()
+    }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/dollearn/student/ui/home/RememberFinishActivity.kt b/app/src/main/java/com/dollearn/student/ui/home/RememberFinishActivity.kt
new file mode 100644
index 0000000..2746115
--- /dev/null
+++ b/app/src/main/java/com/dollearn/student/ui/home/RememberFinishActivity.kt
@@ -0,0 +1,23 @@
+package com.dollearn.student.ui.home
+
+import com.dollearn.student.MainActivity
+import com.dollearn.student.R
+import com.dollearn.student.ui.TransparentStatusBarActivity
+import kotlinx.android.synthetic.main.activity_finish_remember.*
+import org.jetbrains.anko.startActivity
+
+class RememberFinishActivity:TransparentStatusBarActivity() {
+    override fun setContentView() = R.layout.activity_finish_remember
+
+    private val score by lazy { intent.getIntExtra("score",0) }
+
+    override fun initClick() {
+        tv_back.setOnClickListener {
+            startActivity<MainActivity>()
+        }
+    }
+
+    override fun initView() {
+        tv_tip.text = "恭喜你,已听完全部故事!获得${score}积分!"
+    }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/dollearn/student/ui/home/RememberFragment.kt b/app/src/main/java/com/dollearn/student/ui/home/RememberFragment.kt
new file mode 100644
index 0000000..5c0f930
--- /dev/null
+++ b/app/src/main/java/com/dollearn/student/ui/home/RememberFragment.kt
@@ -0,0 +1,106 @@
+package com.dollearn.student.ui.home
+
+import android.os.Handler
+import android.os.Looper
+import android.os.Message
+import android.util.Log
+import androidx.core.os.bundleOf
+import cn.sinata.xldutils.fragment.BaseFragment
+import cn.sinata.xldutils.gone
+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.fragmetn_remember.*
+
+class RememberFragment:BaseFragment(), AudioUtils.OnAudioStatusUpdateListener {
+    override fun contentViewId() = R.layout.fragmetn_remember
+
+    var handler:Handler? = null
+
+    private val index by lazy { arguments?.getInt("index")?:0 }
+    private val data by lazy {
+        (requireActivity() as ListenStoryActivity).data
+    }
+
+    private val PLAY_VOICE = 1
+    val player by lazy { AudioUtils() }
+
+    var playing = false //播放中,不能有任何操作
+
+    override fun onFirstVisibleToUser() {
+        player.setOnAudioStatusUpdateListener(this)
+        player.stopPlayMusic()
+        handler = object : Handler(Looper.getMainLooper()){
+            override fun handleMessage(msg: Message) {
+                super.handleMessage(msg)
+                when(msg.what){
+                    PLAY_VOICE->{
+                        if (!playing&&isAdded)
+                            player.startPlayMusic(requireContext(),data!!.storyList[index].correct)
+                    }
+                }
+            }
+        }
+        data?.storyList?.get(index)?.apply {
+            iv_1.setImageURI(img)
+        }
+        recover()
+        setOnClick()
+    }
+
+    private fun setOnClick() {
+        cl_voice.clickDelay {
+            if (playing)
+                return@clickDelay
+            handler?.sendEmptyMessage(PLAY_VOICE)
+        }
+    }
+
+    /**
+     * 重置
+     */
+    fun recover() {
+        handler?.sendEmptyMessageDelayed(PLAY_VOICE,2000)
+    }
+
+    /**
+     * 翻页调用
+     */
+    fun stopVoice(){
+        handler?.removeMessages(PLAY_VOICE)
+        player.stopPlayMusic()
+    }
+
+    companion object{
+        /**
+         * @param index 题组号
+         */
+        fun getInstance(index:Int):RememberFragment{
+            val listenFragment = RememberFragment()
+            listenFragment.arguments = bundleOf("index" to index)
+            return listenFragment
+        }
+    }
+
+    override fun onUpdate(db: Double, time: Long) {
+    }
+
+    override fun onStop(filePath: String?) {
+    }
+
+    override fun onStartPlay() {
+        playing = true
+        iv1.gone()
+        iv2.gone()
+        iv_playing.visible()
+    }
+
+    override fun onFinishPlay() {
+        playing = false
+        iv1.visible()
+        iv2.visible()
+        iv_playing.gone()
+    }
+
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/dollearn/student/ui/home/ResultActivity.kt b/app/src/main/java/com/dollearn/student/ui/home/ResultActivity.kt
index ab565eb..d3db8d0 100644
--- a/app/src/main/java/com/dollearn/student/ui/home/ResultActivity.kt
+++ b/app/src/main/java/com/dollearn/student/ui/home/ResultActivity.kt
@@ -1,6 +1,8 @@
 package com.dollearn.student.ui.home
 
 import android.content.Context
+import cn.sinata.xldutils.gone
+import cn.sinata.xldutils.visible
 import com.dollearn.student.MainActivity
 import com.dollearn.student.R
 import com.dollearn.student.network.HttpManager
@@ -27,8 +29,14 @@
     private val score by lazy { intent.getIntExtra("score",0) }
     private val time by lazy { intent.getIntExtra("time",0) }
 
+    private val difficulty by lazy { intent.getIntExtra("difficulty",0) } //游戏难度
+
     override fun initClick() {
         tv_last.setOnClickListener {
+            startActivity<MainActivity>()
+        }
+
+        tv_back.setOnClickListener {
             startActivity<MainActivity>()
         }
 
@@ -45,14 +53,33 @@
         tv_fault.text = "${total-right}次"
         val rate = (right * 100) / total
         tv_rate.text = "正确率:$rate%"
-
-        HttpManager.completeLearning(rate,time,day,week,season,type,id?:"").request(this){_,data->
+        when(type){
+            6->{
+                title = "超级听力"
+                tv_back.visible()
+                tv_last.gone()
+                tv_exit.gone()
+                HttpManager.gameAchievement(rate,difficulty,id?:"","超级听力",time).request(this){_,data->
+                }
+            }
+            8->{
+                tv_back.visible()
+                tv_last.gone()
+                tv_exit.gone()
+                HttpManager.completeStory(rate,type,id?:"").request(this){_,data->
+                }
+            }
+            else->{
+                HttpManager.completeLearning(rate,time,day,week,season,type,id?:"").request(this){_,data->
+                }
+            }
         }
     }
 
     companion object{
-        fun startResult(context:Context,day:Int,week:Int,season:Int,type:Int,total:Int,right:Int,score:Int,time:Int,id:String){
-            context.startActivity<ResultActivity>("day" to day,"week" to week,"season" to season,"type" to type,"total" to total,"right" to right,"score" to score,"time" to time,"id" to id)
+        fun startResult(context:Context,day:Int,week:Int,season:Int,type:Int,total:Int,right:Int,score:Int,time:Int,id:String,difficulty:Int? = null){
+            context.startActivity<ResultActivity>("day" to day,"week" to week,"season" to season,"type" to type,"total" to total,"right" to right,"score" to score,
+                "time" to time,"id" to id,"difficulty" to difficulty)
         }
     }
 }
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
new file mode 100644
index 0000000..e3332e5
--- /dev/null
+++ b/app/src/main/java/com/dollearn/student/ui/home/SuperListenActivity.kt
@@ -0,0 +1,210 @@
+package com.dollearn.student.ui.home
+
+import android.os.Handler
+import android.os.Looper
+import android.os.Message
+import android.util.Log
+import android.view.View
+import androidx.recyclerview.widget.GridLayoutManager
+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.dialog.CountdownDialog
+import com.dollearn.student.dialog.DifficultyDialog
+import com.dollearn.student.network.HttpManager
+import com.dollearn.student.network.entity.GameBean
+import com.dollearn.student.network.entity.Subject
+import com.dollearn.student.network.request
+import com.dollearn.student.ui.TransparentStatusBarActivity
+import com.dollearn.student.ui.home.adapter.GameAdapter
+import com.dollearn.student.utils.AudioUtils
+import com.dollearn.student.utils.interfaces.StringCallback
+import kotlinx.android.synthetic.main.activity_super_listen.*
+import kotlinx.android.synthetic.main.fragmetn_look_img.*
+
+class SuperListenActivity : TransparentStatusBarActivity(), AudioUtils.OnAudioStatusUpdateListener {
+    override fun setContentView() = R.layout.activity_super_listen
+
+
+    private val week by lazy {
+        intent.getIntExtra("week",0)
+    }
+    private val season by lazy {
+        intent.getIntExtra("season",0)
+    }
+    private var data:GameBean? = null
+    private var index = 0
+    private var handler:Handler? = null
+
+    private var difficulty = 0 //难度
+
+    private val TAG = "Listen====>"
+
+    private val list = arrayListOf<Subject>()
+    private val adapter = GameAdapter(list)
+
+    private val PLAY_VOICE = 1
+    private val COUNT_DOWN = 2
+    private val STUDY_TIME = 3
+
+    private val player by lazy { AudioUtils() }
+
+    private val voiceList = arrayListOf<String>() //声音按顺序播放
+
+    private var TIME = 10 //每题答题时间
+    private var countTime = 10 //倒计时计数
+
+    var totalCount = 0 //总答题次数
+    var rightCount = 0 //正确答题次数
+    var time = 0 //学习秒数
+
+    override fun initClick() {
+        adapter.setOnItemClickListener { view, position ->
+            Log.e(TAG,"点击图片:${list[position].name}")
+            Log.e(TAG,"音频position:${index}")
+            Log.e(TAG,"音频路径:${voiceList[index]}")
+
+            val subject = data!!.subjectList[data!!.subjectList.map { it.correct }.indexOf(voiceList[index])] //当前音频对应题目
+            Log.e(TAG,"正确答案:${subject.name}")
+
+            totalCount++
+
+            handler?.removeMessages(COUNT_DOWN) //选择答案后,停止倒计时
+            if (list[position].id == subject.id){
+                rightCount++
+                subject.completed = true
+                subject.right = true
+                handler?.sendEmptyMessage(PLAY_VOICE)
+                adapter.notifyItemChanged(position)
+            }else{
+                subject.completed = true
+                subject.right = false
+                index++
+                startGame()
+            }
+        }
+
+        tv_exit.setOnClickListener {
+            if (tv_exit.text == "提交"){
+                ResultActivity.startResult(this,0,0,0,6,totalCount,rightCount,list.filter { it.right }.sumBy { 1 },time,data!!.data.id)
+                finish()
+            }else
+                finish()
+        }
+    }
+
+    override fun initView() {
+        tv_sort.postDelayed({
+             val difficultyDialog = DifficultyDialog()
+            difficultyDialog.setCallback(object :DifficultyDialog.OnClickCallback{
+                override fun onOk(d: Int) {
+                    difficulty = d
+                    HttpManager.gameHearing(season,week,difficulty).request(this@SuperListenActivity){_,data->
+                        difficultyDialog.dismissAllowingStateLoss()
+                        this@SuperListenActivity.data = data
+                        refreshUi()
+                    }
+                }
+
+                override fun onCancel() {
+                    finish()
+                }
+            })
+            difficultyDialog.show(supportFragmentManager,"dif")
+        },500)
+
+        player.setOnAudioStatusUpdateListener(this)
+        player.stopPlayMusic()
+        handler = object : Handler(Looper.getMainLooper()){
+            override fun handleMessage(msg: Message) {
+                super.handleMessage(msg)
+                when(msg.what){
+                    STUDY_TIME->{
+                        time++
+                        sendEmptyMessageDelayed(STUDY_TIME,1000)
+                    }
+                    PLAY_VOICE->{
+                        if (index<voiceList.size)
+                            player.startPlayMusic(this@SuperListenActivity,voiceList[index])
+                    }
+                    COUNT_DOWN->{
+                        countTime --
+                        tv_tip.text = "请在${countTime}s内选择答案!"
+                        if ( countTime == 0){
+                            index++
+                            startGame()
+                        }else{
+                            sendEmptyMessageDelayed(COUNT_DOWN,1000)
+                        }
+                    }
+                }
+            }
+        }
+    }
+
+    private fun refreshUi() {
+        rv_list.layoutManager = GridLayoutManager(this,5)
+        list.clear()
+        list.addAll(data?.subjectList?: arrayListOf())
+        voiceList.clear()
+        voiceList.addAll(list.map { it.correct }) //声音顺序
+        Log.e(TAG,"声音顺序:${voiceList.joinToString(",,,") { it }}")
+        list.shuffle() //图片随机顺序
+        rv_list.adapter = adapter
+        Log.e(TAG,"图片打乱后顺序:${list.joinToString(",,,") { it.name }}")
+
+        val countdownDialog = CountdownDialog()
+        countdownDialog.callback = object :StringCallback{
+            override fun onResult(rst: String) {
+                index = 0
+                startGame()
+            }
+        }
+        countdownDialog.show(supportFragmentManager,"timer")
+    }
+
+    private fun startGame() {
+        if (index < voiceList.size){
+            Log.e(TAG,"开始答题:index=${index}")
+            tv_sort.text = (index+1).toString()
+            handler?.removeMessages(COUNT_DOWN)
+            countTime = TIME //重置答题时间
+            tv_tip.text = "准备听题"
+            handler?.sendEmptyMessageDelayed(PLAY_VOICE,3000)
+        }else{
+            tv_sort.visibility = View.INVISIBLE
+            tv_tip.text = ""
+            tv_end.text = "已完成全部问题"
+            tv_exit.text = "提交"
+            handler?.removeMessages(STUDY_TIME)
+        }
+    }
+
+    override fun onUpdate(db: Double, time: Long) {
+    }
+
+    override fun onStop(filePath: String?) {
+    }
+
+    override fun onStartPlay() {
+        if (!data!!.subjectList[data!!.subjectList.map { it.correct }.indexOf(voiceList[index])].completed){//首次播放
+            tv_tip.text = "请在${countTime}s内选择答案!"
+            handler?.sendEmptyMessageDelayed(COUNT_DOWN,1000)
+        }
+        iv1.gone()
+        iv2.gone()
+        iv_playing.visible()
+    }
+
+    override fun onFinishPlay() {
+        iv1.visible()
+        iv2.visible()
+        iv_playing.gone()
+        if (data!!.subjectList[data!!.subjectList.map { it.correct }.indexOf(voiceList[index])].completed){ //当前题目已作答,3秒后进入下一题
+            index++
+            startGame()
+        }
+    }
+
+}
diff --git a/app/src/main/java/com/dollearn/student/ui/home/WeekendFragment.kt b/app/src/main/java/com/dollearn/student/ui/home/WeekendFragment.kt
index a7b3608..6cb5290 100644
--- a/app/src/main/java/com/dollearn/student/ui/home/WeekendFragment.kt
+++ b/app/src/main/java/com/dollearn/student/ui/home/WeekendFragment.kt
@@ -3,7 +3,10 @@
 import androidx.core.os.bundleOf
 import cn.sinata.xldutils.fragment.BaseFragment
 import com.dollearn.student.R
+import com.dollearn.student.network.HttpManager
+import com.dollearn.student.network.requestByF
 import kotlinx.android.synthetic.main.fragment_weekend.*
+import org.jetbrains.anko.support.v4.startActivity
 
 class WeekendFragment : BaseFragment() {
     override fun contentViewId() = R.layout.fragment_weekend
@@ -14,11 +17,37 @@
     private val week by lazy {
         (requireActivity() as ScheduleActivity).week
     }
+    private val season by lazy {
+        (requireActivity() as ScheduleActivity).season
+    }
 
     override fun onFirstVisibleToUser() {
         if (day == 7){
             tv_name_1.text = "自主故事1—看图配音"
             tv_name_2.text = "自主故事2—框架记忆"
+            cl_1.setOnClickListener {
+                showDialog("加载题目...")
+                HttpManager.lookPictureDbu(season, week).requestByF(this){_,data->
+                    startActivity<LookImgActivity>("data" to data,"week" to week,"season" to season)
+                }
+            }
+            cl_2.setOnClickListener {
+                showDialog("加载题目...")
+                HttpManager.frameworkMemory(season, week).requestByF(this){_,data->
+                    startActivity<ListenStoryActivity>("data" to data,"week" to week,"season" to season)
+                }
+            }
+        }
+        if (day == 6){
+            cl_1.setOnClickListener {
+                startActivity<SuperListenActivity>("week" to week,"season" to season)
+            }
+            cl_2.setOnClickListener {
+                showDialog("加载题目...")
+                HttpManager.gameMemory(season, week).requestByF(this){_,data->
+                    startActivity<MemoryActivity>("data" to data,"week" to week,"season" to season)
+                }
+            }
         }
     }
 
diff --git a/app/src/main/java/com/dollearn/student/ui/home/adapter/CardAdapter.kt b/app/src/main/java/com/dollearn/student/ui/home/adapter/CardAdapter.kt
new file mode 100644
index 0000000..2400b9d
--- /dev/null
+++ b/app/src/main/java/com/dollearn/student/ui/home/adapter/CardAdapter.kt
@@ -0,0 +1,51 @@
+package com.dollearn.student.ui.home.adapter
+
+import android.view.View
+import cn.sinata.xldutils.adapter.HFRecyclerAdapter
+import cn.sinata.xldutils.adapter.util.ViewHolder
+import cn.sinata.xldutils.gone
+import cn.sinata.xldutils.visible
+import com.dollearn.student.R
+import com.dollearn.student.network.entity.Card
+import com.dollearn.student.utils.ViewAnimUtils
+import kotlinx.android.synthetic.main.fragment_q_a.*
+import java.util.ArrayList
+
+class CardAdapter(list: ArrayList<Card>):HFRecyclerAdapter<Card>(list, R.layout.item_card) {
+    override fun onBind(holder: ViewHolder, position: Int, data: Card) {
+        val frame = holder.bind<View>(R.id.frame)
+        val back = holder.bind<View>(R.id.back)
+        val front = holder.bind<View>(R.id.front)
+        frame.setOnClickListener {
+            flip(position,frame,back, front)
+        }
+        if (data.isBack){
+            back.visible()
+            front.gone()
+        }else{
+            back.gone()
+            front.visible()
+        }
+    }
+
+    private fun flip(position: Int,parent:View,back: View,front: View){
+        var direction = 1
+        if (back.isShown) {
+            direction = -1
+        }
+        ViewAnimUtils.flip(parent, 300, direction)
+        parent.postDelayed({
+            mData[position].isBack = direction != -1
+            switchViewVisibility(back, front) },300)
+    }
+
+    private fun switchViewVisibility(back:View,front:View) {
+        if (back.isShown) {
+            back.visibility = View.GONE
+            front.visibility = View.VISIBLE
+        } else {
+            back.visibility = View.VISIBLE
+            front.visibility = View.GONE
+        }
+    }
+}
diff --git a/app/src/main/java/com/dollearn/student/ui/home/adapter/GameAdapter.kt b/app/src/main/java/com/dollearn/student/ui/home/adapter/GameAdapter.kt
new file mode 100644
index 0000000..21a4003
--- /dev/null
+++ b/app/src/main/java/com/dollearn/student/ui/home/adapter/GameAdapter.kt
@@ -0,0 +1,22 @@
+package com.dollearn.student.ui.home.adapter
+
+import android.view.View
+import cn.sinata.xldutils.adapter.HFRecyclerAdapter
+import cn.sinata.xldutils.adapter.util.ViewHolder
+import com.dollearn.student.R
+import com.dollearn.student.network.entity.Subject
+import com.dollearn.student.ui.home.SuperListenActivity
+import com.dollearn.student.utils.extention.clickDelay
+import com.facebook.drawee.view.SimpleDraweeView
+import java.util.ArrayList
+
+class GameAdapter(list: ArrayList<Subject>):HFRecyclerAdapter<Subject>(list, R.layout.item_game_1) {
+    override fun onBind(holder: ViewHolder, position: Int, data: Subject) {
+        holder.bind<SimpleDraweeView>(R.id.iv_img).setImageURI(data.img)
+        val view = holder.bind<View>(R.id.cl_voice_end_1)
+        view.visibility = if (data.right) View.VISIBLE else View.GONE
+        view.clickDelay {
+//            (context as SuperListenActivity)
+        }
+    }
+}
diff --git a/app/src/main/java/com/dollearn/student/ui/shop/ExchangeActivity.kt b/app/src/main/java/com/dollearn/student/ui/shop/ExchangeActivity.kt
index 3d99499..b533963 100644
--- a/app/src/main/java/com/dollearn/student/ui/shop/ExchangeActivity.kt
+++ b/app/src/main/java/com/dollearn/student/ui/shop/ExchangeActivity.kt
@@ -96,11 +96,11 @@
             tv_goods_count.text = "1"
             tv_total_score.text = good.integral.toString()
             tv_score.text = good.integral.toString()
-            if (recipient.id.isNullOrEmpty()){
+            if (recipient?.id.isNullOrEmpty()){
                 tv_empty.visible()
             }else{
-                tv_address.text = recipient.province+recipient.city+recipient.address
-                tv_user.text = "%s | %s".format(recipient.recipient,recipient.recipientPhone)
+                tv_address.text = recipient?.province+recipient?.city+recipient?.address
+                tv_user.text = "%s | %s".format(recipient?.recipient,recipient?.recipientPhone)
             }
         }
     }
diff --git a/app/src/main/java/com/dollearn/student/utils/ViewAnimUtils.java b/app/src/main/java/com/dollearn/student/utils/ViewAnimUtils.java
new file mode 100644
index 0000000..6849143
--- /dev/null
+++ b/app/src/main/java/com/dollearn/student/utils/ViewAnimUtils.java
@@ -0,0 +1,47 @@
+package com.dollearn.student.utils;
+
+import android.animation.AnimatorSet;
+import android.animation.ObjectAnimator;
+import android.view.View;
+
+/**
+ * @author payge view动画工具类
+ */
+public class ViewAnimUtils {
+
+    /**
+     * 水平翻转
+     * @param view target
+     * @param duration time
+     * @param direction 只能传1或-1,1为从左开始翻转,-1位从右开始翻转
+     * @return 动画集合
+     */
+    public static AnimatorSet flip(View view, int duration, int direction) {
+        if (direction != 1 && direction != -1) direction = 1;
+        view.setCameraDistance(16000*view.getResources().getDisplayMetrics().density);
+        AnimatorSet animSet = new AnimatorSet();
+        ObjectAnimator rotationY = new ObjectAnimator();
+        rotationY.setDuration(duration).setPropertyName("rotationY");
+        rotationY.setFloatValues(0, -90*direction);
+        ObjectAnimator _rotationY = new ObjectAnimator();
+        _rotationY.setDuration(duration).setPropertyName("rotationY");
+        _rotationY.setFloatValues(90*direction, 0);
+        _rotationY.setStartDelay(duration);
+        ObjectAnimator scale = new ObjectAnimator();
+        scale.setDuration(duration).setPropertyName("scaleY");
+        scale.setFloatValues(1, 0.94f);
+        ObjectAnimator _scale = new ObjectAnimator();
+        _scale.setDuration(duration).setPropertyName("scaleY");
+        _scale.setFloatValues(0.94f, 1);
+        _scale.setStartDelay(duration);
+        animSet.setTarget(view);
+        rotationY.setTarget(view);
+        _rotationY.setTarget(view);
+        scale.setTarget(view);
+        _scale.setTarget(view);
+        animSet.playTogether(rotationY, _rotationY, scale, _scale);
+        animSet.start();
+        return animSet;
+    }
+
+}
diff --git a/app/src/main/res/drawable/bg_yellow_circle.xml b/app/src/main/res/drawable/bg_yellow_circle.xml
new file mode 100644
index 0000000..458dac3
--- /dev/null
+++ b/app/src/main/res/drawable/bg_yellow_circle.xml
@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="utf-8"?>
+<shape xmlns:android="http://schemas.android.com/apk/res/android">
+    <solid android:color="#FBCF0F"/>
+    <corners android:radius="20dp"/>
+</shape>
\ No newline at end of file
diff --git a/app/src/main/res/layout/activity_finish_remember.xml b/app/src/main/res/layout/activity_finish_remember.xml
new file mode 100644
index 0000000..f08cd55
--- /dev/null
+++ b/app/src/main/res/layout/activity_finish_remember.xml
@@ -0,0 +1,46 @@
+<?xml version="1.0" encoding="utf-8"?>
+<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:app="http://schemas.android.com/apk/res-auto"
+    android:layout_width="match_parent"
+    android:layout_height="match_parent"
+    xmlns:tools="http://schemas.android.com/tools">
+
+    <androidx.constraintlayout.widget.ConstraintLayout
+        android:layout_width="match_parent"
+        android:layout_height="match_parent"
+        android:background="@drawable/bg_white_8dp"
+        android:layout_marginTop="26dp"
+        android:layout_marginBottom="100dp"
+        android:layout_marginHorizontal="230dp">
+
+        <TextView
+            android:id="@+id/tv_tip"
+            android:layout_width="match_parent"
+            android:layout_height="wrap_content"
+            android:layout_marginTop="26dp"
+            android:drawableTop="@mipmap/successs"
+            android:drawablePadding="27dp"
+            android:gravity="center"
+            android:text="恭喜你,已听完全部故事!获得200积分!"
+            android:textStyle="bold"
+            android:textSize="18sp"
+            android:textColor="@color/textColor"
+            app:layout_constraintTop_toTopOf="parent" />
+
+
+
+        <TextView
+            app:layout_constraintTop_toBottomOf="@id/tv_tip"
+            android:id="@+id/tv_back"
+            android:layout_marginTop="110dp"
+            style="@style/style_btn_cancel"
+            android:layout_width="wrap_content"
+            android:paddingHorizontal="34dp"
+            app:layout_constraintStart_toStartOf="parent"
+            app:layout_constraintEnd_toEndOf="parent"
+            android:layout_height="wrap_content"
+            android:text="返回主页" />
+    </androidx.constraintlayout.widget.ConstraintLayout>
+
+
+</androidx.constraintlayout.widget.ConstraintLayout>
\ No newline at end of file
diff --git a/app/src/main/res/layout/activity_listen_stroy.xml b/app/src/main/res/layout/activity_listen_stroy.xml
new file mode 100644
index 0000000..8744dc0
--- /dev/null
+++ b/app/src/main/res/layout/activity_listen_stroy.xml
@@ -0,0 +1,75 @@
+<?xml version="1.0" encoding="utf-8"?>
+<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
+    android:layout_width="match_parent"
+    android:layout_height="match_parent"
+    xmlns:app="http://schemas.android.com/apk/res-auto">
+
+    <TextView
+        android:id="@+id/tv_last"
+        android:layout_width="124dp"
+        android:layout_height="wrap_content"
+        android:textSize="14sp"
+        android:textColor="@color/colorPrimary"
+        android:background="@drawable/bg_blue_line_4dp"
+        android:text="上一题"
+        android:paddingVertical="10dp"
+        android:visibility="gone"
+        android:gravity="center"
+        app:layout_constraintStart_toStartOf="parent"
+        app:layout_constraintHorizontal_chainStyle="packed"
+        app:layout_constraintEnd_toStartOf="@id/tv_progress"
+        app:layout_constraintBottom_toBottomOf="parent"
+        android:layout_marginBottom="12dp"
+        android:textStyle="bold" />
+    <TextView
+        android:layout_width="155dp"
+        android:layout_height="wrap_content"
+        android:id="@+id/tv_progress"
+        app:layout_constraintStart_toEndOf="@id/tv_last"
+        app:layout_constraintEnd_toStartOf="@id/tv_next"
+        app:layout_constraintBaseline_toBaselineOf="@id/tv_exit"
+        android:gravity="center"
+        android:textStyle="bold"
+        android:textSize="14sp"
+        android:textColor="@color/textColor"
+        android:text="0/0"/>
+
+    <TextView
+        android:id="@+id/tv_next"
+        android:layout_width="124dp"
+        android:layout_height="wrap_content"
+        android:textSize="14sp"
+        android:textColor="@color/colorPrimary"
+        android:background="@drawable/bg_blue_line_4dp"
+        android:text="下一题"
+        android:paddingVertical="10dp"
+        android:gravity="center"
+        app:layout_constraintStart_toEndOf="@id/tv_progress"
+        app:layout_constraintEnd_toStartOf="@id/tv_exit"
+        app:layout_constraintBottom_toBottomOf="parent"
+        android:layout_marginBottom="12dp"
+        android:textStyle="bold" />
+    <TextView
+        android:id="@+id/tv_exit"
+        android:layout_width="124dp"
+        android:layout_height="wrap_content"
+        android:textSize="14sp"
+        android:textColor="@color/white"
+        android:background="@drawable/bg_blue_4dp"
+        android:text="退出"
+        android:paddingVertical="10dp"
+        android:layout_marginStart="30dp"
+        app:layout_goneMarginStart="0dp"
+        android:gravity="center"
+        app:layout_constraintStart_toEndOf="@id/tv_next"
+        app:layout_constraintEnd_toEndOf="parent"
+        app:layout_constraintBottom_toBottomOf="parent"
+        android:layout_marginBottom="12dp"
+        android:textStyle="bold" />
+    <com.dollearn.student.views.NoScrollViewPager
+        android:layout_width="match_parent"
+        android:layout_height="0dp"
+        android:id="@+id/view_pager"
+        app:layout_constraintTop_toTopOf="parent"
+        app:layout_constraintBottom_toTopOf="@id/tv_exit"/>
+</androidx.constraintlayout.widget.ConstraintLayout>
\ No newline at end of file
diff --git a/app/src/main/res/layout/activity_memory.xml b/app/src/main/res/layout/activity_memory.xml
new file mode 100644
index 0000000..4399351
--- /dev/null
+++ b/app/src/main/res/layout/activity_memory.xml
@@ -0,0 +1,58 @@
+<?xml version="1.0" encoding="utf-8"?>
+<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:app="http://schemas.android.com/apk/res-auto"
+    android:layout_width="match_parent"
+    android:layout_height="match_parent"
+    app:layoutDescription="@xml/activity_memory_scene">
+
+    <TextView
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:id="@+id/tv_1"
+        app:layout_constraintStart_toStartOf="parent"
+        android:layout_marginStart="40dp"
+        android:textSize="14sp"
+        android:textColor="@color/textColor"
+        app:layout_constraintTop_toTopOf="@id/timer"
+        app:layout_constraintBottom_toBottomOf="@id/timer"
+        android:textStyle="bold"
+        android:text="答题剩余时间:"/>
+
+    <TextView
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:id="@+id/timer"
+        app:layout_constraintStart_toEndOf="@id/tv_1"
+        android:textSize="36sp"
+        android:textColor="@color/colorRed"
+        android:text="0s"
+        android:fontFamily="@font/impact_regular"
+        app:layout_constraintTop_toTopOf="parent"
+        android:layout_marginTop="30dp"/>
+
+    <TextView
+        android:id="@+id/tv_exit"
+        android:layout_width="124dp"
+        android:layout_height="wrap_content"
+        android:textSize="14sp"
+        android:textColor="@color/white"
+        android:background="@drawable/bg_blue_4dp"
+        android:text="退出"
+        android:paddingVertical="10dp"
+        app:layout_goneMarginStart="0dp"
+        android:gravity="center"
+        app:layout_constraintStart_toStartOf="parent"
+        app:layout_constraintEnd_toEndOf="parent"
+        app:layout_constraintBottom_toBottomOf="parent"
+        android:layout_marginBottom="25dp"
+        android:textStyle="bold" />
+
+    <androidx.recyclerview.widget.RecyclerView
+        android:layout_width="match_parent"
+        android:layout_height="0dp"
+        android:id="@+id/rv_list"
+        android:layout_marginHorizontal="30dp"
+        app:layout_constraintTop_toTopOf="parent"
+        app:layout_constraintBottom_toTopOf="@id/tv_exit"
+        android:layout_marginTop="100dp"/>
+</androidx.constraintlayout.widget.ConstraintLayout>
\ No newline at end of file
diff --git a/app/src/main/res/layout/activity_result.xml b/app/src/main/res/layout/activity_result.xml
index deab476..fcbe1fd 100644
--- a/app/src/main/res/layout/activity_result.xml
+++ b/app/src/main/res/layout/activity_result.xml
@@ -43,6 +43,22 @@
         app:layout_constraintBottom_toBottomOf="parent"
         android:layout_marginBottom="12dp"
         android:textStyle="bold" />
+    <TextView
+        android:id="@+id/tv_back"
+        android:layout_width="124dp"
+        android:layout_height="wrap_content"
+        android:textSize="14sp"
+        android:textColor="@color/colorPrimary"
+        android:background="@drawable/bg_blue_line_4dp"
+        android:text="返回主页"
+        android:visibility="invisible"
+        android:paddingVertical="10dp"
+        app:layout_constraintStart_toStartOf="parent"
+        app:layout_constraintEnd_toEndOf="parent"
+        android:gravity="center"
+        app:layout_constraintBottom_toBottomOf="parent"
+        android:layout_marginBottom="12dp"
+        android:textStyle="bold" />
     <androidx.constraintlayout.widget.ConstraintLayout
         android:layout_width="match_parent"
         android:layout_height="0dp"
diff --git a/app/src/main/res/layout/activity_super_listen.xml b/app/src/main/res/layout/activity_super_listen.xml
new file mode 100644
index 0000000..95e7ecd
--- /dev/null
+++ b/app/src/main/res/layout/activity_super_listen.xml
@@ -0,0 +1,110 @@
+<?xml version="1.0" encoding="utf-8"?>
+<androidx.constraintlayout.motion.widget.MotionLayout xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:app="http://schemas.android.com/apk/res-auto"
+    android:layout_width="match_parent"
+    android:layout_height="match_parent"
+    app:layoutDescription="@xml/activity_memory_scene">
+    <TextView
+        android:layout_width="32dp"
+        android:layout_height="32dp"
+        android:id="@+id/tv_sort"
+        app:layout_constraintTop_toTopOf="parent"
+        app:layout_constraintStart_toStartOf="parent"
+        android:layout_marginStart="40dp"
+        android:layout_marginTop="39dp"
+        android:textColor="@color/white"
+        android:text="1"
+        android:gravity="center"
+        android:textSize="16sp"
+        android:textStyle="bold"
+        android:background="@drawable/bg_yellow_circle"/>
+
+    <androidx.constraintlayout.widget.ConstraintLayout
+        android:layout_width="159dp"
+        android:layout_height="52dp"
+        app:layout_constraintStart_toEndOf="@id/tv_sort"
+        app:layout_constraintTop_toTopOf="@id/tv_sort"
+        app:layout_constraintBottom_toBottomOf="@id/tv_sort"
+        android:layout_marginStart="12dp"
+        android:elevation="2dp"
+        android:id="@+id/cl_voice"
+        android:background="@drawable/bg_blue_8dp">
+        <ImageView
+            android:id="@+id/iv1"
+            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"
+            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"
+            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>
+
+    <TextView
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        app:layout_constraintBaseline_toBaselineOf="@id/tv_sort"
+        app:layout_constraintStart_toEndOf="@id/tv_sort"
+        android:layout_marginStart="194dp"
+        android:textColor="@color/colorRed"
+        android:id="@+id/tv_tip"
+        android:textSize="14sp"
+        android:textStyle="bold"
+        android:text="准备听题"/>
+
+    <TextView
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content"
+        app:layout_constraintBaseline_toBaselineOf="@id/tv_sort"
+        android:textColor="@color/colorRed"
+        android:id="@+id/tv_end"
+        android:gravity="center"
+        android:textSize="16sp"
+        android:textStyle="bold"
+        android:text=""/>
+    <TextView
+        android:id="@+id/tv_exit"
+        android:layout_width="124dp"
+        android:layout_height="wrap_content"
+        android:textSize="14sp"
+        android:textColor="@color/white"
+        android:background="@drawable/bg_blue_4dp"
+        android:text="退出"
+        android:paddingVertical="10dp"
+        app:layout_goneMarginStart="0dp"
+        android:gravity="center"
+        app:layout_constraintStart_toStartOf="parent"
+        app:layout_constraintEnd_toEndOf="parent"
+        app:layout_constraintBottom_toBottomOf="parent"
+        android:layout_marginBottom="25dp"
+        android:textStyle="bold" />
+
+    <androidx.recyclerview.widget.RecyclerView
+        android:layout_width="match_parent"
+        android:layout_height="0dp"
+        android:id="@+id/rv_list"
+        android:layout_marginHorizontal="30dp"
+        app:layout_constraintTop_toTopOf="parent"
+        app:layout_constraintBottom_toTopOf="@id/tv_exit"
+        android:layout_marginTop="100dp"/>
+
+</androidx.constraintlayout.motion.widget.MotionLayout>
\ No newline at end of file
diff --git a/app/src/main/res/layout/dialog_countdown.xml b/app/src/main/res/layout/dialog_countdown.xml
new file mode 100644
index 0000000..bfde0a3
--- /dev/null
+++ b/app/src/main/res/layout/dialog_countdown.xml
@@ -0,0 +1,75 @@
+<?xml version="1.0" encoding="utf-8"?>
+<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:app="http://schemas.android.com/apk/res-auto"
+    android:layout_width="match_parent"
+    android:layout_height="wrap_content"
+    android:paddingBottom="20dp"
+    android:background="@drawable/bg_white_10dp">
+    <TextView
+        android:id="@+id/tv_title"
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content"
+        android:layout_marginTop="32dp"
+        android:layout_marginEnd="14dp"
+        android:gravity="center"
+        android:text="提示"
+        android:textColor="@color/textColor"
+        android:textSize="18sp"
+        android:textStyle="bold"
+        app:layout_constraintTop_toTopOf="parent" />
+    <ImageView
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        app:layout_constraintEnd_toEndOf="parent"
+        app:layout_constraintTop_toTopOf="parent"
+        android:padding="10dp"
+        android:visibility="gone"
+        android:layout_marginEnd="6dp"
+        android:layout_marginTop="9dp"
+        android:id="@+id/iv_close"/>
+    <TextView
+        android:id="@+id/tv_msg"
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content"
+        android:layout_marginStart="47dp"
+        android:layout_marginTop="17dp"
+        android:layout_marginEnd="14dp"
+        app:layout_constraintStart_toStartOf="parent"
+        android:gravity="center"
+        android:text="游戏将在倒计时结束后开始,请注意听题!"
+        android:textColor="@color/textColor"
+        android:textStyle="bold"
+        android:textSize="16sp"
+        app:layout_constraintTop_toBottomOf="@id/tv_title" />
+
+
+    <TextView
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:id="@+id/tv_timer"
+        app:layout_constraintTop_toBottomOf="@id/tv_msg"
+        android:layout_marginTop="5dp"
+        app:layout_constraintStart_toStartOf="parent"
+        app:layout_constraintEnd_toEndOf="parent"
+        android:textColor="@color/colorPrimary"
+        android:textSize="60sp"
+        android:fontFamily="@font/impact_regular"
+        android:text="5"/>
+
+    <TextView
+        android:id="@+id/tv_ok"
+        android:layout_width="219dp"
+        android:layout_height="40dp"
+        android:gravity="center"
+        android:text="立即开始"
+        android:textColor="@color/white"
+        android:textSize="15sp"
+        android:textStyle="bold"
+        android:layout_marginTop="10dp"
+        app:layout_constraintEnd_toEndOf="parent"
+        app:layout_constraintStart_toStartOf="parent"
+        android:background="@drawable/bg_btn_dialog_ok"
+        app:layout_constraintTop_toBottomOf="@id/tv_timer"/>
+
+
+</androidx.constraintlayout.widget.ConstraintLayout>
\ No newline at end of file
diff --git a/app/src/main/res/layout/dialog_diff.xml b/app/src/main/res/layout/dialog_diff.xml
new file mode 100644
index 0000000..e9488c3
--- /dev/null
+++ b/app/src/main/res/layout/dialog_diff.xml
@@ -0,0 +1,115 @@
+<?xml version="1.0" encoding="utf-8"?>
+<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:app="http://schemas.android.com/apk/res-auto"
+    android:layout_width="match_parent"
+    android:layout_height="wrap_content"
+    android:paddingBottom="20dp"
+    android:background="@drawable/bg_white_10dp">
+    <TextView
+        android:id="@+id/tv_title"
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content"
+        android:layout_marginTop="32dp"
+        android:layout_marginEnd="14dp"
+        android:gravity="center"
+        android:text="提示"
+        android:textColor="@color/textColor"
+        android:textSize="18sp"
+        android:textStyle="bold"
+        app:layout_constraintTop_toTopOf="parent" />
+    <ImageView
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        app:layout_constraintEnd_toEndOf="parent"
+        app:layout_constraintTop_toTopOf="parent"
+        android:padding="10dp"
+        android:visibility="gone"
+        android:layout_marginEnd="6dp"
+        android:layout_marginTop="9dp"
+        android:id="@+id/iv_close"/>
+    <TextView
+        android:id="@+id/tv_msg"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:layout_marginStart="47dp"
+        android:layout_marginTop="43dp"
+        android:layout_marginEnd="14dp"
+        app:layout_constraintStart_toStartOf="parent"
+        android:gravity="center"
+        android:text="请选择难度:"
+        android:textColor="@color/textColor"
+        android:textStyle="bold"
+        android:textSize="16sp"
+        app:layout_constraintTop_toBottomOf="@id/tv_title" />
+
+    <RadioGroup
+        android:layout_width="0dp"
+        android:layout_height="wrap_content"
+        android:orientation="horizontal"
+        android:id="@+id/rg_diff"
+        app:layout_constraintTop_toTopOf="@id/tv_msg"
+        app:layout_constraintBottom_toBottomOf="@id/tv_msg"
+        app:layout_constraintStart_toEndOf="@id/tv_msg"
+        android:layout_marginEnd="40dp"
+        android:layout_marginStart="8dp"
+        app:layout_constraintEnd_toEndOf="parent">
+        <RadioButton
+            android:id="@+id/rb_0"
+            android:layout_width="0dp"
+            android:layout_height="wrap_content"
+            android:layout_weight="1"
+            android:checked="true"
+            android:button="@drawable/selector_check_radio"
+            android:text="入门级"/>
+        <RadioButton
+            android:id="@+id/rb_1"
+            android:layout_width="0dp"
+            android:layout_height="wrap_content"
+            android:layout_weight="1"
+            android:button="@drawable/selector_check_radio"
+            android:text="中级"/>
+        <RadioButton
+            android:id="@+id/rb_2"
+            android:layout_width="0dp"
+            android:layout_height="wrap_content"
+            android:button="@drawable/selector_check_radio"
+            android:layout_weight="1"
+            android:text="高级"/>
+    </RadioGroup>
+
+    <TextView
+        android:id="@+id/tv_cancel"
+        android:layout_width="0dp"
+        android:layout_height="40dp"
+        android:gravity="center"
+        android:text="关闭"
+        android:textColor="@color/colorPrimary"
+        android:textSize="15sp"
+        app:layout_constraintEnd_toStartOf="@id/tv_ok"
+        app:layout_constraintStart_toStartOf="parent"
+        android:textStyle="bold"
+        android:layout_marginStart="90dp"
+        android:layout_marginEnd="10dp"
+        android:background="@drawable/bg_blue_line_4dp"
+        app:layout_constraintTop_toTopOf="@id/tv_ok" />
+
+
+    <TextView
+        android:id="@+id/tv_ok"
+        android:layout_width="0dp"
+        android:layout_height="40dp"
+        android:gravity="center"
+        android:text="确认"
+        android:textColor="@color/white"
+        android:textSize="15sp"
+        android:layout_marginStart="10dp"
+        android:layout_marginEnd="90dp"
+        android:textStyle="bold"
+        android:layout_marginTop="65dp"
+        app:layout_constraintEnd_toEndOf="parent"
+        app:layout_constraintStart_toEndOf="@id/tv_cancel"
+        android:background="@drawable/bg_btn_dialog_ok"
+        app:layout_constraintTop_toBottomOf="@id/tv_msg"/>
+
+
+</androidx.constraintlayout.widget.ConstraintLayout>
\ No newline at end of file
diff --git a/app/src/main/res/layout/dialog_rule.xml b/app/src/main/res/layout/dialog_rule.xml
index 835a99f..19f9d33 100644
--- a/app/src/main/res/layout/dialog_rule.xml
+++ b/app/src/main/res/layout/dialog_rule.xml
@@ -65,12 +65,12 @@
             android:layout_height="wrap_content"
             android:layout_weight="1"
             android:gravity="center"
-            android:background="@drawable/bg_btn_dialog_cancel"
+            android:background="@drawable/bg_blue_line_4dp"
             android:paddingTop="12dp"
             android:paddingBottom="12dp"
             android:text="不同意并退出"
             android:layout_marginEnd="10dp"
-            android:textColor="@color/white"
+            android:textColor="@color/colorPrimary"
             android:textSize="14sp" />
 
 
diff --git a/app/src/main/res/layout/dialog_tip.xml b/app/src/main/res/layout/dialog_tip.xml
index d1d954f..dc4882c 100644
--- a/app/src/main/res/layout/dialog_tip.xml
+++ b/app/src/main/res/layout/dialog_tip.xml
@@ -48,14 +48,14 @@
             android:layout_height="40dp"
             android:gravity="center"
             android:text="否"
-            android:textColor="@color/white"
+            android:textColor="@color/colorPrimary"
             android:textSize="15sp"
             app:layout_constraintEnd_toStartOf="@id/tv_ok"
             app:layout_constraintStart_toStartOf="parent"
             android:textStyle="bold"
             android:layout_marginStart="90dp"
             android:layout_marginEnd="10dp"
-            android:background="@drawable/bg_btn_dialog_cancel"
+            android:background="@drawable/bg_blue_line_4dp"
             app:layout_constraintTop_toTopOf="@id/tv_ok" />
 
 
diff --git a/app/src/main/res/layout/fragment_match.xml b/app/src/main/res/layout/fragment_match.xml
index 38685cb..94a1415 100644
--- a/app/src/main/res/layout/fragment_match.xml
+++ b/app/src/main/res/layout/fragment_match.xml
@@ -51,7 +51,6 @@
         android:layout_width="0dp"
         android:layout_height="0dp"
         android:padding="4dp"
-        android:elevation="2dp"
         app:layout_constraintDimensionRatio="333:259"
         android:layout_marginTop="104dp"
         app:layout_constraintHorizontal_chainStyle="packed"
@@ -79,12 +78,59 @@
             android:layout_width="wrap_content"
             android:layout_height="wrap_content"
             android:id="@+id/result_1"/>
+
     </androidx.constraintlayout.motion.widget.MotionLayout>
+    <androidx.constraintlayout.widget.ConstraintLayout
+        android:layout_width="0dp"
+        android:layout_height="40dp"
+        app:layout_constraintStart_toStartOf="@id/cl_1"
+        app:layout_constraintEnd_toEndOf="@id/cl_1"
+        app:layout_constraintTop_toTopOf="@id/cl_1"
+        android:layout_margin="4dp"
+        android:id="@+id/cl_voice_end_1_1">
+        <androidx.constraintlayout.widget.ConstraintLayout
+            android:layout_width="match_parent"
+            android:id="@+id/cl_voice_end_1"
+            android:background="@drawable/bg_blue_8dp"
+            android:visibility="gone"
+            android:layout_height="match_parent">
+            <ImageView
+                android:id="@+id/iv1_1_end"
+                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_1_end"
+                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_1_end"
+                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>
+
     <androidx.constraintlayout.motion.widget.MotionLayout
         android:id="@+id/cl_2"
         android:layout_width="0dp"
         android:layout_height="0dp"
-        android:elevation="2dp"
         app:layout_constraintDimensionRatio="333:259"
         android:padding="4dp"
         app:layoutDescription="@xml/fragment_listen_scene_result_2"
@@ -110,12 +156,59 @@
             android:layout_height="wrap_content"
             android:id="@+id/result_2"/>
     </androidx.constraintlayout.motion.widget.MotionLayout>
+    <androidx.constraintlayout.widget.ConstraintLayout
+        android:layout_width="0dp"
+        android:layout_height="40dp"
+        app:layout_constraintStart_toStartOf="@id/cl_2"
+        app:layout_constraintEnd_toEndOf="@id/cl_2"
+        app:layout_constraintTop_toTopOf="@id/cl_2"
+        android:layout_margin="4dp"
+        android:id="@+id/cl_voice_end_2_1">
+        <androidx.constraintlayout.widget.ConstraintLayout
+            android:layout_width="match_parent"
+            android:id="@+id/cl_voice_end_2"
+            android:background="@drawable/bg_blue_8dp"
+            android:visibility="gone"
+            android:layout_height="match_parent">
+            <ImageView
+                android:id="@+id/iv1_2_end"
+                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_end"
+                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_end"
+                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>
+
     <androidx.constraintlayout.motion.widget.MotionLayout
         android:id="@+id/cl_3"
         android:layout_width="0dp"
         android:layout_height="0dp"
         android:padding="4dp"
-        android:elevation="2dp"
+        
         app:layoutDescription="@xml/fragment_listen_scene_result_3"
         app:layout_constraintStart_toStartOf="@id/cl_1"
         app:layout_constraintEnd_toEndOf="@id/cl_1"
@@ -144,12 +237,61 @@
             app:layout_constraintBottom_toBottomOf="@id/iv_3"
             android:id="@+id/result_3"
             />
+
     </androidx.constraintlayout.motion.widget.MotionLayout>
+
+    <androidx.constraintlayout.widget.ConstraintLayout
+        android:layout_width="0dp"
+        android:layout_height="40dp"
+        app:layout_constraintStart_toStartOf="@id/cl_3"
+        app:layout_constraintEnd_toEndOf="@id/cl_3"
+        app:layout_constraintTop_toTopOf="@id/cl_3"
+        android:layout_margin="4dp"
+        android:id="@+id/cl_voice_end_3_1">
+        <androidx.constraintlayout.widget.ConstraintLayout
+            android:layout_width="match_parent"
+            android:id="@+id/cl_voice_end_3"
+            android:background="@drawable/bg_blue_8dp"
+            android:visibility="gone"
+            android:layout_height="match_parent">
+            <ImageView
+                android:id="@+id/iv1_3_end"
+                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_end"
+                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_end"
+                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>
+
+
     <androidx.constraintlayout.motion.widget.MotionLayout
         android:id="@+id/cl_4"
         android:layout_width="0dp"
         android:layout_height="0dp"
-        android:elevation="2dp"
         android:padding="4dp"
         app:layout_constraintStart_toStartOf="@id/cl_2"
         app:layout_constraintEnd_toEndOf="@id/cl_2"
@@ -173,13 +315,62 @@
             android:layout_width="wrap_content"
             android:layout_height="wrap_content"
             android:id="@+id/result_4" />
+
     </androidx.constraintlayout.motion.widget.MotionLayout>
+
+
+    <androidx.constraintlayout.widget.ConstraintLayout
+        android:layout_width="0dp"
+        android:layout_height="40dp"
+        app:layout_constraintStart_toStartOf="@id/cl_4"
+        app:layout_constraintEnd_toEndOf="@id/cl_4"
+        app:layout_constraintTop_toTopOf="@id/cl_4"
+        android:layout_margin="4dp"
+        android:id="@+id/cl_voice_end_4_1">
+        <androidx.constraintlayout.widget.ConstraintLayout
+            android:layout_width="match_parent"
+            android:id="@+id/cl_voice_end_4"
+            android:background="@drawable/bg_blue_8dp"
+            android:visibility="gone"
+            android:layout_height="match_parent">
+            <ImageView
+                android:id="@+id/iv1_4_end"
+                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_end"
+                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_end"
+                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>
 
     <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_1"
         app:layout_constraintStart_toStartOf="@id/line1"
         app:layout_constraintEnd_toEndOf="@id/line1"
@@ -207,8 +398,8 @@
             android:id="@+id/iv_playing_1"
             android:layout_width="wrap_content"
             android:layout_height="wrap_content"
-            android:visibility="gone"
             android:src="@mipmap/bofangzhong"
+            android:visibility="invisible"
             app:layout_constraintTop_toTopOf="parent"
             app:layout_constraintBottom_toBottomOf="parent"
             app:layout_constraintEnd_toEndOf="parent"
@@ -218,7 +409,6 @@
         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"
@@ -257,7 +447,7 @@
         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"
@@ -296,7 +486,7 @@
         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"
@@ -331,5 +521,64 @@
             app:layout_constraintEnd_toEndOf="parent"
             app:layout_constraintStart_toStartOf="parent" />
     </androidx.constraintlayout.widget.ConstraintLayout>
-
+    <LinearLayout
+        android:id="@+id/ll_2"
+        android:layout_width="159dp"
+        android:layout_marginTop="15dp"
+        app:layout_constraintStart_toStartOf="@id/line2"
+        app:layout_constraintEnd_toStartOf="@id/line2"
+        app:layout_constraintTop_toTopOf="parent"
+        android:layout_height="52dp">
+        <View
+            android:layout_width="match_parent"
+            android:layout_height="match_parent"
+            android:id="@+id/cover_2"
+            android:visibility="gone"
+            android:background="@color/page_bg"/>
+    </LinearLayout>
+    <LinearLayout
+        android:id="@+id/ll_3"
+        android:layout_width="159dp"
+        android:layout_marginTop="15dp"
+        app:layout_constraintStart_toStartOf="@id/line3"
+        app:layout_constraintEnd_toStartOf="@id/line3"
+        app:layout_constraintTop_toTopOf="parent"
+        android:layout_height="52dp">
+        <View
+            android:layout_width="match_parent"
+            android:layout_height="match_parent"
+            android:id="@+id/cover_3"
+            android:visibility="gone"
+            android:background="@color/page_bg"/>
+    </LinearLayout>
+    <LinearLayout
+        android:id="@+id/ll_4"
+        android:layout_width="159dp"
+        android:layout_marginTop="15dp"
+        app:layout_constraintStart_toStartOf="@id/line4"
+        app:layout_constraintEnd_toStartOf="@id/line4"
+        app:layout_constraintTop_toTopOf="parent"
+        android:layout_height="52dp">
+        <View
+            android:layout_width="match_parent"
+            android:layout_height="match_parent"
+            android:id="@+id/cover_4"
+            android:visibility="gone"
+            android:background="@color/page_bg"/>
+    </LinearLayout>
+    <LinearLayout
+        android:id="@+id/ll_1"
+        android:layout_width="159dp"
+        android:layout_marginTop="15dp"
+        app:layout_constraintStart_toStartOf="@id/line1"
+        app:layout_constraintEnd_toStartOf="@id/line1"
+        app:layout_constraintTop_toTopOf="parent"
+        android:layout_height="52dp">
+        <View
+            android:layout_width="match_parent"
+            android:layout_height="match_parent"
+            android:id="@+id/cover_1"
+            android:visibility="gone"
+            android:background="@color/page_bg"/>
+    </LinearLayout>
 </androidx.constraintlayout.motion.widget.MotionLayout>
\ No newline at end of file
diff --git a/app/src/main/res/layout/fragment_q_a.xml b/app/src/main/res/layout/fragment_q_a.xml
new file mode 100644
index 0000000..9a7f31f
--- /dev/null
+++ b/app/src/main/res/layout/fragment_q_a.xml
@@ -0,0 +1,574 @@
+<?xml version="1.0" encoding="utf-8"?>
+<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:app="http://schemas.android.com/apk/res-auto"
+    android:layout_width="match_parent"
+    android:layout_height="match_parent"
+    android:id="@+id/motion">
+
+    <View
+        android:id="@+id/center"
+        android:layout_width="1px"
+        android:layout_height="wrap_content"
+        app:layout_constraintEnd_toEndOf="parent"
+        app:layout_constraintStart_toStartOf="parent"
+        app:layout_constraintTop_toTopOf="parent" />
+
+    <androidx.constraintlayout.widget.ConstraintLayout
+        android:id="@+id/cl_voice_1"
+        android:layout_width="159dp"
+        android:layout_height="52dp"
+        android:layout_marginTop="24dp"
+        android:background="@drawable/bg_blue_8dp"
+        app:layout_constraintStart_toStartOf="@id/cl_1"
+        app:layout_constraintTop_toTopOf="parent">
+
+        <ImageView
+            android:id="@+id/iv1_1"
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:src="@mipmap/yuyin"
+            app:layout_constraintBottom_toBottomOf="parent"
+            app:layout_constraintEnd_toEndOf="parent"
+            app:layout_constraintStart_toStartOf="parent"
+            app:layout_constraintTop_toTopOf="parent" />
+
+        <ImageView
+            android:id="@+id/iv2_1"
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:layout_marginEnd="20dp"
+            android:src="@mipmap/play"
+            app:layout_constraintBottom_toBottomOf="parent"
+            app:layout_constraintEnd_toEndOf="parent"
+            app:layout_constraintTop_toTopOf="parent" />
+
+        <ImageView
+            android:id="@+id/iv3_1"
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:layout_marginStart="20dp"
+            android:src="@mipmap/voice_answer"
+            app:layout_constraintBottom_toBottomOf="parent"
+            app:layout_constraintStart_toStartOf="parent"
+            app:layout_constraintTop_toTopOf="parent" />
+
+        <ImageView
+            android:id="@+id/iv_playing_1"
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:src="@mipmap/bofangzhong"
+            android:visibility="gone"
+            app:layout_constraintBottom_toBottomOf="parent"
+            app:layout_constraintEnd_toEndOf="parent"
+            app:layout_constraintStart_toStartOf="parent"
+            app:layout_constraintTop_toTopOf="parent" />
+
+    </androidx.constraintlayout.widget.ConstraintLayout>
+
+    <androidx.constraintlayout.widget.ConstraintLayout
+        android:id="@+id/cl_1"
+        android:layout_width="0dp"
+        android:layout_height="0dp"
+        android:layout_marginTop="96dp"
+        android:layout_marginEnd="30dp"
+        android:layout_marginBottom="8dp"
+        android:background="@drawable/bg_white_8dp"
+        
+        android:padding="4dp"
+        app:layout_constraintBottom_toTopOf="@id/cl_voice_3"
+        app:layout_constraintDimensionRatio="333:259"
+        app:layout_constraintEnd_toStartOf="@id/center"
+        app:layout_constraintTop_toTopOf="parent"
+        app:layout_constraintVertical_chainStyle="packed">
+
+
+        <com.facebook.drawee.view.SimpleDraweeView
+            android:id="@+id/iv_1"
+            android:layout_width="match_parent"
+            android:layout_height="match_parent"
+            app:layout_constraintBottom_toBottomOf="parent"
+            app:layout_constraintTop_toTopOf="parent" />
+
+    </androidx.constraintlayout.widget.ConstraintLayout>
+
+    <androidx.constraintlayout.widget.ConstraintLayout
+        android:id="@+id/cl_voice_3"
+        android:layout_width="159dp"
+        android:layout_height="52dp"
+        android:layout_marginTop="8dp"
+        android:background="@drawable/bg_blue_8dp"
+        app:layout_constraintBottom_toTopOf="@id/cl_3"
+        app:layout_constraintStart_toStartOf="@id/cl_3"
+        app:layout_constraintTop_toBottomOf="@id/cl_1">
+
+        <ImageView
+            android:id="@+id/iv1_3"
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:src="@mipmap/yuyin"
+            app:layout_constraintBottom_toBottomOf="parent"
+            app:layout_constraintEnd_toEndOf="parent"
+            app:layout_constraintStart_toStartOf="parent"
+            app:layout_constraintTop_toTopOf="parent" />
+
+        <ImageView
+            android:id="@+id/iv2_3"
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:layout_marginEnd="20dp"
+            android:src="@mipmap/play"
+            app:layout_constraintBottom_toBottomOf="parent"
+            app:layout_constraintEnd_toEndOf="parent"
+            app:layout_constraintTop_toTopOf="parent" />
+
+        <ImageView
+            android:id="@+id/iv3_3"
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:layout_marginStart="20dp"
+            android:src="@mipmap/voice_answer"
+            app:layout_constraintBottom_toBottomOf="parent"
+            app:layout_constraintStart_toStartOf="parent"
+            app:layout_constraintTop_toTopOf="parent" />
+
+        <ImageView
+            android:id="@+id/iv_playing_3"
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:src="@mipmap/bofangzhong"
+            android:visibility="gone"
+            app:layout_constraintBottom_toBottomOf="parent"
+            app:layout_constraintEnd_toEndOf="parent"
+            app:layout_constraintStart_toStartOf="parent"
+            app:layout_constraintTop_toTopOf="parent" />
+
+    </androidx.constraintlayout.widget.ConstraintLayout>
+
+    <androidx.constraintlayout.widget.ConstraintLayout
+        android:id="@+id/cl_3"
+        android:layout_width="0dp"
+        android:layout_height="0dp"
+        android:layout_marginTop="10dp"
+        android:layout_marginEnd="11dp"
+        android:layout_marginBottom="8dp"
+        android:background="@drawable/bg_white_8dp"
+        
+        android:padding="4dp"
+        app:layout_constraintBottom_toBottomOf="parent"
+        app:layout_constraintDimensionRatio="333:259"
+        app:layout_constraintStart_toStartOf="@id/cl_1"
+        app:layout_constraintTop_toBottomOf="@id/cl_voice_3">
+
+        <com.facebook.drawee.view.SimpleDraweeView
+            android:id="@+id/iv_3"
+            android:layout_width="match_parent"
+            android:layout_height="match_parent"
+            app:actualImageScaleType="centerCrop" />
+    </androidx.constraintlayout.widget.ConstraintLayout>
+
+    <androidx.constraintlayout.widget.ConstraintLayout
+        android:id="@+id/cl_voice_2"
+        android:layout_width="159dp"
+        android:layout_height="52dp"
+        android:layout_marginTop="24dp"
+        android:background="@drawable/bg_blue_8dp"
+        app:layout_constraintStart_toStartOf="@id/cl_2"
+        app:layout_constraintTop_toTopOf="parent">
+
+        <ImageView
+            android:id="@+id/iv1_2"
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:src="@mipmap/yuyin"
+            app:layout_constraintBottom_toBottomOf="parent"
+            app:layout_constraintEnd_toEndOf="parent"
+            app:layout_constraintStart_toStartOf="parent"
+            app:layout_constraintTop_toTopOf="parent" />
+
+        <ImageView
+            android:id="@+id/iv2_2"
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:layout_marginEnd="20dp"
+            android:src="@mipmap/play"
+            app:layout_constraintBottom_toBottomOf="parent"
+            app:layout_constraintEnd_toEndOf="parent"
+            app:layout_constraintTop_toTopOf="parent" />
+
+        <ImageView
+            android:id="@+id/iv3_2"
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:layout_marginStart="20dp"
+            android:src="@mipmap/voice_answer"
+            app:layout_constraintBottom_toBottomOf="parent"
+            app:layout_constraintStart_toStartOf="parent"
+            app:layout_constraintTop_toTopOf="parent" />
+
+        <ImageView
+            android:id="@+id/iv_playing_2"
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:src="@mipmap/bofangzhong"
+            android:visibility="gone"
+            app:layout_constraintBottom_toBottomOf="parent"
+            app:layout_constraintEnd_toEndOf="parent"
+            app:layout_constraintStart_toStartOf="parent"
+            app:layout_constraintTop_toTopOf="parent" />
+
+    </androidx.constraintlayout.widget.ConstraintLayout>
+
+    <androidx.constraintlayout.widget.ConstraintLayout
+        android:id="@+id/cl_2"
+        android:layout_width="0dp"
+        android:layout_height="0dp"
+        android:layout_marginStart="30dp"
+        android:background="@drawable/bg_white_8dp"
+        
+        android:padding="4dp"
+        app:layout_constraintBottom_toBottomOf="@id/cl_1"
+        app:layout_constraintDimensionRatio="333:259"
+        app:layout_constraintStart_toEndOf="@id/center"
+        app:layout_constraintTop_toTopOf="@id/cl_1">
+
+        <com.facebook.drawee.view.SimpleDraweeView
+            android:id="@+id/iv_2"
+            android:layout_width="match_parent"
+            android:layout_height="match_parent"
+            app:actualImageScaleType="centerCrop" />
+    </androidx.constraintlayout.widget.ConstraintLayout>
+
+    <androidx.constraintlayout.widget.ConstraintLayout
+        android:id="@+id/cl_4"
+        android:layout_width="0dp"
+        android:layout_height="0dp"
+        android:layout_marginStart="30dp"
+        android:background="@drawable/bg_white_8dp"
+        
+        android:padding="4dp"
+        app:layout_constraintBottom_toBottomOf="@id/cl_3"
+        app:layout_constraintDimensionRatio="333:259"
+        app:layout_constraintStart_toEndOf="@id/center"
+        app:layout_constraintTop_toTopOf="@id/cl_3">
+
+        <com.facebook.drawee.view.SimpleDraweeView
+            android:id="@+id/iv_4"
+            android:layout_width="match_parent"
+            android:layout_height="match_parent"
+            app:actualImageScaleType="centerCrop" />
+    </androidx.constraintlayout.widget.ConstraintLayout>
+
+
+    <androidx.constraintlayout.widget.ConstraintLayout
+        android:id="@+id/cl_voice_4"
+        android:layout_width="159dp"
+        android:layout_height="52dp"
+        android:background="@drawable/bg_blue_8dp"
+        app:layout_constraintStart_toStartOf="@id/cl_4"
+        app:layout_constraintTop_toTopOf="@id/cl_voice_3">
+
+        <ImageView
+            android:id="@+id/iv1_4"
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:src="@mipmap/yuyin"
+            app:layout_constraintBottom_toBottomOf="parent"
+            app:layout_constraintEnd_toEndOf="parent"
+            app:layout_constraintStart_toStartOf="parent"
+            app:layout_constraintTop_toTopOf="parent" />
+
+        <ImageView
+            android:id="@+id/iv2_4"
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:layout_marginEnd="20dp"
+            android:src="@mipmap/play"
+            app:layout_constraintBottom_toBottomOf="parent"
+            app:layout_constraintEnd_toEndOf="parent"
+            app:layout_constraintTop_toTopOf="parent" />
+
+        <ImageView
+            android:id="@+id/iv3_4"
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:layout_marginStart="20dp"
+            android:src="@mipmap/voice_answer"
+            app:layout_constraintBottom_toBottomOf="parent"
+            app:layout_constraintStart_toStartOf="parent"
+            app:layout_constraintTop_toTopOf="parent" />
+
+        <ImageView
+            android:id="@+id/iv_playing_4"
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:src="@mipmap/bofangzhong"
+            android:visibility="gone"
+            app:layout_constraintBottom_toBottomOf="parent"
+            app:layout_constraintEnd_toEndOf="parent"
+            app:layout_constraintStart_toStartOf="parent"
+            app:layout_constraintTop_toTopOf="parent" />
+
+    </androidx.constraintlayout.widget.ConstraintLayout>
+
+    <View
+        android:id="@+id/position_2"
+        android:layout_width="159dp"
+        android:layout_height="52dp"
+        android:layout_marginEnd="72dp"
+        app:layout_constraintBottom_toBottomOf="parent"
+        app:layout_constraintEnd_toEndOf="parent"
+        app:layout_constraintTop_toTopOf="parent" />
+
+    <View
+        android:id="@+id/position_1"
+        android:layout_width="159dp"
+        android:layout_height="52dp"
+        android:layout_marginEnd="72dp"
+        android:layout_marginBottom="40dp"
+        app:layout_constraintBottom_toTopOf="@id/position_2"
+        app:layout_constraintEnd_toEndOf="parent" />
+
+    <View
+        android:id="@+id/position_3"
+        android:layout_width="159dp"
+        android:layout_height="52dp"
+        android:layout_marginTop="40dp"
+        android:layout_marginEnd="72dp"
+        app:layout_constraintEnd_toEndOf="parent"
+        app:layout_constraintTop_toBottomOf="@id/position_2" />
+
+
+    <androidx.constraintlayout.widget.ConstraintLayout
+        android:id="@+id/cl_answer_1"
+        android:layout_width="159dp"
+        android:layout_height="52dp"
+        android:background="@drawable/bg_blue_8dp"
+        android:visibility="gone"
+        app:layout_constraintStart_toStartOf="@id/position_1"
+        app:layout_constraintTop_toTopOf="@id/position_1">
+
+        <ImageView
+            android:id="@+id/iv1_answer_1"
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:src="@mipmap/yuyin"
+            app:layout_constraintBottom_toBottomOf="parent"
+            app:layout_constraintEnd_toEndOf="parent"
+            app:layout_constraintStart_toStartOf="parent"
+            app:layout_constraintTop_toTopOf="parent" />
+
+        <ImageView
+            android:id="@+id/iv2_answer_1"
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:layout_marginStart="20dp"
+            android:src="@mipmap/voice_answer"
+            app:layout_constraintBottom_toBottomOf="parent"
+            app:layout_constraintStart_toStartOf="parent"
+            app:layout_constraintTop_toTopOf="parent" />
+
+        <ImageView
+            android:id="@+id/iv_playing_answer_1"
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:src="@mipmap/bofangzhong"
+            android:visibility="gone"
+            app:layout_constraintBottom_toBottomOf="parent"
+            app:layout_constraintEnd_toEndOf="parent"
+            app:layout_constraintStart_toStartOf="parent"
+            app:layout_constraintTop_toTopOf="parent" />
+
+        <ImageView
+            android:layout_width="32dp"
+            android:layout_height="32dp"
+            android:src="@mipmap/zhifushibai"
+            app:layout_constraintTop_toTopOf="parent"
+            app:layout_constraintBottom_toBottomOf="parent"
+            android:layout_marginEnd="8dp"
+            app:layout_constraintEnd_toEndOf="parent"
+            android:visibility="gone"
+            android:id="@+id/iv_error_1"/>
+    </androidx.constraintlayout.widget.ConstraintLayout>
+
+    <androidx.constraintlayout.widget.ConstraintLayout
+        android:id="@+id/cl_answer_2"
+        android:layout_width="159dp"
+        android:layout_height="52dp"
+        android:background="@drawable/bg_blue_8dp"
+        android:visibility="gone"
+        app:layout_constraintStart_toStartOf="@id/position_2"
+        app:layout_constraintTop_toTopOf="@id/position_2">
+
+        <ImageView
+            android:id="@+id/iv1_answer_2"
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:src="@mipmap/yuyin"
+            app:layout_constraintBottom_toBottomOf="parent"
+            app:layout_constraintEnd_toEndOf="parent"
+            app:layout_constraintStart_toStartOf="parent"
+            app:layout_constraintTop_toTopOf="parent" />
+
+        <ImageView
+            android:id="@+id/iv2_answer_2"
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:layout_marginStart="20dp"
+            android:src="@mipmap/voice_answer"
+            app:layout_constraintBottom_toBottomOf="parent"
+            app:layout_constraintStart_toStartOf="parent"
+            app:layout_constraintTop_toTopOf="parent" />
+
+        <ImageView
+            android:id="@+id/iv_playing_answer_2"
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:src="@mipmap/bofangzhong"
+            android:visibility="gone"
+            app:layout_constraintBottom_toBottomOf="parent"
+            app:layout_constraintEnd_toEndOf="parent"
+            app:layout_constraintStart_toStartOf="parent"
+            app:layout_constraintTop_toTopOf="parent" />
+
+
+        <ImageView
+            android:layout_width="32dp"
+            android:layout_height="32dp"
+            android:src="@mipmap/zhifushibai"
+            app:layout_constraintTop_toTopOf="parent"
+            app:layout_constraintBottom_toBottomOf="parent"
+            android:layout_marginEnd="8dp"
+            app:layout_constraintEnd_toEndOf="parent"
+            android:visibility="gone"
+            android:id="@+id/iv_error_2"/>
+    </androidx.constraintlayout.widget.ConstraintLayout>
+
+    <androidx.constraintlayout.widget.ConstraintLayout
+        android:id="@+id/cl_answer_3"
+        android:layout_width="159dp"
+        android:layout_height="52dp"
+        android:background="@drawable/bg_blue_8dp"
+        android:visibility="gone"
+        app:layout_constraintStart_toStartOf="@id/position_3"
+        app:layout_constraintTop_toTopOf="@id/position_3">
+
+        <ImageView
+            android:id="@+id/iv1_answer_3"
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:src="@mipmap/yuyin"
+            app:layout_constraintBottom_toBottomOf="parent"
+            app:layout_constraintEnd_toEndOf="parent"
+            app:layout_constraintStart_toStartOf="parent"
+            app:layout_constraintTop_toTopOf="parent" />
+
+        <ImageView
+            android:id="@+id/iv2_answer_3"
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:layout_marginStart="20dp"
+            android:src="@mipmap/voice_answer"
+            app:layout_constraintBottom_toBottomOf="parent"
+            app:layout_constraintStart_toStartOf="parent"
+            app:layout_constraintTop_toTopOf="parent" />
+
+        <ImageView
+            android:id="@+id/iv_playing_answer_3"
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:src="@mipmap/bofangzhong"
+            android:visibility="gone"
+            app:layout_constraintBottom_toBottomOf="parent"
+            app:layout_constraintEnd_toEndOf="parent"
+            app:layout_constraintStart_toStartOf="parent"
+            app:layout_constraintTop_toTopOf="parent" />
+
+
+        <ImageView
+            android:layout_width="32dp"
+            android:layout_height="32dp"
+            android:src="@mipmap/zhifushibai"
+            app:layout_constraintTop_toTopOf="parent"
+            app:layout_constraintBottom_toBottomOf="parent"
+            app:layout_constraintEnd_toEndOf="parent"
+            android:visibility="gone"
+            android:layout_marginEnd="8dp"
+            android:id="@+id/iv_error_3"/>
+    </androidx.constraintlayout.widget.ConstraintLayout>
+
+    <RelativeLayout
+        android:id="@+id/rl_p_1"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:layout_marginStart="10dp"
+        app:layout_constraintStart_toEndOf="@id/position_1"
+        app:layout_constraintTop_toTopOf="@id/position_1">
+
+        <RelativeLayout
+            android:id="@+id/rl_check_1"
+            android:layout_width="52dp"
+            android:layout_height="52dp"
+            android:background="@drawable/bg_blue_line_8dp"
+            android:visibility="gone">
+
+            <View
+                android:id="@+id/dot_1"
+                android:layout_width="18dp"
+                android:layout_height="18dp"
+                android:layout_centerInParent="true"
+                android:background="@drawable/bg_blue_20dp"
+                android:visibility="gone" />
+        </RelativeLayout>
+    </RelativeLayout>
+
+    <RelativeLayout
+        android:id="@+id/rl_p_2"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:layout_marginStart="10dp"
+        app:layout_constraintStart_toEndOf="@id/position_2"
+        app:layout_constraintTop_toTopOf="@id/position_2">
+
+        <RelativeLayout
+            android:id="@+id/rl_check_2"
+            android:layout_width="52dp"
+            android:layout_height="52dp"
+            android:background="@drawable/bg_blue_line_8dp"
+            android:visibility="gone">
+
+            <View
+                android:id="@+id/dot_2"
+                android:layout_width="18dp"
+                android:layout_height="18dp"
+                android:layout_centerInParent="true"
+                android:background="@drawable/bg_blue_20dp"
+                android:visibility="gone" />
+        </RelativeLayout>
+    </RelativeLayout>
+
+    <RelativeLayout
+        android:id="@+id/rl_p_3"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:layout_marginStart="10dp"
+        app:layout_constraintStart_toEndOf="@id/position_3"
+        app:layout_constraintTop_toTopOf="@id/position_3">
+
+        <RelativeLayout
+            android:id="@+id/rl_check_3"
+            android:layout_width="52dp"
+            android:layout_height="52dp"
+            android:background="@drawable/bg_blue_line_8dp"
+            android:visibility="gone">
+
+            <View
+                android:id="@+id/dot_3"
+                android:layout_width="18dp"
+                android:layout_height="18dp"
+                android:layout_centerInParent="true"
+                android:background="@drawable/bg_blue_20dp"
+                android:visibility="gone" />
+        </RelativeLayout>
+    </RelativeLayout>
+
+</androidx.constraintlayout.widget.ConstraintLayout>
\ No newline at end of file
diff --git a/app/src/main/res/layout/fragmetn_look_img.xml b/app/src/main/res/layout/fragmetn_look_img.xml
new file mode 100644
index 0000000..6bf469b
--- /dev/null
+++ b/app/src/main/res/layout/fragmetn_look_img.xml
@@ -0,0 +1,300 @@
+<?xml version="1.0" encoding="utf-8"?>
+<androidx.constraintlayout.motion.widget.MotionLayout xmlns:android="http://schemas.android.com/apk/res/android"
+    android:layout_width="match_parent"
+    android:layout_height="match_parent"
+    android:id="@+id/motion"
+    app:layoutDescription="@xml/scene_fragment_look"
+    xmlns:app="http://schemas.android.com/apk/res-auto">
+
+    <androidx.constraintlayout.widget.ConstraintLayout
+        android:id="@+id/cl_1"
+        android:layout_width="0dp"
+        android:layout_height="0dp"
+        android:padding="4dp"
+        android:elevation="2dp"
+        app:layout_constraintDimensionRatio="6:4"
+        app:layout_constraintTop_toBottomOf="@id/rl_1"
+        android:layout_marginTop="40dp"
+        app:layout_constraintBottom_toBottomOf="parent"
+        android:layout_marginBottom="100dp"
+        android:background="@drawable/bg_white_8dp"
+        app:layout_constraintStart_toStartOf="parent"
+        app:layout_constraintEnd_toEndOf="parent"
+        android:layout_marginEnd="10dp">
+
+        <com.facebook.drawee.view.SimpleDraweeView
+            android:layout_width="match_parent"
+            android:id="@+id/iv_1"
+            app:actualImageScaleType="centerCrop"
+            android:layout_height="match_parent"/>
+
+    </androidx.constraintlayout.widget.ConstraintLayout>
+
+    <RelativeLayout
+        android:id="@+id/rl_2"
+        android:layout_width="159dp"
+        android:layout_height="52dp"
+        app:layout_constraintStart_toStartOf="parent"
+        app:layout_constraintEnd_toEndOf="parent"
+        app:layout_constraintTop_toTopOf="parent"
+        android:layout_marginTop="24dp"
+        android:background="@drawable/bg_blue_8dp">
+        <ImageView
+            android:id="@+id/iv_s_2"
+            android:layout_width="32dp"
+            android:layout_height="32dp"
+            android:src="@mipmap/successs"
+            android:layout_centerInParent="true"/>
+    </RelativeLayout>
+
+    <androidx.constraintlayout.widget.ConstraintLayout
+        android:layout_width="159dp"
+        android:layout_height="52dp"
+        app:layout_constraintStart_toStartOf="parent"
+        app:layout_constraintEnd_toEndOf="parent"
+        app:layout_constraintTop_toTopOf="parent"
+        android:layout_marginTop="24dp"
+        android:elevation="2dp"
+        android:id="@+id/cl_voice2"
+        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" />
+        <ImageView
+            android:layout_width="32dp"
+            android:layout_height="32dp"
+            android:src="@mipmap/zhifushibai"
+            app:layout_constraintTop_toTopOf="parent"
+            app:layout_constraintBottom_toBottomOf="parent"
+            app:layout_constraintStart_toStartOf="parent"
+            app:layout_constraintEnd_toEndOf="parent"
+            android:visibility="gone"
+            android:id="@+id/iv_error_2"/>
+    </androidx.constraintlayout.widget.ConstraintLayout>
+
+
+
+    <RelativeLayout
+        android:id="@+id/rl_1"
+        android:layout_width="159dp"
+        android:layout_height="52dp"
+        app:layout_constraintStart_toStartOf="parent"
+        app:layout_constraintEnd_toStartOf="@id/rl_2"
+        app:layout_constraintTop_toTopOf="parent"
+        android:layout_marginTop="24dp"
+        android:background="@drawable/bg_blue_8dp">
+        <ImageView
+            android:id="@+id/iv_s_1"
+            android:layout_width="32dp"
+            android:layout_height="32dp"
+            android:src="@mipmap/successs"
+            android:layout_centerInParent="true"/>
+    </RelativeLayout>
+    <androidx.constraintlayout.widget.ConstraintLayout
+        android:layout_width="159dp"
+        android:layout_height="52dp"
+        app:layout_constraintStart_toStartOf="@id/rl_1"
+        app:layout_constraintTop_toTopOf="parent"
+        android:layout_marginTop="24dp"
+        android:elevation="2dp"
+        android:id="@+id/cl_voice1"
+        android:background="@drawable/bg_blue_8dp">
+        <ImageView
+            android:id="@+id/iv1_1"
+            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_1"
+            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_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" />
+        <ImageView
+            android:layout_width="32dp"
+            android:layout_height="32dp"
+            android:src="@mipmap/zhifushibai"
+            app:layout_constraintTop_toTopOf="parent"
+            app:layout_constraintBottom_toBottomOf="parent"
+            app:layout_constraintStart_toStartOf="parent"
+            app:layout_constraintEnd_toEndOf="parent"
+            android:visibility="gone"
+            android:id="@+id/iv_error_1"/>
+    </androidx.constraintlayout.widget.ConstraintLayout>
+
+
+    <RelativeLayout
+        android:id="@+id/rl_3"
+        android:layout_width="159dp"
+        android:layout_height="52dp"
+        app:layout_constraintEnd_toEndOf="parent"
+        app:layout_constraintStart_toEndOf="@id/rl_2"
+        app:layout_constraintTop_toTopOf="parent"
+        android:layout_marginTop="24dp"
+        android:background="@drawable/bg_blue_8dp">
+        <ImageView
+            android:id="@+id/iv_s_3"
+            android:layout_width="32dp"
+            android:layout_height="32dp"
+            android:src="@mipmap/successs"
+            android:layout_centerInParent="true"/>
+    </RelativeLayout>
+
+    <androidx.constraintlayout.widget.ConstraintLayout
+        android:layout_width="159dp"
+        android:layout_height="52dp"
+        app:layout_constraintTop_toTopOf="parent"
+        android:layout_marginTop="24dp"
+        app:layout_constraintStart_toStartOf="@id/rl_3"
+        android:elevation="2dp"
+        android:id="@+id/cl_voice3"
+        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" />
+        <ImageView
+            android:layout_width="32dp"
+            android:layout_height="32dp"
+            android:src="@mipmap/zhifushibai"
+            app:layout_constraintTop_toTopOf="parent"
+            app:layout_constraintBottom_toBottomOf="parent"
+            app:layout_constraintStart_toStartOf="parent"
+            app:layout_constraintEnd_toEndOf="parent"
+            android:visibility="gone"
+            android:id="@+id/iv_error_3"/>
+    </androidx.constraintlayout.widget.ConstraintLayout>
+    <RelativeLayout
+        android:id="@+id/rl_p_1"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        app:layout_constraintTop_toTopOf="@id/rl_1"
+        android:layout_marginStart="10dp"
+        app:layout_constraintStart_toEndOf="@id/rl_1">
+        <RelativeLayout
+            android:layout_width="52dp"
+            android:layout_height="52dp"
+            android:background="@drawable/bg_blue_line_8dp"
+            android:visibility="gone"
+            android:id="@+id/rl_check_1">
+            <View
+                android:layout_width="18dp"
+                android:layout_height="18dp"
+                android:id="@+id/dot_1"
+                android:visibility="gone"
+                android:layout_centerInParent="true"
+                android:background="@drawable/bg_blue_20dp"/>
+        </RelativeLayout>
+    </RelativeLayout>
+    <RelativeLayout
+        android:id="@+id/rl_p_2"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        app:layout_constraintTop_toTopOf="@id/rl_2"
+        android:layout_marginStart="10dp"
+        app:layout_constraintStart_toEndOf="@id/rl_2">
+        <RelativeLayout
+            android:layout_width="52dp"
+            android:layout_height="52dp"
+            android:background="@drawable/bg_blue_line_8dp"
+            android:visibility="gone"
+            android:id="@+id/rl_check_2">
+            <View
+                android:layout_width="18dp"
+                android:layout_height="18dp"
+                android:id="@+id/dot_2"
+                android:visibility="gone"
+                android:layout_centerInParent="true"
+                android:background="@drawable/bg_blue_20dp"/>
+        </RelativeLayout>
+    </RelativeLayout>
+    <RelativeLayout
+        android:id="@+id/rl_p_3"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        app:layout_constraintTop_toTopOf="@id/rl_3"
+        android:layout_marginStart="10dp"
+        app:layout_constraintStart_toEndOf="@id/rl_3">
+        <RelativeLayout
+            android:layout_width="52dp"
+            android:layout_height="52dp"
+            android:background="@drawable/bg_blue_line_8dp"
+            android:visibility="gone"
+            android:id="@+id/rl_check_3">
+            <View
+                android:layout_width="18dp"
+                android:layout_height="18dp"
+                android:id="@+id/dot_3"
+                android:visibility="gone"
+                android:layout_centerInParent="true"
+                android:background="@drawable/bg_blue_20dp"/>
+        </RelativeLayout>
+    </RelativeLayout>
+
+</androidx.constraintlayout.motion.widget.MotionLayout>
\ No newline at end of file
diff --git a/app/src/main/res/layout/fragmetn_remember.xml b/app/src/main/res/layout/fragmetn_remember.xml
new file mode 100644
index 0000000..f7ab146
--- /dev/null
+++ b/app/src/main/res/layout/fragmetn_remember.xml
@@ -0,0 +1,70 @@
+<?xml version="1.0" encoding="utf-8"?>
+<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
+    android:layout_width="match_parent"
+    android:layout_height="match_parent"
+    xmlns:app="http://schemas.android.com/apk/res-auto">
+
+    <androidx.constraintlayout.widget.ConstraintLayout
+        android:layout_width="159dp"
+        android:layout_height="52dp"
+        app:layout_constraintTop_toTopOf="parent"
+        app:layout_constraintStart_toStartOf="parent"
+        app:layout_constraintEnd_toEndOf="parent"
+        android:layout_marginTop="24dp"
+        android:elevation="2dp"
+        android:id="@+id/cl_voice"
+        android:background="@drawable/bg_blue_8dp">
+        <ImageView
+            android:id="@+id/iv1"
+            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"
+            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"
+            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:id="@+id/cl_1"
+        android:layout_width="0dp"
+        android:layout_height="0dp"
+        android:padding="4dp"
+        android:elevation="2dp"
+        app:layout_constraintDimensionRatio="6:4"
+        app:layout_constraintTop_toBottomOf="@id/cl_voice"
+        android:layout_marginTop="40dp"
+        app:layout_constraintBottom_toBottomOf="parent"
+        android:layout_marginBottom="100dp"
+        android:background="@drawable/bg_white_8dp"
+        app:layout_constraintStart_toStartOf="parent"
+        app:layout_constraintEnd_toEndOf="parent"
+        android:layout_marginEnd="10dp">
+
+        <com.facebook.drawee.view.SimpleDraweeView
+            android:layout_width="match_parent"
+            android:id="@+id/iv_1"
+            app:actualImageScaleType="centerCrop"
+            android:layout_height="match_parent"/>
+
+    </androidx.constraintlayout.widget.ConstraintLayout>
+</androidx.constraintlayout.widget.ConstraintLayout>
\ No newline at end of file
diff --git a/app/src/main/res/layout/item_card.xml b/app/src/main/res/layout/item_card.xml
new file mode 100644
index 0000000..7d2f7c3
--- /dev/null
+++ b/app/src/main/res/layout/item_card.xml
@@ -0,0 +1,76 @@
+<?xml version="1.0" encoding="utf-8"?>
+<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
+    android:layout_width="match_parent"
+    android:layout_height="wrap_content"
+    xmlns:app="http://schemas.android.com/apk/res-auto">
+    <FrameLayout
+        android:id="@+id/frame"
+        android:layout_width="match_parent"
+        android:layout_height="0dp"
+        app:layout_constraintDimensionRatio="3:2"
+        android:layout_marginHorizontal="9dp"
+        android:layout_marginVertical="8dp"
+        app:layout_constraintTop_toTopOf="parent"
+        app:layout_constraintBottom_toBottomOf="parent">
+        <androidx.constraintlayout.widget.ConstraintLayout
+            android:id="@+id/front"
+            android:layout_width="match_parent"
+            android:layout_height="match_parent">
+            <RelativeLayout
+                android:layout_width="match_parent"
+                android:layout_height="match_parent"
+                android:background="@drawable/bg_blue_8dp"
+                android:id="@+id/rl_voice">
+                <androidx.constraintlayout.widget.ConstraintLayout
+                    android:layout_width="159dp"
+                    android:layout_height="52dp"
+                    android:id="@+id/cl_voice"
+                    android:layout_centerInParent="true"
+                    android:background="@drawable/bg_white_8dp">
+                    <ImageView
+                        android:id="@+id/iv1"
+                        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"
+                        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"
+                        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>
+
+            </RelativeLayout>
+            <com.facebook.drawee.view.SimpleDraweeView
+                android:layout_width="match_parent"
+                android:layout_height="match_parent"
+                android:visibility="gone"
+                android:id="@+id/iv_img"
+                app:roundedCornerRadius="8dp"
+                app:actualImageScaleType="centerCrop"/>
+        </androidx.constraintlayout.widget.ConstraintLayout>
+        <ImageView
+            android:id="@+id/back"
+            android:layout_width="match_parent"
+            android:layout_height="match_parent"
+            android:src="@mipmap/bg_card_back"
+            android:visibility="gone"/>
+    </FrameLayout>
+</androidx.constraintlayout.widget.ConstraintLayout>
\ No newline at end of file
diff --git a/app/src/main/res/layout/item_game_1.xml b/app/src/main/res/layout/item_game_1.xml
new file mode 100644
index 0000000..d542c70
--- /dev/null
+++ b/app/src/main/res/layout/item_game_1.xml
@@ -0,0 +1,90 @@
+<?xml version="1.0" encoding="utf-8"?>
+<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
+    android:layout_width="match_parent"
+    android:layout_height="wrap_content"
+    xmlns:app="http://schemas.android.com/apk/res-auto">
+    <androidx.constraintlayout.motion.widget.MotionLayout
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content"
+        android:id="@+id/motion"
+        android:layout_marginHorizontal="3dp"
+        app:layout_constraintTop_toTopOf="parent"
+        app:layout_constraintBottom_toBottomOf="parent"
+        android:layout_marginBottom="16dp"
+        android:padding="4dp"
+        android:background="@drawable/bg_white_8dp"
+        app:layoutDescription="@xml/item_game_1_scene">
+        <View
+            android:layout_width="match_parent"
+            android:layout_height="40dp"
+            android:background="@color/page_bg"
+            android:id="@+id/top_1"
+            app:layout_constraintTop_toTopOf="parent"/>
+        <com.facebook.drawee.view.SimpleDraweeView
+            android:layout_width="match_parent"
+            android:layout_height="0dp"
+            app:layout_constraintTop_toBottomOf="@id/top_1"
+            android:id="@+id/iv_img"
+            app:actualImageScaleType="centerCrop"
+            app:layout_constraintDimensionRatio="3:2"/>
+        <ImageView
+            android:id="@+id/iv_full"
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:src="@mipmap/quanping"
+            app:layout_constraintEnd_toEndOf="parent"
+            app:layout_constraintBottom_toBottomOf="parent"
+            android:padding="8dp"/>
+        <ImageView
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:id="@+id/result_1"/>
+    </androidx.constraintlayout.motion.widget.MotionLayout>
+    <androidx.constraintlayout.widget.ConstraintLayout
+        android:layout_width="0dp"
+        android:layout_height="40dp"
+        app:layout_constraintStart_toStartOf="@id/motion"
+        app:layout_constraintEnd_toEndOf="@id/motion"
+        app:layout_constraintTop_toTopOf="@id/motion"
+        android:layout_margin="4dp"
+        android:id="@+id/cl_voice_end">
+        <androidx.constraintlayout.widget.ConstraintLayout
+            android:layout_width="match_parent"
+            android:id="@+id/cl_voice_end_1"
+            android:background="@drawable/bg_blue_8dp"
+            android:visibility="gone"
+            android:layout_height="match_parent">
+            <ImageView
+                android:id="@+id/iv1_1_end"
+                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_1_end"
+                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_1_end"
+                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>
+
+</androidx.constraintlayout.widget.ConstraintLayout>
\ No newline at end of file
diff --git a/app/src/main/res/mipmap-xxhdpi/bg_card_back.png b/app/src/main/res/mipmap-xxhdpi/bg_card_back.png
new file mode 100644
index 0000000..fe5a754
--- /dev/null
+++ b/app/src/main/res/mipmap-xxhdpi/bg_card_back.png
Binary files differ
diff --git a/app/src/main/res/mipmap-xxhdpi/ic_launcher.png b/app/src/main/res/mipmap-xxhdpi/ic_launcher.png
index 0af9aa0..86a1813 100644
--- a/app/src/main/res/mipmap-xxhdpi/ic_launcher.png
+++ b/app/src/main/res/mipmap-xxhdpi/ic_launcher.png
Binary files differ
diff --git a/app/src/main/res/mipmap-xxhdpi/voice_answer.png b/app/src/main/res/mipmap-xxhdpi/voice_answer.png
new file mode 100644
index 0000000..8458349
--- /dev/null
+++ b/app/src/main/res/mipmap-xxhdpi/voice_answer.png
Binary files differ
diff --git a/app/src/main/res/mipmap-xxhdpi/voice_question.png b/app/src/main/res/mipmap-xxhdpi/voice_question.png
new file mode 100644
index 0000000..4039a37
--- /dev/null
+++ b/app/src/main/res/mipmap-xxhdpi/voice_question.png
Binary files differ
diff --git a/app/src/main/res/xml/activity_memory_scene.xml b/app/src/main/res/xml/activity_memory_scene.xml
new file mode 100644
index 0000000..87cfb01
--- /dev/null
+++ b/app/src/main/res/xml/activity_memory_scene.xml
@@ -0,0 +1,19 @@
+<?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="1000">
+       <KeyFrameSet>
+       </KeyFrameSet>
+    </Transition>
+
+    <ConstraintSet android:id="@+id/start">
+    </ConstraintSet>
+
+    <ConstraintSet android:id="@+id/end">
+    </ConstraintSet>
+</MotionScene>
\ No newline at end of file
diff --git a/app/src/main/res/xml/item_game_1_scene.xml b/app/src/main/res/xml/item_game_1_scene.xml
new file mode 100644
index 0000000..876b2e5
--- /dev/null
+++ b/app/src/main/res/xml/item_game_1_scene.xml
@@ -0,0 +1,63 @@
+<?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>
+            <KeyAttribute motion:framePosition="10"
+                android:alpha="1"
+                motion:motionTarget="@id/result_1"/>
+            <KeyAttribute motion:framePosition="80"
+                android:alpha="1"
+                motion:motionTarget="@id/result_1"/>
+
+            <KeyAttribute motion:framePosition="20"
+                android:scaleX="0.9"
+                android:scaleY="0.9"
+                motion:motionTarget="@id/result_1"/>
+            <KeyAttribute motion:framePosition="25"
+                android:scaleX="1.1"
+                android:scaleY="1.1"
+                motion:motionTarget="@id/result_1"/>
+            <KeyAttribute motion:framePosition="30"
+                android:scaleX="0.9"
+                android:scaleY="0.9"
+                motion:motionTarget="@id/result_1"/>
+            <KeyAttribute motion:framePosition="35"
+                android:scaleX="1.1"
+                android:scaleY="1.1"
+                motion:motionTarget="@id/result_1"/>
+            <KeyAttribute motion:framePosition="40"
+                android:scaleX="1.0"
+                android:scaleY="1.0"
+                motion:motionTarget="@id/result_1"/>
+        </KeyFrameSet>
+
+    </Transition>
+
+    <ConstraintSet android:id="@+id/start">
+        <Constraint android:id="@+id/result_1"
+            android:alpha="0"
+            motion:layout_constraintStart_toStartOf="@+id/iv_img"
+            motion:layout_constraintEnd_toEndOf="@+id/iv_img"
+            motion:layout_constraintTop_toTopOf="@+id/iv_img"
+            motion:layout_constraintBottom_toBottomOf="@+id/iv_img"
+            android:layout_width="50dp"
+            android:layout_height="50dp"/>
+    </ConstraintSet>
+
+    <ConstraintSet android:id="@+id/end">
+        <Constraint android:id="@+id/result_1"
+            android:alpha="1"
+            motion:layout_constraintStart_toStartOf="@+id/iv_img"
+            motion:layout_constraintEnd_toEndOf="@+id/iv_img"
+            motion:layout_constraintTop_toTopOf="@+id/iv_img"
+            motion:layout_constraintBottom_toBottomOf="@+id/iv_img"
+            android:layout_width="50dp"
+            android:layout_height="50dp"/>
+    </ConstraintSet>
+</MotionScene>
\ No newline at end of file
diff --git a/app/src/main/res/xml/scene_fragment_look.xml b/app/src/main/res/xml/scene_fragment_look.xml
new file mode 100644
index 0000000..9439eab
--- /dev/null
+++ b/app/src/main/res/xml/scene_fragment_look.xml
@@ -0,0 +1,78 @@
+<?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_1">
+        <Constraint android:id="@+id/cl_voice1"
+            motion:layout_constraintStart_toStartOf="@+id/rl_1"
+            motion:layout_constraintTop_toTopOf="parent"
+            android:layout_width="159dp"
+            android:layout_marginTop="24dp"
+            android:layout_height="52dp"/>
+    </ConstraintSet>
+
+    <ConstraintSet android:id="@+id/start_2">
+        <Constraint android:id="@+id/cl_voice2"
+            motion:layout_constraintStart_toStartOf="@+id/rl_2"
+            motion:layout_constraintTop_toTopOf="parent"
+            android:layout_width="159dp"
+            android:layout_marginTop="24dp"
+            android:layout_height="52dp"/>
+    </ConstraintSet>
+
+    <ConstraintSet android:id="@+id/start_3">
+        <Constraint android:id="@+id/cl_voice3"
+            motion:layout_constraintStart_toStartOf="@+id/rl_3"
+            motion:layout_constraintTop_toTopOf="parent"
+            android:layout_width="159dp"
+            android:layout_marginTop="24dp"
+            android:layout_height="52dp"/>
+    </ConstraintSet>
+
+    <ConstraintSet android:id="@+id/end_1">
+        <Constraint android:id="@+id/cl_voice1"
+            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">
+        <Constraint android:id="@+id/cl_voice2"
+            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">
+        <Constraint android:id="@+id/cl_voice3"
+            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>
+
+
+</MotionScene>
\ No newline at end of file

--
Gitblit v1.7.1