فهرست منبع

1.添加获取moca试题库module

王鹏鹏 2 سال پیش
والد
کامیت
519ae5b894

+ 4 - 1
.idea/misc.xml

@@ -120,7 +120,10 @@
         <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_resetting.xml" value="0.1715" />
         <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/drawable/bg_start_clock.xml" value="0.1715" />
+        <entry key="..\:/workspace/hcp-pad/moca/src/main/res/drawable/bg_time_format.xml" value="0.1715" />
         <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" />
@@ -140,7 +143,7 @@
         <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/fragment_single_choice.xml" value="0.22239583333333332" />
         <entry key="..\:/workspace/hcp-pad/moca/src/main/res/layout/fragment_sound_record.xml" value="0.4" />
-        <entry key="..\:/workspace/hcp-pad/moca/src/main/res/layout/fragment_timepiece.xml" value="0.22239583333333332" />
+        <entry key="..\:/workspace/hcp-pad/moca/src/main/res/layout/fragment_timepiece.xml" value="0.8129032258064516" />
         <entry key="..\:/workspace/hcp-pad/moca/src/main/res/layout/fragment_verify_answers.xml" value="0.4" />
         <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_moca_choice.xml" value="0.23697916666666666" />

+ 107 - 0
baselib/src/main/java/com/yingyangfly/baselib/utils/RxTimer.java

@@ -0,0 +1,107 @@
+package com.yingyangfly.baselib.utils;
+
+import java.util.concurrent.TimeUnit;
+
+import io.reactivex.Observable;
+import io.reactivex.Observer;
+import io.reactivex.android.schedulers.AndroidSchedulers;
+import io.reactivex.annotations.NonNull;
+import io.reactivex.disposables.Disposable;
+
+/**
+ * @Author: Austin
+ * @Date: 19-3-29
+ * @Description: 定时器工具类
+ */
+public class RxTimer {
+
+    private Disposable mDisposable;
+
+    /**
+     * milliseconds毫秒后执行指定动作
+     *
+     * @param milliSeconds
+     * @param rxAction
+     */
+    public void timer(long milliSeconds, final RxAction rxAction) {
+        Observable.timer(milliSeconds, TimeUnit.MILLISECONDS)
+                .observeOn(AndroidSchedulers.mainThread())
+                .subscribe(new Observer<Long>() {
+                    @Override
+                    public void onSubscribe(@NonNull Disposable disposable) {
+                        mDisposable = disposable;
+                    }
+
+                    @Override
+                    public void onNext(@NonNull Long number) {
+                        if (rxAction != null) {
+                            rxAction.action(number);
+                        }
+                    }
+
+                    @Override
+                    public void onError(@NonNull Throwable e) {
+                        //取消订阅
+                        cancel();
+                    }
+
+                    @Override
+                    public void onComplete() {
+                        //取消订阅
+                        cancel();
+                    }
+                });
+    }
+
+    /**
+     * 每隔milliseconds毫秒后执行指定动作
+     *如果是调用的interval方法,需要在activity的onDestroy方法中调用cancel,类似如下:
+     * @param milliSeconds
+     * @param rxAction
+     */
+    public void interval(long milliSeconds, final RxAction rxAction) {
+        Observable.interval(milliSeconds, TimeUnit.MILLISECONDS)
+                .observeOn(AndroidSchedulers.mainThread())
+                .subscribe(new Observer<Long>() {
+                    @Override
+                    public void onSubscribe(@NonNull Disposable disposable) {
+                        mDisposable = disposable;
+                    }
+
+                    @Override
+                    public void onNext(@NonNull Long number) {
+                        if (rxAction != null) {
+                            rxAction.action(number);
+                        }
+                    }
+
+                    @Override
+                    public void onError(@NonNull Throwable e) {
+
+                    }
+
+                    @Override
+                    public void onComplete() {
+
+                    }
+                });
+    }
+
+    /**
+     * 取消订阅
+     */
+    public void cancel() {
+        if (mDisposable != null && !mDisposable.isDisposed()) {
+            mDisposable.dispose();
+        }
+    }
+
+    public interface RxAction {
+        /**
+         * 让调用者指定指定动作
+         *
+         * @param number
+         */
+        void action(long number);
+    }
+}

+ 37 - 1
moca/src/main/java/com/yingyangfly/moca/timepiece/TimepieceFragment.kt

@@ -1,23 +1,54 @@
 package com.yingyangfly.moca.timepiece
 
+import android.annotation.SuppressLint
 import androidx.core.os.bundleOf
 import androidx.navigation.Navigation
 import com.yingyang.moca.R
 import com.yingyang.moca.databinding.FragmentTimepieceBinding
 import com.yingyangfly.baselib.base.BaseFragment
 import com.yingyangfly.baselib.ext.setOnSingleClickListener
