Selaa lähdekoodia

1.添加获取moca试题库module

王鹏鹏 2 vuotta sitten
vanhempi
commit
b3a3e371a1
44 muutettua tiedostoa jossa 1652 lisäystä ja 50 poistoa
  1. 7 0
      .idea/misc.xml
  2. 5 0
      baselib/src/main/java/com/yingyangfly/baselib/router/RouterUrlCommon.kt
  3. 7 0
      home/src/main/AndroidManifest.xml
  4. 1 23
      home/src/main/java/com/yingyangfly/home/activity/HomeActivity.kt
  5. 0 21
      home/src/main/java/com/yingyangfly/home/activity/HomeViewModel.kt
  6. 63 0
      home/src/main/java/com/yingyangfly/home/evaluation/EvaluationActivity.kt
  7. 33 0
      home/src/main/java/com/yingyangfly/home/evaluation/EvaluationViewModel.kt
  8. 7 0
      home/src/main/manifest/AndroidManifest.xml
  9. 121 0
      home/src/main/res/layout/activity_evaluation.xml
  10. BIN
      home/src/main/res/mipmap-xxhdpi/icon_bg_mmse.png
  11. BIN
      home/src/main/res/mipmap-xxhdpi/icon_bg_moca.png
  12. BIN
      home/src/main/res/mipmap-xxhdpi/icon_mmse.png
  13. BIN
      home/src/main/res/mipmap-xxhdpi/icon_moca.png
  14. 4 0
      home/src/main/res/values/dimens.xml
  15. 2 0
      home/src/main/res/values/strings.xml
  16. 2 2
      mmse/src/main/java/com/yingyangfly/mmse/fragment/DrawDesignsFragment.kt
  17. 35 0
      moca/src/main/java/com/yingyangfly/moca/adapter/ChoiceAdapter.kt
  18. 37 0
      moca/src/main/java/com/yingyangfly/moca/adapter/NumberAdapter.kt
  19. 38 0
      moca/src/main/java/com/yingyangfly/moca/adapter/SelectedItemAdapter.kt
  20. 17 1
      moca/src/main/java/com/yingyangfly/moca/alternatingconnection/AlternatingConnectionFragment.kt
  21. 82 0
      moca/src/main/java/com/yingyangfly/moca/multiplechoice/MultipleChoiceFragment.kt
  22. 72 0
      moca/src/main/java/com/yingyangfly/moca/signature/SignatureFragment.kt
  23. 357 0
      moca/src/main/java/com/yingyangfly/moca/widget/LinePathView.kt
  24. 5 0
      moca/src/main/res/color/txt_radio_color.xml
  25. 10 0
      moca/src/main/res/drawable/bg_calculation_results.xml
  26. 10 0
      moca/src/main/res/drawable/bg_choice_item.xml
  27. 18 0
      moca/src/main/res/drawable/bg_next_question.xml
  28. 10 0
      moca/src/main/res/drawable/bg_previous_question.xml
  29. 7 0
      moca/src/main/res/drawable/bg_rubber.xml
  30. 13 0
      moca/src/main/res/drawable/bg_selected_choice_item.xml
  31. 15 0
      moca/src/main/res/drawable/bg_selected_item.xml
  32. 13 0
      moca/src/main/res/drawable/bg_unselected_choice_item.xml
  33. 15 0
      moca/src/main/res/drawable/bg_unselected_item.xml
  34. 8 0
      moca/src/main/res/drawable/selector_questions_choice.xml
  35. 8 0
      moca/src/main/res/drawable/selector_questions_radio.xml
  36. 31 3
      moca/src/main/res/layout/fragment_alternating_connection.xml
  37. 116 0
      moca/src/main/res/layout/fragment_multiple_choice.xml
  38. 138 0
      moca/src/main/res/layout/fragment_signature.xml
  39. 66 0
      moca/src/main/res/layout/item_choice.xml
  40. 41 0
      moca/src/main/res/layout/item_number.xml
  41. 32 0
      moca/src/main/res/layout/item_selected_item.xml
  42. 15 0
      moca/src/main/res/navigation/nav_moca.xml
  43. 188 0
      moca/src/main/res/values/dimens.xml
  44. 3 0
      moca/src/main/res/values/strings.xml

+ 7 - 0
.idea/misc.xml

@@ -57,6 +57,7 @@
         <entry key="..\:/workspace/hcp-pad/home/src/main/res/drawable/bg_upgrade_button.xml" value="0.219" />
         <entry key="..\:/workspace/hcp-pad/home/src/main/res/drawable/shape_progress_bar.xml" value="0.219" />
         <entry key="..\:/workspace/hcp-pad/home/src/main/res/drawable/shape_ract_gold.xml" value="0.2185" />
+        <entry key="..\:/workspace/hcp-pad/home/src/main/res/layout/activity_evaluation.xml" value="0.22239583333333332" />
         <entry key="..\:/workspace/hcp-pad/home/src/main/res/layout/activity_home.xml" value="0.2" />
         <entry key="..\:/workspace/hcp-pad/home/src/main/res/layout/fragment_down_load_app.xml" value="0.21064814814814814" />
         <entry key="..\:/workspace/hcp-pad/home/src/main/res/layout/item_game.xml" value="0.16" />
@@ -119,9 +120,15 @@
         <entry key="..\:/workspace/hcp-pad/mmse/src/main/res/layout/item_number.xml" value="0.23697916666666666" />
         <entry key="..\:/workspace/hcp-pad/mmse/src/main/res/layout/item_selected_item.xml" value="0.536" />
         <entry key="..\:/workspace/hcp-pad/mmse/src/main/res/layout/item_year.xml" value="1.0" />
+        <entry key="..\:/workspace/hcp-pad/moca/src/main/res/drawable/bg_rubber.xml" value="0.1615" />
         <entry key="..\:/workspace/hcp-pad/moca/src/main/res/layout/activity_main.xml" value="0.23697916666666666" />
         <entry key="..\:/workspace/hcp-pad/moca/src/main/res/layout/activity_moca.xml" value="0.23697916666666666" />
         <entry key="..\:/workspace/hcp-pad/moca/src/main/res/layout/fragment_alternating_connection.xml" value="0.23697916666666666" />
+        <entry key="..\:/workspace/hcp-pad/moca/src/main/res/layout/fragment_multiple_choice.xml" value="0.23697916666666666" />
+        <entry key="..\:/workspace/hcp-pad/moca/src/main/res/layout/fragment_signature.xml" value="0.23697916666666666" />
+        <entry key="..\:/workspace/hcp-pad/moca/src/main/res/layout/item_choice.xml" value="0.23697916666666666" />
+        <entry key="..\:/workspace/hcp-pad/moca/src/main/res/layout/item_number.xml" value="0.23697916666666666" />
+        <entry key="..\:/workspace/hcp-pad/moca/src/main/res/layout/item_selected_item.xml" value="0.23697916666666666" />
         <entry key="..\:/workspace/hcp-pad/personalcenter/src/main/res/drawable/bg_center.xml" value="0.219" />
         <entry key="..\:/workspace/hcp-pad/personalcenter/src/main/res/drawable/bg_common_head_layout.xml" value="0.219" />
         <entry key="..\:/workspace/hcp-pad/personalcenter/src/main/res/drawable/bg_personal_center.xml" value="0.219" />

+ 5 - 0
baselib/src/main/java/com/yingyangfly/baselib/router/RouterUrlCommon.kt

@@ -110,6 +110,11 @@ object RouterUrlCommon {
      */
     const val versionRecord = "/version/record"
 
+    /**
+     * 专业测评
+     */
+    const val evaluation = "/evaluation/evaluation"
+
     /**
      * MMSE测评
      */

+ 7 - 0
home/src/main/AndroidManifest.xml

@@ -18,6 +18,13 @@
             android:screenOrientation="landscape"
             android:windowSoftInputMode="adjustResize|adjustPan" />
 
+        <activity
+            android:name="com.yingyangfly.home.evaluation.EvaluationActivity"
+            android:configChanges="keyboardHidden|orientation|screenSize"
+            android:launchMode="singleTask"
+            android:screenOrientation="landscape"
+            android:windowSoftInputMode="adjustResize|adjustPan" />
+
         <service
             android:name="com.yingyangfly.home.updater.service.DownloadService"
             android:exported="false" />

+ 1 - 23
home/src/main/java/com/yingyangfly/home/activity/HomeActivity.kt

@@ -5,7 +5,6 @@ import android.text.TextUtils
 import androidx.recyclerview.widget.GridLayoutManager
 import com.alibaba.android.arouter.facade.annotation.Route
 import com.yingyang.home.databinding.ActivityHomeBinding
-import com.yingyangfly.baselib.db.QuestionsBean
 import com.yingyangfly.baselib.dialog.TaskFragment
 import com.yingyangfly.baselib.dialog.TipsDialog
 import com.yingyangfly.baselib.ext.setOnSingleClickListener
@@ -107,7 +106,7 @@ class HomeActivity : BaseMVVMActivity<ActivityHomeBinding, HomeViewModel>() {
             }
             //专业测评
             tvProfessionalEvaluation.setOnSingleClickListener {
-                loadMmseQuestions()
+                JumpUtil.jumpActivity(RouterUrlCommon.evaluation, mContext)
             }
             //健康咨询
             tvHealthCounseling.setOnSingleClickListener {
@@ -501,25 +500,4 @@ class HomeActivity : BaseMVVMActivity<ActivityHomeBinding, HomeViewModel>() {
         }
         super.onDestroy()
     }
-
-    /**
-     * 获取mmse试题库接口
-     */
-    private fun loadMmseQuestions() {
-        if (db != null) {
-            val dao = db?.getQuestionsDao()
-            dao?.deleteAll()
-            val questionsList = mutableListOf<QuestionsBean>()
-            viewModel.getQuestions("MOCA", fail = {
-                it.toast()
-            }, success = {
-                if (it.isNullOrEmpty().not()) {
-                    questionsList.addAll(it!!)
-                    dao?.insertAll(questionsList)
-                }
-                JumpUtil.jumpActivity(RouterUrlCommon.mocaEvaluation, mContext)
-            })
-        }
-    }
-
 }

+ 0 - 21
home/src/main/java/com/yingyangfly/home/activity/HomeViewModel.kt

@@ -1,9 +1,6 @@
 package com.yingyangfly.home.activity
 
-import com.yingyangfly.baselib.db.QuestionsBean
 import com.yingyangfly.baselib.mvvm.BaseViewModel
-import com.yingyangfly.baselib.net.XUtils
-import com.yingyangfly.baselib.utils.GsonUtil
 import com.yingyangfly.home.entity.*
 import com.yingyangfly.home.net.HOME_API
 
@@ -106,22 +103,4 @@ class HomeViewModel : BaseViewModel() {
         success,
         fail
     )
-
-    /**
-     * 获取mmse试题
-     */
-    fun getQuestions(
-        method: String,
-        fail: ((msg: String) -> Unit)? = null,
-        success: ((success: List<QuestionsBean>?) -> Unit)? = null,
-    ) = launchFlow(true) {
-        val requestBean = QuestionsTypeBean().apply {
-            type = method
-        }
-        val body = XUtils.createJson(GsonUtil.GsonString(requestBean))
-        HOME_API.getQuestions(body)
-    }.runUI(
-        success,
-        fail
-    )
 }

+ 63 - 0
home/src/main/java/com/yingyangfly/home/evaluation/EvaluationActivity.kt

@@ -0,0 +1,63 @@
+package com.yingyangfly.home.evaluation
+
+import android.text.TextUtils
+import com.alibaba.android.arouter.facade.annotation.Route
+import com.yingyang.home.databinding.ActivityEvaluationBinding
+import com.yingyangfly.baselib.db.QuestionsBean
+import com.yingyangfly.baselib.ext.setOnSingleClickListener
+import com.yingyangfly.baselib.ext.toast
+import com.yingyangfly.baselib.mvvm.BaseMVVMActivity
+import com.yingyangfly.baselib.router.RouterUrlCommon
+import com.yingyangfly.baselib.utils.JumpUtil
+
+/**
+ * 专业测评
+ */
+@Route(path = RouterUrlCommon.evaluation)
+class EvaluationActivity : BaseMVVMActivity<ActivityEvaluationBinding, EvaluationViewModel>() {
+
+    override fun initViews() {
+
+    }
+
+    override fun initListener() {
+        binding {
+            layoutHome.setOnSingleClickListener {
+                finish()
+            }
+
+            mmseLayout.setOnSingleClickListener {
+                loadData("MMSE")
+            }
+
+            mocaLayout.setOnSingleClickListener {
+                loadData("MOCA")
+            }
+        }
+    }
+
+    override fun initData() {
+
+    }
+
+    private fun loadData(type: String) {
+        if (db != null) {
+            val dao = db?.getQuestionsDao()
+            dao?.deleteAll()
+            val questionsList = mutableListOf<QuestionsBean>()
+            viewModel.getQuestions(type, fail = {
+                it.toast()
+            }, success = {
+                if (it.isNullOrEmpty().not()) {
+                    questionsList.addAll(it!!)
+                    dao?.insertAll(questionsList)
+                }
+                if (TextUtils.equals("MMSE", type)) {
+                    JumpUtil.jumpActivity(RouterUrlCommon.mmseEvaluation, mContext)
+                } else {
+                    JumpUtil.jumpActivity(RouterUrlCommon.mocaEvaluation, mContext)
+                }
+            })
+        }
+    }
+}

+ 33 - 0
home/src/main/java/com/yingyangfly/home/evaluation/EvaluationViewModel.kt

@@ -0,0 +1,33 @@
+package com.yingyangfly.home.evaluation
+
+import com.yingyangfly.baselib.db.QuestionsBean
+import com.yingyangfly.baselib.mvvm.BaseViewModel
+import com.yingyangfly.baselib.net.XUtils
+import com.yingyangfly.baselib.utils.GsonUtil
+import com.yingyangfly.home.entity.QuestionsTypeBean
+import com.yingyangfly.home.net.HOME_API
+
+/**
+ * @author 王鹏鹏
+ * @description 工作台页面ViewModel
+ */
+class EvaluationViewModel : BaseViewModel() {
+
+    /**
+     * 获取mmse试题
+     */
+    fun getQuestions(
+        method: String,
+        fail: ((msg: String) -> Unit)? = null,
+        success: ((success: List<QuestionsBean>?) -> Unit)? = null,
+    ) = launchFlow(true) {
+        val requestBean = QuestionsTypeBean().apply {
+            type = method
+        }
+        val body = XUtils.createJson(GsonUtil.GsonString(requestBean))
+        HOME_API.getQuestions(body)
+    }.runUI(
+        success,
+        fail
+    )
+}

+ 7 - 0
home/src/main/manifest/AndroidManifest.xml

@@ -18,6 +18,13 @@
             android:screenOrientation="landscape"
             android:windowSoftInputMode="adjustResize|adjustPan" />
 
+        <activity
+            android:name="com.yingyangfly.home.evaluation.EvaluationActivity"
+            android:configChanges="keyboardHidden|orientation|screenSize"
+            android:launchMode="singleTask"
+            android:screenOrientation="landscape"
+            android:windowSoftInputMode="adjustResize|adjustPan" />
+
         <service android:name="com.yingyangfly.home.updater.service.DownloadService"
             android:exported="false"/>
 

+ 121 - 0
home/src/main/res/layout/activity_evaluation.xml

@@ -0,0 +1,121 @@
+<?xml version="1.0" encoding="utf-8"?>
+<layout xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:app="http://schemas.android.com/apk/res-auto"
+    xmlns:tools="http://schemas.android.com/tools"
+    tools:ignore="ResourceName">
+
+    <androidx.constraintlayout.widget.ConstraintLayout
+        android:layout_width="match_parent"
+        android:layout_height="match_parent"
+        android:background="@mipmap/icon_uniform_background">
+
+
+        <LinearLayout
+            android:id="@+id/layoutHome"
+            android:layout_width="@dimen/divider_195px"
+            android:layout_height="wrap_content"
+            android:orientation="horizontal"
+            app:layout_constraintStart_toStartOf="parent"
+            app:layout_constraintTop_toTopOf="parent">
+
+            <androidx.appcompat.widget.AppCompatImageView
+                android:layout_width="@dimen/divider_48px"
+                android:layout_height="@dimen/divider_43px"
+                android:layout_marginStart="@dimen/divider_65px"
+                android:layout_marginTop="@dimen/divider_35px"
+                android:background="@mipmap/bg_home" />
+
+            <androidx.appcompat.widget.AppCompatTextView
+                android:layout_width="wrap_content"
+                android:layout_height="wrap_content"
+                android:layout_marginStart="@dimen/divider_14px"
+                android:layout_marginTop="@dimen/divider_38px"
+                android:text="@string/home_pager"
+                android:textColor="@android:color/white"
+                android:textSize="@dimen/divider_28px"
+                android:textStyle="bold" />
+
+        </LinearLayout>
+
+        <androidx.appcompat.widget.AppCompatTextView
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:layout_marginTop="@dimen/divider_32px"
+            android:text="@string/professional_evaluation"
+            android:textColor="@android:color/white"
+            android:textSize="@dimen/divider_34px"
+            android:textStyle="bold"
+            app:layout_constraintEnd_toEndOf="parent"
+            app:layout_constraintStart_toStartOf="parent"
+            app:layout_constraintTop_toTopOf="parent" />
+
+        <androidx.constraintlayout.widget.ConstraintLayout
+            android:id="@+id/mmseLayout"
+            android:layout_width="@dimen/divider_445px"
+            android:layout_height="@dimen/divider_343px"
+            android:layout_marginStart="@dimen/divider_87px"
+            android:background="@mipmap/icon_bg_mmse"
+            app:layout_constraintBottom_toBottomOf="parent"
+            app:layout_constraintStart_toStartOf="parent"
+            app:layout_constraintTop_toTopOf="parent">
+
+            <androidx.appcompat.widget.AppCompatImageView
+                android:id="@+id/mmseImage"
+                android:layout_width="@dimen/divider_119px"
+                android:layout_height="@dimen/divider_119px"
+                android:layout_marginTop="@dimen/divider_75px"
+                android:background="@mipmap/icon_mmse"
+                app:layout_constraintEnd_toEndOf="parent"
+                app:layout_constraintStart_toStartOf="parent"
+                app:layout_constraintTop_toTopOf="parent" />
+
+            <androidx.appcompat.widget.AppCompatTextView
+                android:layout_width="wrap_content"
+                android:layout_height="wrap_content"
+                android:layout_marginTop="@dimen/divider_34px"
+                android:text="@string/mmse_evaluation"
+                android:textColor="@android:color/white"
+                android:textSize="@dimen/divider_42px"
+                android:textStyle="bold"
+                app:layout_constraintEnd_toEndOf="parent"
+                app:layout_constraintStart_toStartOf="parent"
+                app:layout_constraintTop_toBottomOf="@+id/mmseImage" />
+        </androidx.constraintlayout.widget.ConstraintLayout>
+
+        <androidx.constraintlayout.widget.ConstraintLayout
+            android:id="@+id/mocaLayout"
+            android:layout_width="@dimen/divider_445px"
+            android:layout_height="@dimen/divider_343px"
+            android:layout_marginEnd="@dimen/divider_83px"
+            android:background="@mipmap/icon_bg_moca"
+            app:layout_constraintBottom_toBottomOf="parent"
+            app:layout_constraintEnd_toEndOf="parent"
+            app:layout_constraintTop_toTopOf="parent">
+
+            <androidx.appcompat.widget.AppCompatImageView
+                android:id="@+id/mocaImage"
+                android:layout_width="@dimen/divider_119px"
+                android:layout_height="@dimen/divider_119px"
+                android:layout_marginTop="@dimen/divider_75px"
+                android:background="@mipmap/icon_moca"
+                app:layout_constraintEnd_toEndOf="parent"
+                app:layout_constraintStart_toStartOf="parent"
+                app:layout_constraintTop_toTopOf="parent" />
+
+            <androidx.appcompat.widget.AppCompatTextView
+                android:layout_width="wrap_content"
+                android:layout_height="wrap_content"
+                android:layout_marginTop="@dimen/divider_34px"
+                android:text="@string/moca_evaluation"
+                android:textColor="@android:color/white"
+                android:textSize="@dimen/divider_42px"
+                android:textStyle="bold"
+                app:layout_constraintEnd_toEndOf="parent"
+                app:layout_constraintStart_toStartOf="parent"
+                app:layout_constraintTop_toBottomOf="@+id/mocaImage" />
+
+        </androidx.constraintlayout.widget.ConstraintLayout>
+
+
+    </androidx.constraintlayout.widget.ConstraintLayout>
+</layout>

BIN
home/src/main/res/mipmap-xxhdpi/icon_bg_mmse.png


BIN
home/src/main/res/mipmap-xxhdpi/icon_bg_moca.png


BIN
home/src/main/res/mipmap-xxhdpi/icon_mmse.png


BIN
home/src/main/res/mipmap-xxhdpi/icon_moca.png


+ 4 - 0
home/src/main/res/values/dimens.xml

@@ -9,6 +9,7 @@
     <dimen name="divider_525px" tools:ignore="ResourceName">525px</dimen>
     <dimen name="divider_503px" tools:ignore="ResourceName">503px</dimen>
     <dimen name="divider_472px" tools:ignore="ResourceName">472px</dimen>
+    <dimen name="divider_445px" tools:ignore="ResourceName">445px</dimen>
     <dimen name="divider_443px" tools:ignore="ResourceName">443px</dimen>
     <dimen name="divider_440px" tools:ignore="ResourceName">440px</dimen>
     <dimen name="divider_432px" tools:ignore="ResourceName">432px</dimen>