+import com.yingyangfly.baselib.utils.RxTimer
 
 /**
  * 计时器
  */
 class TimepieceFragment : BaseFragment<FragmentTimepieceBinding>() {
 
-    override fun initViews() {
+    lateinit var rxTimer: RxTimer
 
+    override fun initViews() {
+        rxTimer = RxTimer()
     }
 
+    @SuppressLint("SetTextI18n")
     override fun initListener() {
         binding {
+            btnStartClock.setOnSingleClickListener {
+                tvMinute.text = "00"
+                val m: Long = 1000
+                val time = 59.toLong()
+                rxTimer.interval(m) {
+                    if (it < time) {
+                        val second = it + 1
+                        tvSecond.text = if (second < 9) {
+                            "0$second"
+                        } else {
+                            second.toString()
+                        }
+                    } else {
+                        tvMinute.text = "01"
+                        tvSecond.text = "00"
+                        rxTimer.cancel()
+                    }
+                }
+            }
+
+            btnResetting.setOnSingleClickListener {
+                rxTimer.cancel()
+                tvMinute.text = "00"
+                tvSecond.text = "00"
+            }
+
             btnPrevious.setOnSingleClickListener {
                 val controller = Navigation.findNavController(it)
                 val bundle = bundleOf("questionId" to 58)
@@ -41,4 +72,9 @@ class TimepieceFragment : BaseFragment<FragmentTimepieceBinding>() {
     override fun initData() {
 
     }
+
+    override fun onPause() {
+        super.onPause()
+        rxTimer.cancel()
+    }
 }

+ 7 - 0
moca/src/main/res/drawable/bg_resetting.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_13px" />
+    <solid android:color="@color/color_FFC1D0FF" />
+</shape>

+ 7 - 0
moca/src/main/res/drawable/bg_start_clock.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_13px" />
+    <solid android:color="@color/color_FF4A76FF" />
+</shape>

+ 10 - 0
moca/src/main/res/drawable/bg_time_format.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_13px" />
+    <solid android:color="@color/color_FFECF0FF" />
+</shape>

+ 130 - 0
moca/src/main/res/layout/fragment_timepiece.xml

@@ -8,6 +8,136 @@
         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_53px"
+            android:layout_marginEnd="@dimen/divider_200px"
+            android:gravity="center"
+            android:text="@string/now_say_many_animal_names_as_you_can_in_one_minute"
+            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:layout_width="@dimen/divider_620px"
+            android:layout_height="@dimen/divider_275px"
+            android:layout_marginTop="@dimen/divider_62px"
+            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">
+
+            <androidx.constraintlayout.widget.ConstraintLayout
+                android:layout_width="match_parent"
+                android:layout_height="match_parent">
+
+                <TextView
+                    android:id="@+id/tvMinuteInfo"
+                    android:layout_width="wrap_content"
+                    android:layout_height="wrap_content"
+                    android:layout_marginStart="@dimen/divider_80px"
+                    android:layout_marginTop="@dimen/divider_47px"
+                    android:text="@string/minute"
+                    android:textColor="@color/color_FF222222"
+                    android:textSize="@dimen/divider_32px"
+                    app:layout_constraintStart_toStartOf="parent"
+                    app:layout_constraintTop_toTopOf="parent" />
+
+                <TextView
+                    android:id="@+id/tvSecondInfo"
+                    android:layout_width="wrap_content"
+                    android:layout_height="wrap_content"
+                    android:layout_marginStart="@dimen/divider_180px"
+                    android:layout_marginTop="@dimen/divider_47px"
+                    android:text="@string/second"
+                    android:textColor="@color/color_FF222222"
+                    android:textSize="@dimen/divider_32px"
+                    app:layout_constraintStart_toEndOf="@+id/tvMinuteInfo"
+                    app:layout_constraintTop_toTopOf="parent" />
+
+                <androidx.appcompat.widget.AppCompatButton
+                    android:id="@+id/btnStartClock"
+                    android:layout_width="@dimen/divider_192px"
+                    android:layout_height="@dimen/divider_68px"
+                    android:layout_marginTop="@dimen/divider_53px"
+                    android:layout_marginEnd="@dimen/divider_40px"
+                    android:background="@drawable/bg_start_clock"
+                    android:text="@string/start_the_clock"
+                    android:textColor="@android:color/white"
+                    android:textSize="@dimen/divider_28px"
+                    app:layout_constraintEnd_toEndOf="parent"
+                    app:layout_constraintTop_toTopOf="parent" />
+
+                <androidx.appcompat.widget.AppCompatButton
+                    android:id="@+id/btnResetting"
+                    android:layout_width="@dimen/divider_192px"
+                    android:layout_height="@dimen/divider_68px"
+                    android:layout_marginTop="@dimen/divider_22px"
+                    android:layout_marginEnd="@dimen/divider_40px"
+                    android:background="@drawable/bg_resetting"
+                    android:text="@string/resetting"
+                    android:textColor="@color/color_FF4A76FF"
+                    android:textSize="@dimen/divider_28px"
+                    app:layout_constraintEnd_toEndOf="parent"
+                    app:layout_constraintTop_toBottomOf="@+id/btnStartClock" />
+
+                <TextView
+                    android:id="@+id/tvMinute"
+                    android:layout_width="@dimen/divider_133px"
+                    android:layout_height="@dimen/divider_102px"
+                    android:layout_marginStart="@dimen/divider_35px"
+                    android:layout_marginTop="@dimen/divider_15px"
+                    android:background="@drawable/bg_time_format"
+                    android:gravity="center"
+                    android:text="@string/zero_zero"
+                    android:textColor="@color/color_FF333333"
+                    android:textSize="@dimen/divider_60px"
+                    android:textStyle="bold"
+                    app:layout_constraintStart_toStartOf="parent"
+                    app:layout_constraintTop_toBottomOf="@+id/tvMinuteInfo" />
+
+                <TextView
+                    android:id="@+id/tvColon"
+                    android:layout_width="wrap_content"
+                    android:layout_height="wrap_content"
+                    android:layout_marginStart="@dimen/divider_20px"
+                    android:layout_marginTop="@dimen/divider_18px"
+                    android:text="@string/colon"
+                    android:textColor="@color/color_FF333333"
+                    android:textSize="@dimen/divider_60px"
+                    android:textStyle="bold"
+                    app:layout_constraintStart_toEndOf="@+id/tvMinute"
+                    app:layout_constraintTop_toBottomOf="@+id/tvSecondInfo" />
+
+                <TextView
+                    android:id="@+id/tvSecond"
+                    android:layout_width="@dimen/divider_133px"
+                    android:layout_height="@dimen/divider_102px"
+                    android:layout_marginTop="@dimen/divider_15px"
+                    android:background="@drawable/bg_time_format"
+                    android:gravity="center"
+                    android:text="@string/zero_zero"
+                    android:textColor="@color/color_FF333333"
+                    android:textSize="@dimen/divider_60px"
+                    android:textStyle="bold"
+                    app:layout_constraintStart_toEndOf="@+id/tvColon"
+                    app:layout_constraintTop_toBottomOf="@+id/tvSecondInfo" />
+
+
+            </androidx.constraintlayout.widget.ConstraintLayout>
+        </com.google.android.material.card.MaterialCardView>
+
+
         <androidx.appcompat.widget.AppCompatButton
             android:id="@+id/btnPrevious"
             android:layout_width="@dimen/divider_240px"

+ 2 - 0
moca/src/main/res/values/colors.xml

@@ -9,4 +9,6 @@
     <color name="color_FFCF0404" tools:ignore="ResourceName">#FFCF0404</color>
     <color name="color_FFFFFFFF" tools:ignore="ResourceName">#FFFFFFFF</color>
     <color name="transparent" tools:ignore="ResourceName">#00000000</color><!-- 透明   -->
+    <color name="color_FFECF0FF" tools:ignore="ResourceName">#FFECF0FF</color>
+    <color name="color_FFC1D0FF" tools:ignore="ResourceName">#FFC1D0FF</color>
 </resources>

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

@@ -43,7 +43,9 @@
     <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_275px" tools:ignore="ResourceName">275px</dimen>
     <dimen name="divider_270px" tools:ignore="ResourceName">270px</dimen>
+    <dimen name="divider_265px" tools:ignore="ResourceName">265px</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>
@@ -63,6 +65,7 @@
     <dimen name="divider_200px" tools:ignore="ResourceName">200px</dimen>
     <dimen name="divider_195px" tools:ignore="ResourceName">195px</dimen>
     <dimen name="divider_194px" tools:ignore="ResourceName">194px</dimen>
+    <dimen name="divider_192px" tools:ignore="ResourceName">192px</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>
@@ -72,8 +75,11 @@
     <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_160px" tools:ignore="ResourceName">160px</dimen>
     <dimen name="divider_154px" tools:ignore="ResourceName">154px</dimen>
+    <dimen name="divider_152px" tools:ignore="ResourceName">152px</dimen>
     <dimen name="divider_149px" tools:ignore="ResourceName">149px</dimen>
+    <dimen name="divider_147px" tools:ignore="ResourceName">147px</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>
@@ -102,6 +108,7 @@
     <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_97px" tools:ignore="ResourceName">97px</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>

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

@@ -37,4 +37,11 @@
     <string name="may_i_ask_the_subject_is_wrong" tools:ignore="ResourceName">请问受试者错了</string>
     <string name="time" tools:ignore="ResourceName">次</string>
     <string name="please_listen_carefully_after_listening_please_say_this_sentence_word_for_word" tools:ignore="ResourceName">接下来将给您听一句话,请仔细听,听完后请您一字不差地说出这句话,请听题</string>
+    <string name="now_say_many_animal_names_as_you_can_in_one_minute" tools:ignore="ResourceName">下面请您在1分钟内尽可能多的说出动物的名字您准备好就可以开始说了</string>
+    <string name="minute" tools:ignore="ResourceName">分</string>
+    <string name="second" tools:ignore="ResourceName">秒</string>
+    <string name="start_the_clock" tools:ignore="ResourceName">开始计时</string>
+    <string name="zero_zero" tools:ignore="ResourceName">00</string>
+    <string name="colon" tools:ignore="ResourceName">:</string>
+    <string name="resetting" tools:ignore="ResourceName">复位</string>
 </resources>