@@ -25,6 +26,7 @@
     <dimen name="divider_354px" tools:ignore="ResourceName">354px</dimen>
     <dimen name="divider_348px" tools:ignore="ResourceName">348px</dimen>
     <dimen name="divider_345px" tools:ignore="ResourceName">345px</dimen>
+    <dimen name="divider_343px" tools:ignore="ResourceName">343px</dimen>
     <dimen name="divider_340px" tools:ignore="ResourceName">340px</dimen>
     <dimen name="divider_339px" tools:ignore="ResourceName">339px</dimen>
     <dimen name="divider_335px" tools:ignore="ResourceName">335px</dimen>
@@ -95,6 +97,8 @@
     <dimen name="divider_100px" tools:ignore="ResourceName">100px</dimen>
     <dimen name="divider_95px" tools:ignore="ResourceName">95px</dimen>
     <dimen name="divider_88px" tools:ignore="ResourceName">88px</dimen>
+    <dimen name="divider_87px" tools:ignore="ResourceName">87px</dimen>
+    <dimen name="divider_83px" tools:ignore="ResourceName">83px</dimen>
     <dimen name="divider_82px" tools:ignore="ResourceName">82px</dimen>
     <dimen name="divider_81px" tools:ignore="ResourceName">81px</dimen>
     <dimen name="divider_80px" tools:ignore="ResourceName">80px</dimen>

+ 2 - 0
home/src/main/res/values/strings.xml

@@ -37,4 +37,6 @@
     <string name="upgrade_now" tools:ignore="ResourceName">立即升级</string>
     <string name="accessibility_service_descriptions" tools:ignore="ResourceName">应用自动安装服务</string>
     <string name="auto_install_accessibility_description" tools:ignore="ResourceName">手机app自动安装服务</string>
+    <string name="mmse_evaluation" tools:ignore="ResourceName">MMSE测试</string>
+    <string name="moca_evaluation" tools:ignore="ResourceName">MOCA测试</string>
 </resources>

+ 2 - 2
mmse/src/main/java/com/yingyangfly/mmse/fragment/DrawDesignsFragment.kt

@@ -33,8 +33,8 @@ class DrawDesignsFragment : BaseFragment<FragmentDrawDesignsBinding>() {
 
     override fun initListener() {
         binding {
-            binding.rubberLayout.setOnSingleClickListener {
-                binding.signatureView.clear()
+            rubberLayout.setOnSingleClickListener {
+                signatureView.clear()
             }
             btnPrevious.setOnSingleClickListener {
                 val bundle = bundleOf("questionId" to 29)

+ 35 - 0
moca/src/main/java/com/yingyangfly/moca/adapter/ChoiceAdapter.kt

@@ -0,0 +1,35 @@
+package com.yingyangfly.moca.adapter
+
+import android.text.TextUtils
+import com.yingyang.moca.R
+import com.yingyang.moca.databinding.ItemChoiceBinding
+import com.yingyangfly.baselib.adapter.BaseDataBindingAdapter
+import com.yingyangfly.baselib.db.QuestionsBean
+
+/**
+ * 多选adapter
+ */
+class ChoiceAdapter(override val layoutId: Int = R.layout.item_choice) :
+    BaseDataBindingAdapter<QuestionsBean, ItemChoiceBinding>() {
+
+    var onNumClickListener: ((bean: QuestionsBean) -> Unit)? = null
+
+    override fun onBindViewHolder(binding: ItemChoiceBinding, item: QuestionsBean, position: Int) {
+        binding.data = item
+        binding.radioCorrect.isChecked = TextUtils.equals(item.inputString, "是")
+        binding.radioDeny.isChecked = TextUtils.equals(item.inputString, "否")
+        binding.radioChoice.setOnCheckedChangeListener { group, checkedId ->
+            item.reviewId = item.id
+            item.reviewAnswer = ""
+            if (checkedId == R.id.radioCorrect) {
+                item.inputString = "是"
+                item.correct = "1"
+                onNumClickListener?.invoke(item)
+            } else if (checkedId == R.id.radioDeny) {
+                item.inputString = "否"
+                item.correct = "0"
+                onNumClickListener?.invoke(item)
+            }
+        }
+    }
+}

+ 37 - 0
moca/src/main/java/com/yingyangfly/moca/adapter/NumberAdapter.kt

@@ -0,0 +1,37 @@
+package com.yingyangfly.moca.adapter
+
+import android.text.TextUtils
+import com.yingyang.moca.R
+import com.yingyang.moca.databinding.ItemNumberBinding
+import com.yingyangfly.baselib.adapter.BaseDataBindingAdapter
+import com.yingyangfly.baselib.ext.setOnSingleClickListener
+import com.yingyangfly.baselib.ext.setTextColorResource
+
+/**
+ * 年adapter
+ */
+class NumberAdapter(override val layoutId: Int = R.layout.item_number) :
+    BaseDataBindingAdapter<String, ItemNumberBinding>() {
+
+    var onNumClickListener: ((bean: String, type: String) -> Unit)? = null
+
+    override fun onBindViewHolder(binding: ItemNumberBinding, item: String, position: Int) {
+        binding.data = item
+        if (TextUtils.equals("删除", item)) {
+            binding.tvNumber.setTextColorResource(R.color.color_FFCF0404)
+        } else if (TextUtils.equals("确定", item)) {
+            binding.tvNumber.setTextColorResource(R.color.color_FF4A76FF)
+        } else {
+            binding.tvNumber.setTextColorResource(R.color.color_FF222222)
+        }
+        binding.numberLayout.setOnSingleClickListener {
+            if (TextUtils.equals("删除", item)) {
+                onNumClickListener?.invoke("", "1")
+            } else if (TextUtils.equals("确定", item)) {
+                onNumClickListener?.invoke("", "2")
+            } else {
+                onNumClickListener?.invoke(item, "0")
+            }
+        }
+    }
+}

+ 38 - 0
moca/src/main/java/com/yingyangfly/moca/adapter/SelectedItemAdapter.kt

@@ -0,0 +1,38 @@
+package com.yingyangfly.moca.adapter
+
+import android.annotation.SuppressLint
+import android.text.TextUtils
+import com.yingyang.moca.R
+import com.yingyang.moca.databinding.ItemSelectedItemBinding
+import com.yingyangfly.baselib.adapter.BaseDataBindingAdapter
+import com.yingyangfly.baselib.ext.setOnSingleClickListener
+import com.yingyangfly.baselib.ext.setTextColorResource
+
+/**
+ * 单项选择adapter
+ */
+class SelectedItemAdapter(override val layoutId: Int = R.layout.item_selected_item) :
+    BaseDataBindingAdapter<String, ItemSelectedItemBinding>() {
+
+    var selectedData = ""
+
+    var onSelectedItemClickListener: ((bean: String) -> Unit)? = null
+
+    @SuppressLint("NotifyDataSetChanged")
+    override fun onBindViewHolder(binding: ItemSelectedItemBinding, item: String, position: Int) {
+        binding.data = item
+        if (TextUtils.equals(selectedData, item)) {
+            binding.tvNumber.setBackgroundResource(R.drawable.bg_selected_item)
+            binding.tvNumber.setTextColorResource(R.color.color_FFFFFFFF)
+        } else {
+            binding.tvNumber.setBackgroundResource(R.drawable.bg_unselected_item)
+            binding.tvNumber.setTextColorResource(R.color.color_FF222222)
+        }
+        binding.selectedLayout.setOnSingleClickListener {
+            selectedData = item
+            notifyDataSetChanged()
+            onSelectedItemClickListener?.invoke(item)
+        }
+
+    }
+}

+ 17 - 1
moca/src/main/java/com/yingyangfly/moca/alternatingconnection/AlternatingConnectionFragment.kt

@@ -1,7 +1,11 @@
 package com.yingyangfly.moca.alternatingconnection
 
+import androidx.core.os.bundleOf
+import androidx.navigation.Navigation
+import com.yingyang.moca.R
 import com.yingyang.moca.databinding.FragmentAlternatingConnectionBinding
 import com.yingyangfly.baselib.base.BaseFragment
+import com.yingyangfly.baselib.ext.setOnSingleClickListener
 
 /**
  * 交替连线测验
@@ -13,7 +17,19 @@ class AlternatingConnectionFragment : BaseFragment<FragmentAlternatingConnection
     }
 
     override fun initListener() {
-
+        binding {
+            btnPrevious.setOnSingleClickListener {
+
+            }
+            btnNext.setOnSingleClickListener {
+                val bundle = bundleOf("questionId" to 33)
+                val controller = Navigation.findNavController(it)
+                controller.navigate(
+                    R.id.action_alternatingconnectionFragment_to_signatureFragment,
+                    bundle
+                )
+            }
+        }
     }
 
     override fun initData() {

+ 82 - 0
moca/src/main/java/com/yingyangfly/moca/multiplechoice/MultipleChoiceFragment.kt

@@ -0,0 +1,82 @@
+package com.yingyangfly.moca.multiplechoice
+
+import android.os.Bundle
+import com.yingyang.moca.databinding.FragmentMultipleChoiceBinding
+import com.yingyangfly.baselib.base.BaseFragment
+import com.yingyangfly.baselib.db.QuestionsBean
+import com.yingyangfly.moca.adapter.ChoiceAdapter
+
+/**
+ * 多选
+ */
+class MultipleChoiceFragment : BaseFragment<FragmentMultipleChoiceBinding>() {
+
+    /**
+     * 问题id
+     */
+    var questionId = 0
+
+    private val choiceItemList = mutableListOf<QuestionsBean>()
+    private val adapter by lazy { ChoiceAdapter() }
+
+    override fun onCreate(savedInstanceState: Bundle?) {
+        questionId = arguments?.getInt("questionId") ?: 11
+        super.onCreate(savedInstanceState)
+    }
+
+    override fun initViews() {
+
+    }
+
+    override fun initListener() {
+        binding {
+
+
+        }
+    }
+
+    override fun initData() {
+
+    }
+
+    override fun onResume() {
+        super.onResume()
+        loadData()
+    }
+
+    /**
+     * 加载数据
+     */
+    private fun loadData() {
+        choiceItemList.clear()
+        if (dao != null) {
+            val firstquestion = dao?.getQuestion(questionId)
+            if (firstquestion != null) {
+                choiceItemList.add(firstquestion)
+            }
+            val secondQuestionnId = questionId + 1
+            val secondQuestion = dao?.getQuestion(secondQuestionnId)
+            if (secondQuestion != null) {
+                choiceItemList.add(secondQuestion)
+            }
+            val thirdQuestionId = questionId + 2
+            val thirdQuestion = dao?.getQuestion(thirdQuestionId)
+            if (thirdQuestion != null) {
+                choiceItemList.add(thirdQuestion)
+            }
+
+            val fourthQuestionId = questionId + 3
+            val fourthQuestion = dao?.getQuestion(fourthQuestionId)
+            if (fourthQuestion != null) {
+                choiceItemList.add(fourthQuestion)
+            }
+
+            val fifthQuestionId = questionId + 4
+            val fifthQuestion = dao?.getQuestion(fifthQuestionId)
+            if (fifthQuestion != null) {
+                choiceItemList.add(fifthQuestion)
+            }
+        }
+        adapter.setData(choiceItemList)
+    }
+}

+ 72 - 0
moca/src/main/java/com/yingyangfly/moca/signature/SignatureFragment.kt

@@ -0,0 +1,72 @@
+package com.yingyangfly.moca.signature
+
+import android.os.Bundle
+import androidx.core.os.bundleOf
+import androidx.navigation.Navigation
+import com.yingyang.moca.R
+import com.yingyang.moca.databinding.FragmentSignatureBinding
+import com.yingyangfly.baselib.base.BaseFragment
+import com.yingyangfly.baselib.db.QuestionsBean
+import com.yingyangfly.baselib.ext.setOnSingleClickListener
+
+/**
+ * 视结构技能
+ */
+class SignatureFragment : BaseFragment<FragmentSignatureBinding>() {
+
+    /**
+     * 原始问题id
+     */
+    var questionId = 0
+
+    var question: QuestionsBean? = null
+
+    override fun onCreate(savedInstanceState: Bundle?) {
+        questionId = arguments?.getInt("questionId") ?: 33
+        super.onCreate(savedInstanceState)
+    }
+
+    override fun initViews() {
+
+    }
+
+    override fun initListener() {
+        binding {
+            rubberLayout.setOnSingleClickListener {
+                signatureView.clear()
+            }
+
+            btnPrevious.setOnSingleClickListener {
+                val bundle = bundleOf("questionId" to 32)
+                val controller = Navigation.findNavController(it)
+                controller.navigate(
+                    R.id.action_signatureFragment_to_alternatingconnectionFragment,
+                    bundle
+                )
+            }
+        }
+    }
+
+    override fun initData() {
+
+    }
+
+    override fun onResume() {
+        super.onResume()
+        loadData()
+    }
+
+    /**
+     * 加载数据
+     */
+    private fun loadData() {
+        if (dao != null) {
+            question = dao?.getQuestion(questionId)
+            if (question != null) {
+                binding {
+                    data = question
+                }
+            }
+        }
+    }
+}

+ 357 - 0
moca/src/main/java/com/yingyangfly/moca/widget/LinePathView.kt

@@ -0,0 +1,357 @@
+package com.yingyangfly.moca.widget
+
+import android.content.Context
+import android.graphics.*
+import android.util.AttributeSet
+import android.view.MotionEvent
+import android.view.View
+import androidx.annotation.ColorInt
+import java.io.*
+import kotlin.math.max
+import kotlin.math.min
+
+class LinePathView : View {
+    private var mContext: Context? = null
+
+    /**
+     * 笔画X坐标起点
+     */
+    private var mX = 0f
+
+    /**
+     * 笔画Y坐标起点
+     */
+    private var mY = 0f
+
+    /**
+     * 手写画笔
+     */
+    private val mGesturePaint = Paint()
+
+    /**
+     * 路径
+     */
+    private val mPath = Path()
+
+    /**
+     * 签名画笔
+     */
+    private var cacheCanvas: Canvas? = null
+
+    /**
+     * 签名画布
+     */
+    var cachebBitmap: Bitmap? = null
+
+    /**
+     * 是否有签名
+     *
+     * @return
+     */
+    /**
+     * 是否已经签名
+     */
+    var touched = false
+        private set
+
+    /**
+     * 画笔宽度 px;
+     */
+    private var mPaintWidth = 10
+
+    /**
+     * 前景色
+     */
+    private var mPenColor = Color.BLACK
+
+    /**
+     * 背景色(指最终签名结果文件的背景颜色,默认为透明色)
+     */
+    private var mBackColor = Color.TRANSPARENT
+
+    //签名开始与结束
+    var touch: Touch? = null
+
+    constructor(context: Context?) : super(context) {
+        init(context)
+    }
+
+    constructor(context: Context?, attrs: AttributeSet?) : super(
+        context,
+        attrs
+    ) {
+        init(context)
+    }
+
+    constructor(
+        context: Context?,
+        attrs: AttributeSet?,
+        defStyleAttr: Int
+    ) : super(context, attrs, defStyleAttr) {
+        init(context)
+    }
+
+    private fun init(context: Context?) {
+        mContext = context
+        //设置抗锯齿
+        mGesturePaint.isAntiAlias = true
+        //设置签名笔画样式
+        mGesturePaint.style = Paint.Style.STROKE
+        //设置笔画宽度
+        mGesturePaint.strokeWidth = mPaintWidth.toFloat()
+        //设置签名颜色
+        mGesturePaint.color = mPenColor
+    }
+
+    override fun onSizeChanged(w: Int, h: Int, oldw: Int, oldh: Int) {
+        super.onSizeChanged(w, h, oldw, oldh)
+        //创建跟view一样大的bitmap,用来保存签名
+        cachebBitmap = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888)
+        cacheCanvas = Canvas(cachebBitmap!!)
+        cacheCanvas!!.drawColor(mBackColor)
+        touched = false
+    }
+
+    override fun onTouchEvent(event: MotionEvent): Boolean {
+        if (touch != null) touch!!.OnTouch(true)
+        when (event.action) {
+            MotionEvent.ACTION_DOWN -> touchDown(event)
+            MotionEvent.ACTION_MOVE -> {
+                touched = true
+                if (touch != null) touch!!.OnTouch(false)
+                touchMove(event)
+            }
+            MotionEvent.ACTION_UP -> {
+                //将路径画到bitmap中,即一次笔画完成才去更新bitmap,而手势轨迹是实时显示在画板上的。
+                cacheCanvas!!.drawPath(mPath, mGesturePaint)
+                mPath.reset()
+            }
+        }
+        // 更新绘制
+        invalidate()
+        return true
+    }
+
+    override fun onDraw(canvas: Canvas) {
+        super.onDraw(canvas)
+        //画此次笔画之前的签名
+        canvas.drawBitmap(cachebBitmap!!, 0f, 0f, mGesturePaint)
+        // 通过画布绘制多点形成的图形
+        canvas.drawPath(mPath, mGesturePaint)
+    }
+
+    // 手指点下屏幕时调用
+    private fun touchDown(event: MotionEvent) {
+        // 重置绘制路线
+        mPath.reset()
+        val x = event.x
+        val y = event.y
+        mX = x
+        mY = y
+        // mPath绘制的绘制起点
+        mPath.moveTo(x, y)
+    }
+
+    // 手指在屏幕上滑动时调用
+    private fun touchMove(event: MotionEvent) {
+        val x = event.x
+        val y = event.y
+        val previousX = mX
+        val previousY = mY
+        val dx = Math.abs(x - previousX)
+        val dy = Math.abs(y - previousY)
+        // 两点之间的距离大于等于3时,生成贝塞尔绘制曲线
+        if (dx >= 3 || dy >= 3) {
+            // 设置贝塞尔曲线的操作点为起点和终点的一半
+            val cX = (x + previousX) / 2
+            val cY = (y + previousY) / 2
+            // 二次贝塞尔,实现平滑曲线;previousX, previousY为操作点,cX, cY为终点
+            mPath.quadTo(previousX, previousY, cX, cY)
+            // 第二次执行时,第一次结束调用的坐标值将作为第二次调用的初始坐标值
+            mX = x
+            mY = y
+        }
+    }
+
+    /**
+     * 清除画板
+     */
+    fun clear() {
+        if (cacheCanvas != null) {
+            touched = false
+            //更新画板信息
+            mGesturePaint.color = mPenColor
+            cacheCanvas!!.drawColor(mBackColor, PorterDuff.Mode.CLEAR)
+            mGesturePaint.color = mPenColor
+            invalidate()
+        }
+    }
+
+    interface Touch {
+        fun OnTouch(isTouch: Boolean)
+    }
+
+    /**
+     * 保存画板
+     *
+     * @param path 保存到路径
+     */
+    @JvmOverloads
+    @Throws(IOException::class)
+    fun save(
+        path: String?,
+        clearBlank: Boolean = false,
+        blank: Int = 0
+    ) {
+        var bitmap = cachebBitmap
+        if (clearBlank) {
+            bitmap = clearBlank(bitmap, blank)
+        }
+        val bos = ByteArrayOutputStream()
+        bitmap!!.compress(Bitmap.CompressFormat.PNG, 100, bos)
+        val buffer = bos.toByteArray()
+        val file = File(path)
+        if (file.exists()) {
+            file.delete()
+        }
+        val outputStream: OutputStream = FileOutputStream(file)
+        outputStream.write(buffer)
+        outputStream.close()
+    }
+
+    fun getCachebBitmaps(): Bitmap {
+        var bitmap = cachebBitmap
+//        if (clearBlank) {
+//            bitmap = clearBlank(bitmap, blank)
+//        }
+        val bos = ByteArrayOutputStream()
+        bitmap!!.compress(Bitmap.CompressFormat.PNG, 100, bos)
+        return bitmap
+    }
+
+    /**
+     * 获取画板的bitmap
+     *
+     * @return
+     */
+    val bitMap: Bitmap
+        get() {
+            isDrawingCacheEnabled = true
+            buildDrawingCache()
+            val bitmap = drawingCache
+            isDrawingCacheEnabled = false
+            return bitmap
+        }
+
+    /**
+     * 逐行扫描 清楚边界空白。
+     *
+     * @param bp
+     * @param blank 边距留多少个像素
+     * @return
+     */
+    private fun clearBlank(bp: Bitmap?, blank: Int): Bitmap {
+        var blank = blank
+        val HEIGHT = bp!!.height
+        val WIDTH = bp.width
+        var top = 0
+        var left = 0
+        var right = 0
+        var bottom = 0
+        var pixs = IntArray(WIDTH)
+        var isStop: Boolean
+        //扫描上边距不等于背景颜色的第一个点
+        for (y in 0 until HEIGHT) {
+            bp.getPixels(pixs, 0, WIDTH, 0, y, WIDTH, 1)
+            isStop = false
+            for (pix in pixs) {
+                if (pix != mBackColor) {
+                    top = y
+                    isStop = true
+                    break
+                }
+            }
+            if (isStop) {
+                break
+            }
+        }
+        //扫描下边距不等于背景颜色的第一个点
+        for (y in HEIGHT - 1 downTo 0) {
+            bp.getPixels(pixs, 0, WIDTH, 0, y, WIDTH, 1)
+            isStop = false
+            for (pix in pixs) {
+                if (pix != mBackColor) {
+                    bottom = y
+                    isStop = true
+                    break
+                }
+            }
+            if (isStop) {
+                break
+            }
+        }
+        pixs = IntArray(HEIGHT)
+        //扫描左边距不等于背景颜色的第一个点
+        for (x in 0 until WIDTH) {
+            bp.getPixels(pixs, 0, 1, x, 0, 1, HEIGHT)
+            isStop = false
+            for (pix in pixs) {
+                if (pix != mBackColor) {
+                    left = x
+                    isStop = true
+                    break
+                }
+            }
+            if (isStop) {
+                break
+            }
+        }
+        //扫描右边距不等于背景颜色的第一个点
+        for (x in WIDTH - 1 downTo 1) {
+            bp.getPixels(pixs, 0, 1, x, 0, 1, HEIGHT)
+            isStop = false
+            for (pix in pixs) {
+                if (pix != mBackColor) {
+                    right = x
+                    isStop = true
+                    break
+                }
+            }
+            if (isStop) {
+                break
+            }
+        }
+        if (blank < 0) {
+            blank = 0
+        }
+        //计算加上保留空白距离之后的图像大小
+        left = max(left - blank, 0)
+        top = max(top - blank, 0)
+        right = min(right + blank, WIDTH - 1)
+        bottom = min(bottom + blank, HEIGHT - 1)
+        return Bitmap.createBitmap(bp, left, top, right - left, bottom - top)
+    }
+
+    /**
+     * 设置画笔宽度 默认宽度为10px
+     *
+     * @param mPaintWidth
+     */
+    fun setPaintWidth(mPaintWidth: Int) {
+        mGesturePaint.strokeWidth = (if (mPaintWidth > 0) mPaintWidth else 10).toFloat()
+    }
+
+    fun setBackColor(@ColorInt backColor: Int) {
+        mBackColor = backColor
+    }
+
+    /**
+     * 设置画笔颜色
+     *
+     * @param mPenColor
+     */
+    fun setPenColor(mPenColor: Int) {
+        mGesturePaint.color = mPenColor
+    }
+
+}

+ 5 - 0
moca/src/main/res/color/txt_radio_color.xml

@@ -0,0 +1,5 @@
+<selector xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" tools:ignore="ResourceName">
+    <item android:color="@android:color/white" android:state_checked="true" />
+    <!-- not selected -->
+    <item android:color="@color/color_FF222222" android:state_checked="false" />
+</selector>

+ 10 - 0
moca/src/main/res/drawable/bg_calculation_results.xml

@@ -0,0 +1,10 @@
+<?xml version="1.0" encoding="utf-8"?>
+<shape xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:tools="http://schemas.android.com/tools"
+    tools:ignore="ResourceName">
+    <stroke
+        android:width="@dimen/divider_1px"
+        android:color="@color/color_FF979797" />
+    <corners android:radius="@dimen/divider_8px" />
+    <solid android:color="@color/color_FFF6F4F4" />
+</shape>

+ 10 - 0
moca/src/main/res/drawable/bg_choice_item.xml

@@ -0,0 +1,10 @@
+<?xml version="1.0" encoding="utf-8"?>
+<shape xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:tools="http://schemas.android.com/tools"
+    tools:ignore="ResourceName">
+    <stroke
+        android:width="@dimen/divider_1px"
+        android:color="@color/color_FF979797" />
+    <corners android:radius="@dimen/divider_8px" />
+    <solid android:color="@color/color_FFF6F4F4" />
+</shape>

+ 18 - 0
moca/src/main/res/drawable/bg_next_question.xml

@@ -0,0 +1,18 @@
+<?xml version="1.0" encoding="utf-8"?>
+<layer-list xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:tools="http://schemas.android.com/tools"
+    tools:ignore="ResourceName">
+
+    <item>
+        <shape android:shape="rectangle">
+            <corners android:radius="@dimen/divider_13px" />
+            <gradient
+                android:angle="180"
+                android:endColor="@color/color_FF4174FF"
+                android:startColor="@color/color_FF6D9AFF"
+                android:type="linear"
+                android:useLevel="true" />
+        </shape>
+    </item>
+
+</layer-list>

+ 10 - 0
moca/src/main/res/drawable/bg_previous_question.xml

@@ -0,0 +1,10 @@
+<?xml version="1.0" encoding="utf-8"?>
+<shape xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:tools="http://schemas.android.com/tools"
+    tools:ignore="ResourceName">
+    <stroke
+        android:width="@dimen/divider_1px"
+        android:color="@color/color_FF4A76FF" />
+    <corners android:radius="@dimen/divider_13px" />
+    <solid android:color="@android:color/white" />
+</shape>

+ 7 - 0
moca/src/main/res/drawable/bg_rubber.xml

@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="utf-8"?>
+<shape xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:tools="http://schemas.android.com/tools"
+    tools:ignore="ResourceName">
+    <corners android:radius="@dimen/divider_8px" />
+    <solid android:color="@color/color_FF4A76FF" />
+</shape>

+ 13 - 0
moca/src/main/res/drawable/bg_selected_choice_item.xml

@@ -0,0 +1,13 @@
+<?xml version="1.0" encoding="utf-8"?>
+<shape xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:tools="http://schemas.android.com/tools"
+    tools:ignore="ResourceName">
+    <stroke
+        android:width="@dimen/divider_1px"
+        android:color="@color/color_FF4A76FF" />
+    <corners android:radius="@dimen/divider_8px" />
+    <solid android:color="@color/color_FF4A76FF" />
+    <padding
+        android:left="@dimen/divider_31px"
+        android:right="@dimen/divider_31px" />
+</shape>

+ 15 - 0
moca/src/main/res/drawable/bg_selected_item.xml

@@ -0,0 +1,15 @@
+<?xml version="1.0" encoding="utf-8"?>
+<shape xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:tools="http://schemas.android.com/tools"
+    tools:ignore="ResourceName">
+    <stroke
+        android:width="@dimen/divider_1px"
+        android:color="@color/color_FF4A76FF" />
+    <corners android:radius="@dimen/divider_8px" />
+    <solid android:color="@color/color_FF4A76FF" />
+    <padding
+        android:bottom="@dimen/divider_20px"
+        android:left="@dimen/divider_79px"
+        android:right="@dimen/divider_78px"
+        android:top="@dimen/divider_22px" />
+</shape>

+ 13 - 0
moca/src/main/res/drawable/bg_unselected_choice_item.xml

@@ -0,0 +1,13 @@
+<?xml version="1.0" encoding="utf-8"?>
+<shape xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:tools="http://schemas.android.com/tools"
+    tools:ignore="ResourceName">
+    <stroke
+        android:width="@dimen/divider_1px"
+        android:color="@color/color_FF979797" />
+    <corners android:radius="@dimen/divider_8px" />
+    <solid android:color="@color/color_FFF6F4F4" />
+    <padding
+        android:left="@dimen/divider_31px"
+        android:right="@dimen/divider_31px"/>
+</shape>

+ 15 - 0
moca/src/main/res/drawable/bg_unselected_item.xml

@@ -0,0 +1,15 @@
+<?xml version="1.0" encoding="utf-8"?>
+<shape xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:tools="http://schemas.android.com/tools"
+    tools:ignore="ResourceName">
+    <stroke
+        android:width="@dimen/divider_1px"
+        android:color="@color/color_FF979797" />
+    <corners android:radius="@dimen/divider_8px" />
+    <solid android:color="@color/color_FFF6F4F4" />
+    <padding
+        android:bottom="@dimen/divider_20px"
+        android:left="@dimen/divider_79px"
+        android:right="@dimen/divider_78px"
+        android:top="@dimen/divider_22px" />
+</shape>

+ 8 - 0
moca/src/main/res/drawable/selector_questions_choice.xml

@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="utf-8"?>
+<selector xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" tools:ignore="ResourceName">
+    <item android:drawable="@drawable/bg_selected_choice_item" android:state_checked="true" />
+    <item android:drawable="@drawable/bg_selected_choice_item" android:state_selected="true" />
+    <item android:drawable="@drawable/bg_unselected_choice_item" />
+</selector>
+
+

+ 8 - 0
moca/src/main/res/drawable/selector_questions_radio.xml

@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="utf-8"?>
+<selector xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" tools:ignore="ResourceName">
+    <item android:drawable="@drawable/bg_selected_item" android:state_checked="true" />
+    <item android:drawable="@drawable/bg_selected_item" android:state_selected="true" />
+    <item android:drawable="@drawable/bg_unselected_item" />
+</selector>
+
+

+ 31 - 3
moca/src/main/res/layout/fragment_alternating_connection.xml

@@ -1,14 +1,42 @@
 <?xml version="1.0" encoding="utf-8"?>
-<layout xmlns:tools="http://schemas.android.com/tools"
-    xmlns:android="http://schemas.android.com/apk/res/android"
+<layout xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:app="http://schemas.android.com/apk/res-auto"
+    xmlns:tools="http://schemas.android.com/tools"
     tools:ignore="ResourceName">
 
-
     <androidx.constraintlayout.widget.ConstraintLayout
         android:layout_width="match_parent"
         android:layout_height="match_parent">
 
+        <androidx.appcompat.widget.AppCompatButton
+            android:id="@+id/btnPrevious"
+            android:layout_width="@dimen/divider_240px"
+            android:layout_height="@dimen/divider_68px"
+            android:layout_marginStart="@dimen/divider_307px"
+            android:layout_marginBottom="@dimen/divider_60px"
+            android:background="@drawable/bg_previous_question"
+            android:gravity="center"
+            android:text="@string/reset_connection"
+            android:textColor="@color/color_FF4A76FF"
+            android:textSize="@dimen/divider_28px"
+            android:textStyle="bold"
+            app:layout_constraintBottom_toBottomOf="parent"
+            app:layout_constraintStart_toStartOf="parent" />
 
+        <androidx.appcompat.widget.AppCompatButton
+            android:id="@+id/btnNext"
+            android:layout_width="@dimen/divider_240px"
+            android:layout_height="@dimen/divider_68px"
+            android:layout_marginEnd="@dimen/divider_305px"
+            android:layout_marginBottom="@dimen/divider_60px"
+            android:background="@drawable/bg_next_question"
+            android:gravity="center"
+            android:text="@string/confirm_completion"
+            android:textColor="@android:color/white"
+            android:textSize="@dimen/divider_28px"
+            android:textStyle="bold"
+            app:layout_constraintBottom_toBottomOf="parent"
+            app:layout_constraintEnd_toEndOf="parent" />
     </androidx.constraintlayout.widget.ConstraintLayout>
 
 </layout>

+ 116 - 0
moca/src/main/res/layout/fragment_multiple_choice.xml

@@ -0,0 +1,116 @@
+<?xml version="1.0" encoding="utf-8"?>
+<layout xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:app="http://schemas.android.com/apk/res-auto"
+    xmlns:tools="http://schemas.android.com/tools"
+    tools:ignore="ResourceName">
+
+    <androidx.constraintlayout.widget.ConstraintLayout
+        android:layout_width="match_parent"
+        android:layout_height="match_parent">
+
+        <TextView
+            android:id="@+id/tvTitle"
+            android:layout_width="match_parent"
+            android:layout_height="wrap_content"
+            android:layout_marginStart="@dimen/divider_202px"
+            android:layout_marginTop="@dimen/divider_27px"
+            android:layout_marginEnd="@dimen/divider_200px"
+            android:gravity="center"
+            android:text="@string/Now_you_will_hear_three_words_After_listening_them_please_repeat_these_three_words"
+            android:textColor="@color/color_FF222222"
+            android:textSize="@dimen/divider_34px"
+            android:textStyle="bold"
+            app:layout_constraintEnd_toEndOf="parent"
+            app:layout_constraintStart_toStartOf="parent"
+            app:layout_constraintTop_toTopOf="parent" />
+
+        <com.google.android.material.card.MaterialCardView
+            android:id="@+id/contentLayout"
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:layout_marginTop="@dimen/divider_32px"
+            android:minWidth="@dimen/divider_620px"
+            android:minHeight="@dimen/divider_264px"
+            android:theme="@style/Theme.MaterialComponents.NoActionBar"
+            app:cardBackgroundColor="@android:color/white"
+            app:cardCornerRadius="@dimen/divider_20px"
+            app:layout_constraintEnd_toEndOf="parent"
+            app:layout_constraintStart_toStartOf="parent"
+            app:layout_constraintTop_toBottomOf="@+id/tvTitle"
+            app:strokeColor="@color/color_FF979797"
+            app:strokeWidth="@dimen/divider_1px">
+
+            <LinearLayout
+                android:layout_width="match_parent"
+                android:layout_height="match_parent"
+                android:gravity="center_vertical"
+                android:orientation="horizontal">
+
+                <LinearLayout
+                    android:layout_width="@dimen/divider_191px"
+                    android:layout_height="match_parent"
+                    android:background="@color/color_FF4A76FF"
+                    android:gravity="center"
+                    android:orientation="vertical">
+
+                    <androidx.appcompat.widget.AppCompatImageView
+                        android:layout_width="@dimen/divider_65px"
+                        android:layout_height="@dimen/divider_86px"
+                        android:layout_gravity="center"
+                        android:background="@mipmap/icon_doctor_head" />
+
+                    <androidx.appcompat.widget.AppCompatTextView
+                        android:id="@+id/tvYear"
+                        android:layout_width="match_parent"
+                        android:layout_height="wrap_content"
+                        android:layout_marginTop="@dimen/divider_31px"
+                        android:background="@color/color_FF4A76FF"
+                        android:gravity="center_horizontal"
+                        android:text="@string/staff_judgment"
+                        android:textColor="@android:color/white"
+                        android:textSize="@dimen/divider_24px" />
+
+                </LinearLayout>
+
+                <androidx.recyclerview.widget.RecyclerView
+                    android:id="@+id/rvChoice"
+                    android:layout_width="match_parent"
+                    android:layout_height="match_parent"
+                    android:layout_marginTop="@dimen/divider_15px"
+                    android:layout_marginBottom="@dimen/divider_23px"
+                    app:layoutManager="androidx.recyclerview.widget.LinearLayoutManager" />
+
+            </LinearLayout>
+        </com.google.android.material.card.MaterialCardView>
+
+        <androidx.appcompat.widget.AppCompatButton
+            android:id="@+id/btnPrevious"
+            android:layout_width="@dimen/divider_240px"
+            android:layout_height="@dimen/divider_68px"
+            android:layout_marginStart="@dimen/divider_307px"
+            android:layout_marginBottom="@dimen/divider_60px"
+            android:background="@drawable/bg_previous_question"
+            android:gravity="center"
+            android:text="@string/previous_question"
+            android:textColor="@color/color_FF4A76FF"
+            android:textSize="@dimen/divider_28px"
+            android:textStyle="bold"
+            app:layout_constraintBottom_toBottomOf="parent"
+            app:layout_constraintStart_toStartOf="parent" />
+
+        <androidx.appcompat.widget.AppCompatButton
+            android:id="@+id/btnNext"
+            android:layout_width="@dimen/divider_240px"
+            android:layout_height="@dimen/divider_68px"
+            android:layout_marginEnd="@dimen/divider_305px"
+            android:layout_marginBottom="@dimen/divider_60px"
+            android:background="@drawable/bg_next_question"
+            android:gravity="center"
+            android:text="@string/continues"
+            android:textColor="@android:color/white"
+            android:textSize="@dimen/divider_28px"
+            android:textStyle="bold"
+            app:layout_constraintBottom_toBottomOf="parent"
+            app:layout_constraintEnd_toEndOf="parent" />
+    </androidx.constraintlayout.widget.ConstraintLayout>
+</layout>

+ 138 - 0
moca/src/main/res/layout/fragment_signature.xml

@@ -0,0 +1,138 @@
+<?xml version="1.0" encoding="utf-8"?>
+<layout xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:app="http://schemas.android.com/apk/res-auto"
+    xmlns:tools="http://schemas.android.com/tools"
+    tools:ignore="ResourceName">
+
+    <data>
+
+        <variable
+            name="data"
+            type="com.yingyangfly.baselib.db.QuestionsBean" />
+    </data>
+
+    <androidx.constraintlayout.widget.ConstraintLayout
+        android:layout_width="match_parent"
+        android:layout_height="match_parent">
+
+        <TextView
+            android:id="@+id/tvTitle"
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:layout_marginTop="@dimen/divider_27px"
+            android:text="@string/please_draw_box_according_diagram"
+            android:textColor="@color/color_FF222222"
+            android:textSize="@dimen/divider_34px"
+            android:textStyle="bold"
+            app:layout_constraintEnd_toEndOf="parent"
+            app:layout_constraintStart_toStartOf="parent"
+            app:layout_constraintTop_toTopOf="parent" />
+
+        <androidx.appcompat.widget.AppCompatImageView
+            android:id="@+id/imageTemplate"
+            android:layout_width="@dimen/divider_179px"
+            android:layout_height="@dimen/divider_179px"
+            android:layout_marginStart="@dimen/divider_63px"
+            android:layout_marginTop="@dimen/divider_149px"
+            app:isCircle="@{false}"
+            app:layout_constraintStart_toStartOf="parent"
+            app:layout_constraintTop_toBottomOf="@+id/tvTitle"
+            app:loadHeadImg="@{data.reviewDesc}" />
+
+        <androidx.appcompat.widget.AppCompatTextView
+            android:layout_width="0dp"
+            android:layout_height="wrap_content"
+            android:layout_marginTop="@dimen/divider_34px"
+            android:gravity="center_horizontal"
+            android:text="@string/subjects_can_also_draw_pictures_on_paper"
+            android:textColor="@color/color_FF4A76FF"
+            android:textSize="@dimen/divider_24px"
+            android:textStyle="bold"
+            app:layout_constraintEnd_toStartOf="@+id/drawLayout"
+            app:layout_constraintStart_toStartOf="parent"
+            app:layout_constraintTop_toBottomOf="@+id/imageTemplate" />
+
+        <com.google.android.material.card.MaterialCardView
+            android:id="@+id/drawLayout"
+            android:layout_width="0dp"
+            android:layout_height="0dp"
+            android:layout_marginStart="@dimen/divider_38px"
+            android:layout_marginTop="@dimen/divider_45px"
+            android:layout_marginEnd="@dimen/divider_63px"
+            android:layout_marginBottom="@dimen/divider_30px"
+            android:theme="@style/Theme.MaterialComponents.NoActionBar"
+            app:cardBackgroundColor="@android:color/white"
+            app:cardCornerRadius="@dimen/divider_20px"
+            app:layout_constraintBottom_toTopOf="@+id/btnPrevious"
+            app:layout_constraintEnd_toEndOf="parent"
+            app:layout_constraintStart_toEndOf="@+id/imageTemplate"
+            app:layout_constraintTop_toBottomOf="@+id/tvTitle"
+            app:strokeColor="@color/color_FF979797"
+            app:strokeWidth="@dimen/divider_1px">
+
+            <com.yingyangfly.moca.widget.LinePathView
+                android:id="@+id/signatureView"
+                android:layout_width="match_parent"
+                android:layout_height="match_parent" />
+
+            <LinearLayout
+                android:id="@+id/rubberLayout"
+                android:layout_width="@dimen/divider_105px"
+                android:layout_height="@dimen/divider_44px"
+                android:layout_gravity="top|end"
+                android:layout_marginTop="@dimen/divider_20px"
+                android:layout_marginEnd="@dimen/divider_20px"
+                android:background="@drawable/bg_rubber"
+                android:gravity="center_vertical"
+                android:orientation="horizontal">
+
+                <androidx.appcompat.widget.AppCompatImageView
+                    android:layout_width="@dimen/divider_21px"
+                    android:layout_height="@dimen/divider_23px"
+                    android:layout_marginStart="@dimen/divider_15px"
+                    android:background="@mipmap/icon_rubber" />
+
+                <androidx.appcompat.widget.AppCompatTextView
+                    android:layout_width="wrap_content"
+                    android:layout_height="wrap_content"
+                    android:layout_marginStart="@dimen/divider_8px"
+                    android:text="@string/erase"
+                    android:textColor="@android:color/white"
+                    android:textSize="@dimen/divider_20px" />
+
+            </LinearLayout>
+
+
+        </com.google.android.material.card.MaterialCardView>
+
+        <androidx.appcompat.widget.AppCompatButton
+            android:id="@+id/btnPrevious"
+            android:layout_width="@dimen/divider_240px"
+            android:layout_height="@dimen/divider_68px"
+            android:layout_marginStart="@dimen/divider_307px"
+            android:layout_marginBottom="@dimen/divider_60px"
+            android:background="@drawable/bg_previous_question"
+            android:gravity="center"
+            android:text="@string/previous_question"
+            android:textColor="@color/color_FF4A76FF"
+            android:textSize="@dimen/divider_28px"
+            android:textStyle="bold"
+            app:layout_constraintBottom_toBottomOf="parent"
+            app:layout_constraintStart_toStartOf="parent" />
+
+        <androidx.appcompat.widget.AppCompatButton
+            android:id="@+id/btnNext"
+            android:layout_width="@dimen/divider_240px"
+            android:layout_height="@dimen/divider_68px"
+            android:layout_marginEnd="@dimen/divider_305px"
+            android:layout_marginBottom="@dimen/divider_60px"
+            android:background="@drawable/bg_next_question"
+            android:gravity="center"
+            android:text="@string/continues"
+            android:textColor="@android:color/white"
+            android:textSize="@dimen/divider_28px"
+            android:textStyle="bold"
+            app:layout_constraintBottom_toBottomOf="parent"
+            app:layout_constraintEnd_toEndOf="parent" />
+    </androidx.constraintlayout.widget.ConstraintLayout>
+</layout>

+ 66 - 0
moca/src/main/res/layout/item_choice.xml

@@ -0,0 +1,66 @@
+<?xml version="1.0" encoding="utf-8"?>
+<layout xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:tools="http://schemas.android.com/tools"
+    tools:ignore="ResourceName">
+
+    <data>
+
+        <variable
+            name="data"
+            type="com.yingyangfly.baselib.db.QuestionsBean" />
+    </data>
+
+    <LinearLayout
+        android:layout_width="wrap_content"
+        android:layout_height="@dimen/divider_57px"
+        android:layout_marginTop="@dimen/divider_24px"
+        android:gravity="center_vertical"
+        android:orientation="horizontal">
+
+        <TextView
+            android:layout_width="@dimen/divider_230px"
+            android:layout_height="match_parent"
+            android:layout_marginStart="@dimen/divider_16px"
+            android:background="@drawable/bg_choice_item"
+            android:gravity="center_vertical"
+            android:paddingStart="@dimen/divider_17px"
+            android:paddingEnd="@dimen/divider_17px"
+            android:text="@{data.reviewItem}"
+            android:textColor="@color/txt_radio_color"
+            android:textSize="@dimen/divider_24px"
+            android:textStyle="bold" />
+
+        <RadioGroup
+            android:id="@+id/radioChoice"
+            android:layout_width="wrap_content"
+            android:layout_height="match_parent"
+            android:orientation="horizontal">
+
+            <RadioButton
+                android:id="@+id/radioCorrect"
+                android:layout_width="wrap_content"
+                android:layout_height="match_parent"
+                android:layout_marginStart="@dimen/divider_20px"
+                android:background="@drawable/selector_questions_choice"
+                android:button="@null"
+                android:text="@string/correct"
+                android:textColor="@color/txt_radio_color"
+                android:textSize="@dimen/divider_24px"
+                android:textStyle="bold" />
+
+            <RadioButton
+                android:id="@+id/radioDeny"
+                android:layout_width="wrap_content"
+                android:layout_height="match_parent"
+                android:layout_marginStart="@dimen/divider_12px"
+                android:layout_marginEnd="@dimen/divider_19px"
+                android:background="@drawable/selector_questions_choice"
+                android:button="@null"
+                android:text="@string/deny"
+                android:textColor="@color/txt_radio_color"
+                android:textSize="@dimen/divider_24px"
+                android:textStyle="bold" />
+
+        </RadioGroup>
+    </LinearLayout>
+</layout>

+ 41 - 0
moca/src/main/res/layout/item_number.xml

@@ -0,0 +1,41 @@
+<?xml version="1.0" encoding="utf-8"?>
+<layout xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:app="http://schemas.android.com/apk/res-auto"
+    xmlns:tools="http://schemas.android.com/tools"
+    tools:ignore="ResourceName">
+
+    <data>
+
+        <variable
+            name="data"
+            type="java.lang.String" />
+    </data>
+
+    <com.google.android.material.card.MaterialCardView
+        android:id="@+id/numberLayout"
+        android:layout_width="@dimen/divider_94px"
+        android:layout_height="@dimen/divider_68px"
+        android:layout_marginStart="@dimen/divider_15px"
+        android:layout_marginTop="@dimen/divider_30px"
+        android:layout_marginEnd="@dimen/divider_15px"
+        android:theme="@style/Theme.MaterialComponents.NoActionBar"
+        app:cardBackgroundColor="@color/color_FFF6F4F4"
+        app:cardCornerRadius="@dimen/divider_8px"
+        app:strokeColor="@color/color_FF979797"
+        app:strokeWidth="@dimen/divider_1px">
+
+        <androidx.appcompat.widget.AppCompatTextView
+            android:id="@+id/tvNumber"
+            android:layout_width="match_parent"
+            android:layout_height="match_parent"
+            android:layout_gravity="center"
+            android:gravity="center"
+            android:text="@{data}"
+            android:textColor="@color/color_FF222222"
+            android:textSize="@dimen/divider_34px"
+            android:textStyle="bold"
+            tools:text="@string/app_name" />
+
+    </com.google.android.material.card.MaterialCardView>
+
+</layout>

+ 32 - 0
moca/src/main/res/layout/item_selected_item.xml

@@ -0,0 +1,32 @@
+<?xml version="1.0" encoding="utf-8"?>
+<layout xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:tools="http://schemas.android.com/tools"
+    tools:ignore="ResourceName">
+
+    <data>
+
+        <variable
+            name="data"
+            type="java.lang.String" />
+    </data>
+
+    <LinearLayout
+        android:id="@+id/selectedLayout"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:layout_margin="@dimen/divider_20px"
+        android:gravity="center">
+
+        <androidx.appcompat.widget.AppCompatTextView
+            android:id="@+id/tvNumber"
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:text="@{data}"
+            android:textColor="@color/color_FF222222"
+            android:textSize="@dimen/divider_34px"
+            android:textStyle="bold"
+            tools:text="@string/app_name" />
+
+    </LinearLayout>
+
+</layout>

+ 15 - 0
moca/src/main/res/navigation/nav_moca.xml

@@ -12,6 +12,21 @@
         android:label="alternatingconnectionFragment"
         tools:layout="@layout/fragment_alternating_connection">
 
+        <action
+            android:id="@+id/action_alternatingconnectionFragment_to_signatureFragment"
+            app:destination="@id/signatureFragment" />
+
+    </fragment>
+
+    <fragment
+        android:id="@+id/signatureFragment"
+        android:name="com.yingyangfly.moca.signature.SignatureFragment"
+        android:label="signatureFragment">
+
+        <action
+            android:id="@+id/action_signatureFragment_to_alternatingconnectionFragment"
+            app:destination="@id/alternatingconnectionFragment" />
+
     </fragment>
 
 </navigation>

+ 188 - 0
moca/src/main/res/values/dimens.xml

@@ -0,0 +1,188 @@
+<?xml version="1.0" encoding="utf-8"?>
+<resources xmlns:tools="http://schemas.android.com/tools">
+
+    <dimen name="divider_1194px" tools:ignore="ResourceName">1194px</dimen>
+    <dimen name="divider_834px" tools:ignore="ResourceName">834px</dimen>
+    <dimen name="divider_690px" tools:ignore="ResourceName">690px</dimen>
+    <dimen name="divider_689px" tools:ignore="ResourceName">689px</dimen>
+    <dimen name="divider_667px" tools:ignore="ResourceName">667px</dimen>
+    <dimen name="divider_620px" tools:ignore="ResourceName">620px</dimen>
+    <dimen name="divider_597px" tools:ignore="ResourceName">597px</dimen>
+    <dimen name="divider_533px" tools:ignore="ResourceName">533px</dimen>
+    <dimen name="divider_520px" tools:ignore="ResourceName">520px</dimen>
+    <dimen name="divider_448px" tools:ignore="ResourceName">448px</dimen>
+    <dimen name="divider_440px" tools:ignore="ResourceName">440px</dimen>
+    <dimen name="divider_432px" tools:ignore="ResourceName">432px</dimen>
+    <dimen name="divider_430px" tools:ignore="ResourceName">430px</dimen>
+    <dimen name="divider_429px" tools:ignore="ResourceName">429px</dimen>
+    <dimen name="divider_418px" tools:ignore="ResourceName">418px</dimen>
+    <dimen name="divider_416px" tools:ignore="ResourceName">416px</dimen>
+    <dimen name="divider_415px" tools:ignore="ResourceName">415px</dimen>
+    <dimen name="divider_413px" tools:ignore="ResourceName">413px</dimen>
+    <dimen name="divider_409px" tools:ignore="ResourceName">409px</dimen>
+    <dimen name="divider_398px" tools:ignore="ResourceName">398px</dimen>
+    <dimen name="divider_377px" tools:ignore="ResourceName">377px</dimen>
+    <dimen name="divider_367px" tools:ignore="ResourceName">367px</dimen>
+    <dimen name="divider_360px" tools:ignore="ResourceName">360px</dimen>
+    <dimen name="divider_354px" tools:ignore="ResourceName">354px</dimen>
+    <dimen name="divider_348px" tools:ignore="ResourceName">348px</dimen>
+    <dimen name="divider_345px" tools:ignore="ResourceName">345px</dimen>
+    <dimen name="divider_340px" tools:ignore="ResourceName">340px</dimen>
+    <dimen name="divider_339px" tools:ignore="ResourceName">339px</dimen>
+    <dimen name="divider_335px" tools:ignore="ResourceName">335px</dimen>
+    <dimen name="divider_333px" tools:ignore="ResourceName">333px</dimen>
+    <dimen name="divider_331px" tools:ignore="ResourceName">331px</dimen>
+    <dimen name="divider_330px" tools:ignore="ResourceName">330px</dimen>
+    <dimen name="divider_329px" tools:ignore="ResourceName">329px</dimen>
+    <dimen name="divider_327px" tools:ignore="ResourceName">327px</dimen>
+    <dimen name="divider_320px" tools:ignore="ResourceName">320px</dimen>
+    <dimen name="divider_313px" tools:ignore="ResourceName">313px</dimen>
+    <dimen name="divider_307px" tools:ignore="ResourceName">307px</dimen>
+    <dimen name="divider_305px" tools:ignore="ResourceName">305px</dimen>
+    <dimen name="divider_292px" tools:ignore="ResourceName">292px</dimen>
+    <dimen name="divider_289px" tools:ignore="ResourceName">289px</dimen>
+    <dimen name="divider_270px" tools:ignore="ResourceName">270px</dimen>
+    <dimen name="divider_264px" tools:ignore="ResourceName">264px</dimen>
+    <dimen name="divider_260px" tools:ignore="ResourceName">260px</dimen>
+    <dimen name="divider_250px" tools:ignore="ResourceName">250px</dimen>
+    <dimen name="divider_249px" tools:ignore="ResourceName">249px</dimen>
+    <dimen name="divider_245px" tools:ignore="ResourceName">245px</dimen>
+    <dimen name="divider_241px" tools:ignore="ResourceName">241px</dimen>
+    <dimen name="divider_240px" tools:ignore="ResourceName">240px</dimen>
+    <dimen name="divider_237px" tools:ignore="ResourceName">237px</dimen>
+    <dimen name="divider_230px" tools:ignore="ResourceName">230px</dimen>
+    <dimen name="divider_229px" tools:ignore="ResourceName">229px</dimen>
+    <dimen name="divider_215px" tools:ignore="ResourceName">215px</dimen>
+    <dimen name="divider_214px" tools:ignore="ResourceName">214px</dimen>
+    <dimen name="divider_213px" tools:ignore="ResourceName">213px</dimen>
+    <dimen name="divider_205px" tools:ignore="ResourceName">205px</dimen>
+    <dimen name="divider_203px" tools:ignore="ResourceName">203px</dimen>
+    <dimen name="divider_202px" tools:ignore="ResourceName">202px</dimen>
+    <dimen name="divider_200px" tools:ignore="ResourceName">200px</dimen>
+    <dimen name="divider_195px" tools:ignore="ResourceName">195px</dimen>
+    <dimen name="divider_191px" tools:ignore="ResourceName">191px</dimen>
+    <dimen name="divider_190px" tools:ignore="ResourceName">190px</dimen>
+    <dimen name="divider_185px" tools:ignore="ResourceName">185px</dimen>
+    <dimen name="divider_184px" tools:ignore="ResourceName">184px</dimen>
+    <dimen name="divider_180px" tools:ignore="ResourceName">180px</dimen>
+    <dimen name="divider_179px" tools:ignore="ResourceName">179px</dimen>
+    <dimen name="divider_176px" tools:ignore="ResourceName">176px</dimen>
+    <dimen name="divider_175px" tools:ignore="ResourceName">175px</dimen>
+    <dimen name="divider_169px" tools:ignore="ResourceName">169px</dimen>
+    <dimen name="divider_154px" tools:ignore="ResourceName">154px</dimen>
+    <dimen name="divider_149px" tools:ignore="ResourceName">149px</dimen>
+    <dimen name="divider_140px" tools:ignore="ResourceName">140px</dimen>
+    <dimen name="divider_135px" tools:ignore="ResourceName">135px</dimen>
+    <dimen name="divider_133px" tools:ignore="ResourceName">133px</dimen>
+    <dimen name="divider_130px" tools:ignore="ResourceName">130px</dimen>
+    <dimen name="divider_128px" tools:ignore="ResourceName">128px</dimen>
+    <dimen name="divider_125px" tools:ignore="ResourceName">125px</dimen>
+    <dimen name="divider_120px" tools:ignore="ResourceName">120px</dimen>
+    <dimen name="divider_119px" tools:ignore="ResourceName">119px</dimen>
+    <dimen name="divider_118px" tools:ignore="ResourceName">118px</dimen>
+    <dimen name="divider_117px" tools:ignore="ResourceName">117px</dimen>
+    <dimen name="divider_116px" tools:ignore="ResourceName">116px</dimen>
+    <dimen name="divider_115px" tools:ignore="ResourceName">115px</dimen>
+    <dimen name="divider_114px" tools:ignore="ResourceName">114px</dimen>
+    <dimen name="divider_113px" tools:ignore="ResourceName">113px</dimen>
+    <dimen name="divider_112px" tools:ignore="ResourceName">112px</dimen>
+    <dimen name="divider_111px" tools:ignore="ResourceName">111px</dimen>
+    <dimen name="divider_110px" tools:ignore="ResourceName">110px</dimen>
+    <dimen name="divider_109px" tools:ignore="ResourceName">109px</dimen>
+    <dimen name="divider_108px" tools:ignore="ResourceName">108px</dimen>
+    <dimen name="divider_107px" tools:ignore="ResourceName">107px</dimen>
+    <dimen name="divider_106px" tools:ignore="ResourceName">106px</dimen>
+    <dimen name="divider_105px" tools:ignore="ResourceName">105px</dimen>
+    <dimen name="divider_104px" tools:ignore="ResourceName">104px</dimen>
+    <dimen name="divider_103px" tools:ignore="ResourceName">103px</dimen>
+    <dimen name="divider_102px" tools:ignore="ResourceName">102px</dimen>
+    <dimen name="divider_101px" tools:ignore="ResourceName">101px</dimen>
+    <dimen name="divider_100px" tools:ignore="ResourceName">100px</dimen>
+    <dimen name="divider_98px" tools:ignore="ResourceName">98px</dimen>
+    <dimen name="divider_96px" tools:ignore="ResourceName">96px</dimen>
+    <dimen name="divider_94px" tools:ignore="ResourceName">94px</dimen>
+    <dimen name="divider_90px" tools:ignore="ResourceName">90px</dimen>
+    <dimen name="divider_88px" tools:ignore="ResourceName">88px</dimen>
+    <dimen name="divider_86px" tools:ignore="ResourceName">86px</dimen>
+    <dimen name="divider_82px" tools:ignore="ResourceName">82px</dimen>
+    <dimen name="divider_80px" tools:ignore="ResourceName">80px</dimen>
+    <dimen name="divider_79px" tools:ignore="ResourceName">79px</dimen>
+    <dimen name="divider_78px" tools:ignore="ResourceName">78px</dimen>
+    <dimen name="divider_77px" tools:ignore="ResourceName">77px</dimen>
+    <dimen name="divider_76px" tools:ignore="ResourceName">76px</dimen>
+    <dimen name="divider_75px" tools:ignore="ResourceName">75px</dimen>
+    <dimen name="divider_74px" tools:ignore="ResourceName">74px</dimen>
+    <dimen name="divider_73px" tools:ignore="ResourceName">73px</dimen>
+    <dimen name="divider_72px" tools:ignore="ResourceName">72px</dimen>
+    <dimen name="divider_71px" tools:ignore="ResourceName">71px</dimen>
+    <dimen name="divider_70px" tools:ignore="ResourceName">70px</dimen>
+    <dimen name="divider_69px" tools:ignore="ResourceName">69px</dimen>
+    <dimen name="divider_68px" tools:ignore="ResourceName">68px</dimen>
+    <dimen name="divider_67px" tools:ignore="ResourceName">67px</dimen>
+    <dimen name="divider_66px" tools:ignore="ResourceName">66px</dimen>
+    <dimen name="divider_65px" tools:ignore="ResourceName">65px</dimen>
+    <dimen name="divider_64px" tools:ignore="ResourceName">64px</dimen>
+    <dimen name="divider_63px" tools:ignore="ResourceName">63px</dimen>
+    <dimen name="divider_62px" tools:ignore="ResourceName">62px</dimen>
+    <dimen name="divider_61px" tools:ignore="ResourceName">61px</dimen>
+    <dimen name="divider_60px" tools:ignore="ResourceName">60px</dimen>
+    <dimen name="divider_59px" tools:ignore="ResourceName">59px</dimen>
+    <dimen name="divider_58px" tools:ignore="ResourceName">58px</dimen>
+    <dimen name="divider_57px" tools:ignore="ResourceName">57px</dimen>
+    <dimen name="divider_56px" tools:ignore="ResourceName">56px</dimen>
+    <dimen name="divider_55px" tools:ignore="ResourceName">55px</dimen>
+    <dimen name="divider_54px" tools:ignore="ResourceName">54px</dimen>
+    <dimen name="divider_53px" tools:ignore="ResourceName">53px</dimen>
+    <dimen name="divider_52px" tools:ignore="ResourceName">52px</dimen>
+    <dimen name="divider_51px" tools:ignore="ResourceName">51px</dimen>
+    <dimen name="divider_50px" tools:ignore="ResourceName">50px</dimen>
+    <dimen name="divider_49px" tools:ignore="ResourceName">49px</dimen>
+    <dimen name="divider_48px" tools:ignore="ResourceName">48px</dimen>
+    <dimen name="divider_47px" tools:ignore="ResourceName">47px</dimen>
+    <dimen name="divider_46px" tools:ignore="ResourceName">46px</dimen>
+    <dimen name="divider_45px" tools:ignore="ResourceName">45px</dimen>
+    <dimen name="divider_44px" tools:ignore="ResourceName">44px</dimen>
+    <dimen name="divider_43px" tools:ignore="ResourceName">43px</dimen>
+    <dimen name="divider_42px" tools:ignore="ResourceName">42px</dimen>
+    <dimen name="divider_41px" tools:ignore="ResourceName">41px</dimen>
+    <dimen name="divider_40px" tools:ignore="ResourceName">40px</dimen>
+    <dimen name="divider_39px" tools:ignore="ResourceName">39px</dimen>
+    <dimen name="divider_38px" tools:ignore="ResourceName">38px</dimen>
+    <dimen name="divider_37px" tools:ignore="ResourceName">37px</dimen>
+    <dimen name="divider_36px" tools:ignore="ResourceName">36px</dimen>
+    <dimen name="divider_35px" tools:ignore="ResourceName">35px</dimen>
+    <dimen name="divider_34px" tools:ignore="ResourceName">34px</dimen>
+    <dimen name="divider_33px" tools:ignore="ResourceName">33px</dimen>
+    <dimen name="divider_32px" tools:ignore="ResourceName">32px</dimen>
+    <dimen name="divider_31px" tools:ignore="ResourceName">31px</dimen>
+    <dimen name="divider_30px" tools:ignore="ResourceName">30px</dimen>
+    <dimen name="divider_29px" tools:ignore="ResourceName">29px</dimen>
+    <dimen name="divider_28px" tools:ignore="ResourceName">28px</dimen>
+    <dimen name="divider_27px" tools:ignore="ResourceName">27px</dimen>
+    <dimen name="divider_26px" tools:ignore="ResourceName">26px</dimen>
+    <dimen name="divider_25px" tools:ignore="ResourceName">25px</dimen>
+    <dimen name="divider_24px" tools:ignore="ResourceName">24px</dimen>
+    <dimen name="divider_23px" tools:ignore="ResourceName">23px</dimen>
+    <dimen name="divider_22px" tools:ignore="ResourceName">22px</dimen>
+    <dimen name="divider_21px" tools:ignore="ResourceName">21px</dimen>
+    <dimen name="divider_20px" tools:ignore="ResourceName">20px</dimen>
+    <dimen name="divider_19px" tools:ignore="ResourceName">19px</dimen>
+    <dimen name="divider_18px" tools:ignore="ResourceName">18px</dimen>
+    <dimen name="divider_17px" tools:ignore="ResourceName">17px</dimen>
+    <dimen name="divider_16px" tools:ignore="ResourceName">16px</dimen>
+    <dimen name="divider_15px" tools:ignore="ResourceName">15px</dimen>
+    <dimen name="divider_14px" tools:ignore="ResourceName">14px</dimen>
+    <dimen name="divider_13px" tools:ignore="ResourceName">13px</dimen>
+    <dimen name="divider_12px" tools:ignore="ResourceName">12px</dimen>
+    <dimen name="divider_11px" tools:ignore="ResourceName">11px</dimen>
+    <dimen name="divider_10px" tools:ignore="ResourceName">10px</dimen>
+    <dimen name="divider_9px" tools:ignore="ResourceName">9px</dimen>
+    <dimen name="divider_8px" tools:ignore="ResourceName">8px</dimen>
+    <dimen name="divider_7px" tools:ignore="ResourceName">7px</dimen>
+    <dimen name="divider_6px" tools:ignore="ResourceName">6px</dimen>
+    <dimen name="divider_5px" tools:ignore="ResourceName">5px</dimen>
+    <dimen name="divider_4px" tools:ignore="ResourceName">4px</dimen>
+    <dimen name="divider_3px" tools:ignore="ResourceName">3px</dimen>
+    <dimen name="divider_2px" tools:ignore="ResourceName">2px</dimen>
+    <dimen name="divider_1px" tools:ignore="ResourceName">1px</dimen>
+</resources>

+ 3 - 0
moca/src/main/res/values/strings.xml

@@ -22,4 +22,7 @@
     <string name="subjects_can_also_draw_pictures_on_paper" tools:ignore="ResourceName">受试者也可在纸上画图</string>
     <string name="do_you_remember_three_words_you_just_remembered_please_say_again" tools:ignore="ResourceName">还记得刚才让您记住的三个词吗?请您再说一遍</string>
     <string name="close_the_eyes" tools:ignore="ResourceName">闭上眼睛</string>
+    <string name="reset_connection" tools:ignore="ResourceName">重置连线</string>
+    <string name="confirm_completion" tools:ignore="ResourceName">确认完成</string>
+    <string name="please_draw_box_according_diagram" tools:ignore="ResourceName">请您按照这幅图在方框内再画一遍</string>
 </resources>