Jelajahi Sumber

增加机构版模块

Pq 1 tahun lalu
induk
melakukan
da4ab2a9ae
100 mengubah file dengan 758 tambahan dan 0 penghapusan
  1. 7 0
      BaseLibrary/src/main/java/com/cooleshow/base/router/RouterPath.kt
  2. 1 0
      institution/.gitignore
  3. 66 0
      institution/build.gradle
  4. 0 0
      institution/consumer-rules.pro
  5. 21 0
      institution/proguard-rules.pro
  6. 26 0
      institution/src/androidTest/java/com/cooleshow/institution/stu/ExampleInstrumentedTest.java
  7. 13 0
      institution/src/main/AndroidManifest.xml
  8. 0 0
      institution/src/main/assets/lottieHome/all_practice.json
  9. 0 0
      institution/src/main/assets/lottieHome/empty_anim.json
  10. 0 0
      institution/src/main/assets/lottieHome/subject_practice.json
  11. TEMPAT SAMPAH
      institution/src/main/assets/lottieHome/trackList/images/Fill_113_E7887359-BBD6-4780-87D0-6E398FA7BE3C.png
  12. TEMPAT SAMPAH
      institution/src/main/assets/lottieHome/trackList/images/_-____5D9BF709-99E9-43FB-927C-45F86639B67F.png
  13. TEMPAT SAMPAH
      institution/src/main/assets/lottieHome/trackList/images/__1_A71246DA-69B7-4C01-9F39-583F5725A10D.png
  14. TEMPAT SAMPAH
      institution/src/main/assets/lottieHome/trackList/images/__1_DE370604-09F0-4F30-B999-B184D6318B15.png
  15. TEMPAT SAMPAH
      institution/src/main/assets/lottieHome/trackList/images/__2_57549191-2B1A-4354-93B1-8DD308D14979.png
  16. TEMPAT SAMPAH
      institution/src/main/assets/lottieHome/trackList/images/__2_CC3FDC63-BFF5-4DF6-8FAE-1EE8B743E55A.png
  17. TEMPAT SAMPAH
      institution/src/main/assets/lottieHome/trackList/images/__2_D9FF9D73-AF36-4E8A-AF10-76335A833525.png
  18. TEMPAT SAMPAH
      institution/src/main/assets/lottieHome/trackList/images/__3_1886F784-6B15-4CF5-9300-0806A405A968.png
  19. TEMPAT SAMPAH
      institution/src/main/assets/lottieHome/trackList/images/__3_5007EE18-2E2D-4BFD-810D-A08248D04040.png
  20. TEMPAT SAMPAH
      institution/src/main/assets/lottieHome/trackList/images/__3__F89072F7-29E9-466F-A3D4-6E219994CFA0.png
  21. TEMPAT SAMPAH
      institution/src/main/assets/lottieHome/trackList/images/__4_03682930-24C0-46A5-926E-3C4708349B30.png
  22. TEMPAT SAMPAH
      institution/src/main/assets/lottieHome/trackList/images/__4_46C271D1-0426-44A9-8A10-FD365AEDCFA3.png
  23. TEMPAT SAMPAH
      institution/src/main/assets/lottieHome/trackList/images/__4__7BE24997-CF2E-41AF-94FB-1C07E70D1A48.png
  24. TEMPAT SAMPAH
      institution/src/main/assets/lottieHome/trackList/images/__5_F861A235-ECF5-4423-90F1-F0A55A8EE337.png
  25. TEMPAT SAMPAH
      institution/src/main/assets/lottieHome/trackList/images/__5__078F99A2-3ED1-47E4-A04C-4BF404CFF7B6.png
  26. TEMPAT SAMPAH
      institution/src/main/assets/lottieHome/trackList/images/__6__CDBE3A48-FB3A-4480-A8D1-1F8EA3B0B24A.png
  27. TEMPAT SAMPAH
      institution/src/main/assets/lottieHome/trackList/images/__E02253BD-EFE6-463E-9A33-DFF59B771FA4.png
  28. TEMPAT SAMPAH
      institution/src/main/assets/lottieHome/trackList/images/___0601C47D-67D5-470E-9204-C78F8BEF5BA7.png
  29. TEMPAT SAMPAH
      institution/src/main/assets/lottieHome/trackList/images/___1_260EC3EA-BD00-4530-A92D-36FA59C33F9A.png
  30. TEMPAT SAMPAH
      institution/src/main/assets/lottieHome/trackList/images/___1_8B8DF4F2-B206-4D31-A635-03B0C6A5D660.png
  31. TEMPAT SAMPAH
      institution/src/main/assets/lottieHome/trackList/images/___1_BBE11284-CBEF-44AA-BEA9-E343B2A9D988.png
  32. TEMPAT SAMPAH
      institution/src/main/assets/lottieHome/trackList/images/___2_84A46D49-908E-4C9F-9DDC-E4463F22918E.png
  33. TEMPAT SAMPAH
      institution/src/main/assets/lottieHome/trackList/images/___2_A2C93B95-8E0C-4FC9-9CD7-FF784E633F17.png
  34. TEMPAT SAMPAH
      institution/src/main/assets/lottieHome/trackList/images/___3_3CC8A30C-795F-434F-8C66-C805E273C3C0.png
  35. TEMPAT SAMPAH
      institution/src/main/assets/lottieHome/trackList/images/___3_FFF8EAB8-9898-4018-A4E6-2F4F5C56FBC3.png
  36. TEMPAT SAMPAH
      institution/src/main/assets/lottieHome/trackList/images/___5AF3275B-DA19-459C-BBFC-4AB474A71117.png
  37. TEMPAT SAMPAH
      institution/src/main/assets/lottieHome/trackList/images/___6151A0BB-3ECB-4E66-8950-4C1391588787.png
  38. TEMPAT SAMPAH
      institution/src/main/assets/lottieHome/trackList/images/___752C6F58-8959-4CAB-8B0A-97E1BEC8257B.png
  39. TEMPAT SAMPAH
      institution/src/main/assets/lottieHome/trackList/images/___953D5213-3178-40EE-AE38-E5CEEA1E7263.png
  40. TEMPAT SAMPAH
      institution/src/main/assets/lottieHome/trackList/images/___B63494E7-6C64-4682-B6DE-309A74A37C2E.png
  41. TEMPAT SAMPAH
      institution/src/main/assets/lottieHome/trackList/images/___CFB7FF7D-E210-4157-9F44-979D790F5CC6.png
  42. TEMPAT SAMPAH
      institution/src/main/assets/lottieHome/trackList/images/___D15904F7-769E-448D-B5EA-203F0DBE96EF.png
  43. TEMPAT SAMPAH
      institution/src/main/assets/lottieHome/trackList/images/___DE35998C-B3DA-4E9F-818E-957D947CBD7B.png
  44. TEMPAT SAMPAH
      institution/src/main/assets/lottieHome/trackList/images/___E09F6959-00DA-4186-8344-8C4B490F448C.png
  45. TEMPAT SAMPAH
      institution/src/main/assets/lottieHome/trackList/images/___EF321636-BA8D-4CA0-BDC5-E11A3811A781.png
  46. TEMPAT SAMPAH
      institution/src/main/assets/lottieHome/trackList/images/____129E03E4-F79E-449C-A279-5976A836EBB6.png
  47. TEMPAT SAMPAH
      institution/src/main/assets/lottieHome/trackList/images/____172F4977-96B3-4845-B683-4C4C3C44C04F.png
  48. TEMPAT SAMPAH
      institution/src/main/assets/lottieHome/trackList/images/____326299A3-C78D-43F8-B343-2D87C3624B30.png
  49. TEMPAT SAMPAH
      institution/src/main/assets/lottieHome/trackList/images/____38403A58-B077-455B-B0F1-12FAF0DCE7FB.png
  50. TEMPAT SAMPAH
      institution/src/main/assets/lottieHome/trackList/images/____4218AFE4-C566-47FF-BEF3-9810478B0946.png
  51. TEMPAT SAMPAH
      institution/src/main/assets/lottieHome/trackList/images/____52BC1CD3-B427-4FBC-853C-B95B113F5942.png
  52. TEMPAT SAMPAH
      institution/src/main/assets/lottieHome/trackList/images/____5C825C23-1A6A-4D5C-9EDA-ADD682AC4078.png
  53. TEMPAT SAMPAH
      institution/src/main/assets/lottieHome/trackList/images/____6023D019-A592-4FCB-A3EB-64B21054D8CA.png
  54. TEMPAT SAMPAH
      institution/src/main/assets/lottieHome/trackList/images/____6F8AA26E-2717-48E7-97F5-418C05FF10F1.png
  55. TEMPAT SAMPAH
      institution/src/main/assets/lottieHome/trackList/images/____872F535D-23C4-45CD-8F4B-5C740330C4EE.png
  56. TEMPAT SAMPAH
      institution/src/main/assets/lottieHome/trackList/images/____C42F09FC-8B0B-4F0B-817D-C53771EE9622.png
  57. TEMPAT SAMPAH
      institution/src/main/assets/lottieHome/trackList/images/____D566C5E7-AE58-4523-9C25-DF922016B960.png
  58. TEMPAT SAMPAH
      institution/src/main/assets/lottieHome/trackList/images/_____.png
  59. TEMPAT SAMPAH
      institution/src/main/assets/lottieHome/trackList/images/______10F39BE5EF-58B7-4EE8-9E5E-82F46D7904D8.jpg
  60. TEMPAT SAMPAH
      institution/src/main/assets/lottieHome/trackList/images/______124801FD4-DBB6-4245-96C5-A5AA38B5BD9D.png
  61. TEMPAT SAMPAH
      institution/src/main/assets/lottieHome/trackList/images/______2B05C9197-DBAB-4FA8-9560-8B9A5721ED65.png
  62. TEMPAT SAMPAH
      institution/src/main/assets/lottieHome/trackList/images/______3FE690DDB-7817-44F4-900B-EEB94EB68153.png
  63. TEMPAT SAMPAH
      institution/src/main/assets/lottieHome/trackList/images/______44D0BF8B3-7740-4946-9753-59A717794A17.png
  64. TEMPAT SAMPAH
      institution/src/main/assets/lottieHome/trackList/images/______6BE6F0CC6-E4B9-4D57-A172-DC0E2BB7B139.png
  65. TEMPAT SAMPAH
      institution/src/main/assets/lottieHome/trackList/images/______7C7E6FFB5-5C36-4843-9B39-8DBC9ACFBA24.png
  66. TEMPAT SAMPAH
      institution/src/main/assets/lottieHome/trackList/images/______93C90C56D-548C-4343-815F-9F07E5D416CF.png
  67. 0 0
      institution/src/main/assets/lottieHome/track_list.json
  68. 59 0
      institution/src/main/java/com/cooleshow/institution/stu/adapter/HomeCardPageAdapter.java
  69. 50 0
      institution/src/main/java/com/cooleshow/institution/stu/adapter/HomePageAdapter.java
  70. 20 0
      institution/src/main/java/com/cooleshow/institution/stu/constants/HomePageType.java
  71. 12 0
      institution/src/main/java/com/cooleshow/institution/stu/contract/HomeContract.java
  72. 10 0
      institution/src/main/java/com/cooleshow/institution/stu/presenter/HomePresenter.java
  73. 72 0
      institution/src/main/java/com/cooleshow/institution/stu/ui/main/CardAnimFragment.java
  74. 95 0
      institution/src/main/java/com/cooleshow/institution/stu/ui/main/HomeCardFragment.java
  75. 42 0
      institution/src/main/java/com/cooleshow/institution/stu/ui/main/HomeFragment.java
  76. 83 0
      institution/src/main/java/com/cooleshow/institution/stu/ui/main/MainActivity.java
  77. 123 0
      institution/src/main/java/com/cooleshow/institution/stu/widget/NestedScrollableHost.java
  78. 43 0
      institution/src/main/java/com/cooleshow/institution/stu/widget/ScaleTransformer.java
  79. 5 0
      institution/src/main/res/color/selector_aaaaaa_to_ff497b.xml
  80. TEMPAT SAMPAH
      institution/src/main/res/drawable-xhdpi/icon_chat_normal.png
  81. TEMPAT SAMPAH
      institution/src/main/res/drawable-xhdpi/icon_chat_select.png
  82. TEMPAT SAMPAH
      institution/src/main/res/drawable-xhdpi/icon_home_more_music.png
  83. TEMPAT SAMPAH
      institution/src/main/res/drawable-xhdpi/icon_home_normal.png
  84. TEMPAT SAMPAH
      institution/src/main/res/drawable-xhdpi/icon_home_select.png
  85. TEMPAT SAMPAH
      institution/src/main/res/drawable-xhdpi/icon_institution_img.png
  86. TEMPAT SAMPAH
      institution/src/main/res/drawable-xhdpi/icon_mine_normal.png
  87. TEMPAT SAMPAH
      institution/src/main/res/drawable-xhdpi/icon_mine_select.png
  88. TEMPAT SAMPAH
      institution/src/main/res/drawable-xhdpi/jg_icon_search.png
  89. TEMPAT SAMPAH
      institution/src/main/res/drawable-xxhdpi/bg_star.png
  90. TEMPAT SAMPAH
      institution/src/main/res/drawable-xxhdpi/icon_chat_normal.png
  91. TEMPAT SAMPAH
      institution/src/main/res/drawable-xxhdpi/icon_chat_select.png
  92. TEMPAT SAMPAH
      institution/src/main/res/drawable-xxhdpi/icon_home_more_music.png
  93. TEMPAT SAMPAH
      institution/src/main/res/drawable-xxhdpi/icon_home_normal.png
  94. TEMPAT SAMPAH
      institution/src/main/res/drawable-xxhdpi/icon_home_select.png
  95. TEMPAT SAMPAH
      institution/src/main/res/drawable-xxhdpi/icon_institution_img.png
  96. TEMPAT SAMPAH
      institution/src/main/res/drawable-xxhdpi/icon_mine_normal.png
  97. TEMPAT SAMPAH
      institution/src/main/res/drawable-xxhdpi/icon_mine_select.png
  98. TEMPAT SAMPAH
      institution/src/main/res/drawable-xxhdpi/jg_icon_search.png
  99. 5 0
      institution/src/main/res/drawable/selector_chat_home.xml
  100. 5 0
      institution/src/main/res/drawable/selector_main_home.xml

+ 7 - 0
BaseLibrary/src/main/java/com/cooleshow/base/router/RouterPath.kt

@@ -13,6 +13,13 @@ object RouterPath {
         }
     }
 
+    class JGCenter {
+        companion object {
+            const val PATH_HOME = "/institution/home"
+
+        }
+    }
+
     //splash
     class SplashCenter {
         companion object {

+ 1 - 0
institution/.gitignore

@@ -0,0 +1 @@
+/build

+ 66 - 0
institution/build.gradle

@@ -0,0 +1,66 @@
+plugins {
+    id 'com.android.library'
+    id 'org.jetbrains.kotlin.android'
+//    id 'kotlin-parcelize'
+    id 'kotlin-android'
+//    id 'kotlin-android-extensions'
+}
+apply plugin: 'kotlin-kapt'
+apply plugin: 'kotlin-android-extensions'
+kapt {
+    arguments {
+        arg("AROUTER_MODULE_NAME", project.getName())
+    }
+}
+android {
+    namespace 'com.cooleshow.institution.stu'
+    compileSdkVersion rootProject.ext.android['compileSdkVersion']
+
+    defaultConfig {
+        minSdkVersion rootProject.ext.android.minSdkVersion
+        targetSdkVersion rootProject.ext.android.targetSdkVersion
+        versionCode rootProject.ext.android.versionCode
+        versionName rootProject.ext.android.versionName
+
+        testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
+        consumerProguardFiles "consumer-rules.pro"
+    }
+
+    buildTypes {
+        release {
+            minifyEnabled false
+            proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
+        }
+    }
+    compileOptions {
+        sourceCompatibility JavaVersion.VERSION_1_8
+        targetCompatibility JavaVersion.VERSION_1_8
+    }
+
+    sourceSets {
+        main {
+            jniLibs.srcDirs = ['libs']
+        }
+    }
+
+    buildFeatures {
+        viewBinding = true
+    }
+}
+
+dependencies {
+
+    implementation 'androidx.appcompat:appcompat:1.3.0'
+    implementation 'com.google.android.material:material:1.4.0'
+    testImplementation 'junit:junit:4.13.2'
+    androidTestImplementation 'androidx.test.ext:junit:1.1.3'
+    androidTestImplementation 'androidx.test.espresso:espresso-core:3.4.0'
+    implementation project(':BaseLibrary')
+    implementation project(':usercenter')
+    implementation project(':chatModule')
+
+    //ARouter
+    annotationProcessor("com.alibaba:arouter-compiler:$rootProject.ext.android.arouter_api_version")
+    implementation 'com.alibaba:arouter-api:1.5.2'
+    kapt 'com.alibaba:arouter-compiler:1.5.2'
+}

+ 0 - 0
institution/consumer-rules.pro


+ 21 - 0
institution/proguard-rules.pro

@@ -0,0 +1,21 @@
+# Add project specific ProGuard rules here.
+# You can control the set of applied configuration files using the
+# proguardFiles setting in build.gradle.
+#
+# For more details, see
+#   http://developer.android.com/guide/developing/tools/proguard.html
+
+# If your project uses WebView with JS, uncomment the following
+# and specify the fully qualified class name to the JavaScript interface
+# class:
+#-keepclassmembers class fqcn.of.javascript.interface.for.webview {
+#   public *;
+#}
+
+# Uncomment this to preserve the line number information for
+# debugging stack traces.
+#-keepattributes SourceFile,LineNumberTable
+
+# If you keep the line number information, uncomment this to
+# hide the original source file name.
+#-renamesourcefileattribute SourceFile

+ 26 - 0
institution/src/androidTest/java/com/cooleshow/institution/stu/ExampleInstrumentedTest.java

@@ -0,0 +1,26 @@
+package com.cooleshow.institution.stu;
+
+import android.content.Context;
+
+import androidx.test.platform.app.InstrumentationRegistry;
+import androidx.test.ext.junit.runners.AndroidJUnit4;
+
+import org.junit.Test;
+import org.junit.runner.RunWith;
+
+import static org.junit.Assert.*;
+
+/**
+ * Instrumented test, which will execute on an Android device.
+ *
+ * @see <a href="http://d.android.com/tools/testing">Testing documentation</a>
+ */
+@RunWith(AndroidJUnit4.class)
+public class ExampleInstrumentedTest {
+    @Test
+    public void useAppContext() {
+        // Context of the app under test.
+        Context appContext = InstrumentationRegistry.getInstrumentation().getTargetContext();
+        assertEquals("com.cooleshow.institution.stu.test", appContext.getPackageName());
+    }
+}

+ 13 - 0
institution/src/main/AndroidManifest.xml

@@ -0,0 +1,13 @@
+<?xml version="1.0" encoding="utf-8"?>
+<manifest xmlns:android="http://schemas.android.com/apk/res/android">
+    <application>
+        <activity
+            android:name=".ui.main.MainActivity"
+            android:configChanges="orientation|screenSize|keyboardHidden"
+            android:exported="false"
+            android:launchMode="singleTask"
+            android:screenOrientation="portrait"
+            android:windowSoftInputMode="adjustPan">
+        </activity>
+    </application>
+</manifest>

File diff ditekan karena terlalu besar
+ 0 - 0
institution/src/main/assets/lottieHome/all_practice.json


File diff ditekan karena terlalu besar
+ 0 - 0
institution/src/main/assets/lottieHome/empty_anim.json


File diff ditekan karena terlalu besar
+ 0 - 0
institution/src/main/assets/lottieHome/subject_practice.json


TEMPAT SAMPAH
institution/src/main/assets/lottieHome/trackList/images/Fill_113_E7887359-BBD6-4780-87D0-6E398FA7BE3C.png


TEMPAT SAMPAH
institution/src/main/assets/lottieHome/trackList/images/_-____5D9BF709-99E9-43FB-927C-45F86639B67F.png


TEMPAT SAMPAH
institution/src/main/assets/lottieHome/trackList/images/__1_A71246DA-69B7-4C01-9F39-583F5725A10D.png


TEMPAT SAMPAH
institution/src/main/assets/lottieHome/trackList/images/__1_DE370604-09F0-4F30-B999-B184D6318B15.png


TEMPAT SAMPAH
institution/src/main/assets/lottieHome/trackList/images/__2_57549191-2B1A-4354-93B1-8DD308D14979.png


TEMPAT SAMPAH
institution/src/main/assets/lottieHome/trackList/images/__2_CC3FDC63-BFF5-4DF6-8FAE-1EE8B743E55A.png


TEMPAT SAMPAH
institution/src/main/assets/lottieHome/trackList/images/__2_D9FF9D73-AF36-4E8A-AF10-76335A833525.png


TEMPAT SAMPAH
institution/src/main/assets/lottieHome/trackList/images/__3_1886F784-6B15-4CF5-9300-0806A405A968.png


TEMPAT SAMPAH
institution/src/main/assets/lottieHome/trackList/images/__3_5007EE18-2E2D-4BFD-810D-A08248D04040.png


TEMPAT SAMPAH
institution/src/main/assets/lottieHome/trackList/images/__3__F89072F7-29E9-466F-A3D4-6E219994CFA0.png


TEMPAT SAMPAH
institution/src/main/assets/lottieHome/trackList/images/__4_03682930-24C0-46A5-926E-3C4708349B30.png


TEMPAT SAMPAH
institution/src/main/assets/lottieHome/trackList/images/__4_46C271D1-0426-44A9-8A10-FD365AEDCFA3.png


TEMPAT SAMPAH
institution/src/main/assets/lottieHome/trackList/images/__4__7BE24997-CF2E-41AF-94FB-1C07E70D1A48.png


TEMPAT SAMPAH
institution/src/main/assets/lottieHome/trackList/images/__5_F861A235-ECF5-4423-90F1-F0A55A8EE337.png


TEMPAT SAMPAH
institution/src/main/assets/lottieHome/trackList/images/__5__078F99A2-3ED1-47E4-A04C-4BF404CFF7B6.png


TEMPAT SAMPAH
institution/src/main/assets/lottieHome/trackList/images/__6__CDBE3A48-FB3A-4480-A8D1-1F8EA3B0B24A.png


TEMPAT SAMPAH
institution/src/main/assets/lottieHome/trackList/images/__E02253BD-EFE6-463E-9A33-DFF59B771FA4.png


TEMPAT SAMPAH
institution/src/main/assets/lottieHome/trackList/images/___0601C47D-67D5-470E-9204-C78F8BEF5BA7.png


TEMPAT SAMPAH
institution/src/main/assets/lottieHome/trackList/images/___1_260EC3EA-BD00-4530-A92D-36FA59C33F9A.png


TEMPAT SAMPAH
institution/src/main/assets/lottieHome/trackList/images/___1_8B8DF4F2-B206-4D31-A635-03B0C6A5D660.png


TEMPAT SAMPAH
institution/src/main/assets/lottieHome/trackList/images/___1_BBE11284-CBEF-44AA-BEA9-E343B2A9D988.png


TEMPAT SAMPAH
institution/src/main/assets/lottieHome/trackList/images/___2_84A46D49-908E-4C9F-9DDC-E4463F22918E.png


TEMPAT SAMPAH
institution/src/main/assets/lottieHome/trackList/images/___2_A2C93B95-8E0C-4FC9-9CD7-FF784E633F17.png


TEMPAT SAMPAH
institution/src/main/assets/lottieHome/trackList/images/___3_3CC8A30C-795F-434F-8C66-C805E273C3C0.png


TEMPAT SAMPAH
institution/src/main/assets/lottieHome/trackList/images/___3_FFF8EAB8-9898-4018-A4E6-2F4F5C56FBC3.png


TEMPAT SAMPAH
institution/src/main/assets/lottieHome/trackList/images/___5AF3275B-DA19-459C-BBFC-4AB474A71117.png


TEMPAT SAMPAH
institution/src/main/assets/lottieHome/trackList/images/___6151A0BB-3ECB-4E66-8950-4C1391588787.png


TEMPAT SAMPAH
institution/src/main/assets/lottieHome/trackList/images/___752C6F58-8959-4CAB-8B0A-97E1BEC8257B.png


TEMPAT SAMPAH
institution/src/main/assets/lottieHome/trackList/images/___953D5213-3178-40EE-AE38-E5CEEA1E7263.png


TEMPAT SAMPAH
institution/src/main/assets/lottieHome/trackList/images/___B63494E7-6C64-4682-B6DE-309A74A37C2E.png


TEMPAT SAMPAH
institution/src/main/assets/lottieHome/trackList/images/___CFB7FF7D-E210-4157-9F44-979D790F5CC6.png


TEMPAT SAMPAH
institution/src/main/assets/lottieHome/trackList/images/___D15904F7-769E-448D-B5EA-203F0DBE96EF.png


TEMPAT SAMPAH
institution/src/main/assets/lottieHome/trackList/images/___DE35998C-B3DA-4E9F-818E-957D947CBD7B.png


TEMPAT SAMPAH
institution/src/main/assets/lottieHome/trackList/images/___E09F6959-00DA-4186-8344-8C4B490F448C.png


TEMPAT SAMPAH
institution/src/main/assets/lottieHome/trackList/images/___EF321636-BA8D-4CA0-BDC5-E11A3811A781.png


TEMPAT SAMPAH
institution/src/main/assets/lottieHome/trackList/images/____129E03E4-F79E-449C-A279-5976A836EBB6.png


TEMPAT SAMPAH
institution/src/main/assets/lottieHome/trackList/images/____172F4977-96B3-4845-B683-4C4C3C44C04F.png


TEMPAT SAMPAH
institution/src/main/assets/lottieHome/trackList/images/____326299A3-C78D-43F8-B343-2D87C3624B30.png


TEMPAT SAMPAH
institution/src/main/assets/lottieHome/trackList/images/____38403A58-B077-455B-B0F1-12FAF0DCE7FB.png


TEMPAT SAMPAH
institution/src/main/assets/lottieHome/trackList/images/____4218AFE4-C566-47FF-BEF3-9810478B0946.png


TEMPAT SAMPAH
institution/src/main/assets/lottieHome/trackList/images/____52BC1CD3-B427-4FBC-853C-B95B113F5942.png


TEMPAT SAMPAH
institution/src/main/assets/lottieHome/trackList/images/____5C825C23-1A6A-4D5C-9EDA-ADD682AC4078.png


TEMPAT SAMPAH
institution/src/main/assets/lottieHome/trackList/images/____6023D019-A592-4FCB-A3EB-64B21054D8CA.png


TEMPAT SAMPAH
institution/src/main/assets/lottieHome/trackList/images/____6F8AA26E-2717-48E7-97F5-418C05FF10F1.png


TEMPAT SAMPAH
institution/src/main/assets/lottieHome/trackList/images/____872F535D-23C4-45CD-8F4B-5C740330C4EE.png


TEMPAT SAMPAH
institution/src/main/assets/lottieHome/trackList/images/____C42F09FC-8B0B-4F0B-817D-C53771EE9622.png


TEMPAT SAMPAH
institution/src/main/assets/lottieHome/trackList/images/____D566C5E7-AE58-4523-9C25-DF922016B960.png


TEMPAT SAMPAH
institution/src/main/assets/lottieHome/trackList/images/_____.png


TEMPAT SAMPAH
institution/src/main/assets/lottieHome/trackList/images/______10F39BE5EF-58B7-4EE8-9E5E-82F46D7904D8.jpg


TEMPAT SAMPAH
institution/src/main/assets/lottieHome/trackList/images/______124801FD4-DBB6-4245-96C5-A5AA38B5BD9D.png


TEMPAT SAMPAH
institution/src/main/assets/lottieHome/trackList/images/______2B05C9197-DBAB-4FA8-9560-8B9A5721ED65.png


TEMPAT SAMPAH
institution/src/main/assets/lottieHome/trackList/images/______3FE690DDB-7817-44F4-900B-EEB94EB68153.png


TEMPAT SAMPAH
institution/src/main/assets/lottieHome/trackList/images/______44D0BF8B3-7740-4946-9753-59A717794A17.png


TEMPAT SAMPAH
institution/src/main/assets/lottieHome/trackList/images/______6BE6F0CC6-E4B9-4D57-A172-DC0E2BB7B139.png


TEMPAT SAMPAH
institution/src/main/assets/lottieHome/trackList/images/______7C7E6FFB5-5C36-4843-9B39-8DBC9ACFBA24.png


TEMPAT SAMPAH
institution/src/main/assets/lottieHome/trackList/images/______93C90C56D-548C-4343-815F-9F07E5D416CF.png


File diff ditekan karena terlalu besar
+ 0 - 0
institution/src/main/assets/lottieHome/track_list.json


+ 59 - 0
institution/src/main/java/com/cooleshow/institution/stu/adapter/HomeCardPageAdapter.java

@@ -0,0 +1,59 @@
+package com.cooleshow.institution.stu.adapter;
+
+import java.util.ArrayList;
+
+import androidx.annotation.NonNull;
+import androidx.fragment.app.Fragment;
+import androidx.fragment.app.FragmentActivity;
+import androidx.viewpager2.adapter.FragmentStateAdapter;
+
+/**
+ * Author by pq, Date on 2022/4/20.
+ */
+public class HomeCardPageAdapter extends FragmentStateAdapter {
+    private ArrayList<Fragment> mFragments;
+
+    public HomeCardPageAdapter(@NonNull Fragment fragment) {
+        super(fragment);
+    }
+
+    public void setFragments(ArrayList<Fragment> fragments) {
+        this.mFragments = fragments;
+    }
+
+    public Fragment getItem(int position) {
+        if (mFragments != null) {
+            if (position < mFragments.size()) {
+                return mFragments.get(position);
+            }
+        }
+        return null;
+    }
+
+    public ArrayList<Fragment> getFragments() {
+        return mFragments;
+    }
+
+    @NonNull
+    @Override
+    public Fragment createFragment(int position) {
+        Fragment fragment = mFragments.get(position);
+        return fragment;
+    }
+
+    @Override
+    public long getItemId(int position) {
+        Fragment fragment = mFragments.get(position);
+        return fragment != null ? fragment.hashCode() : super.getItemId(position);
+    }
+
+    @Override
+    public boolean containsItem(long itemId) {
+        return super.containsItem(itemId);
+    }
+
+    @Override
+    public int getItemCount() {
+        return mFragments != null ? mFragments.size() : 0;
+    }
+}

+ 50 - 0
institution/src/main/java/com/cooleshow/institution/stu/adapter/HomePageAdapter.java

@@ -0,0 +1,50 @@
+package com.cooleshow.institution.stu.adapter;
+
+import java.util.ArrayList;
+
+import androidx.annotation.NonNull;
+import androidx.fragment.app.Fragment;
+import androidx.fragment.app.FragmentActivity;
+import androidx.viewpager2.adapter.FragmentStateAdapter;
+
+/**
+ * Author by pq, Date on 2022/4/20.
+ */
+public class HomePageAdapter extends FragmentStateAdapter {
+    private ArrayList<Fragment> mFragments;
+
+    public void setFragments(ArrayList<Fragment> fragments) {
+        this.mFragments = fragments;
+    }
+
+    public HomePageAdapter(@NonNull FragmentActivity fragmentActivity) {
+        super(fragmentActivity);
+    }
+
+    public HomePageAdapter(@NonNull Fragment fragment) {
+        super(fragment);
+    }
+
+    @NonNull
+    @Override
+    public Fragment createFragment(int position) {
+        Fragment fragment = mFragments.get(position);
+        return fragment;
+    }
+
+    @Override
+    public long getItemId(int position) {
+        Fragment fragment = mFragments.get(position);
+        return fragment != null ? fragment.hashCode() : super.getItemId(position);
+    }
+
+    @Override
+    public boolean containsItem(long itemId) {
+        return super.containsItem(itemId);
+    }
+
+    @Override
+    public int getItemCount() {
+        return mFragments != null ? mFragments.size() : 0;
+    }
+}

+ 20 - 0
institution/src/main/java/com/cooleshow/institution/stu/constants/HomePageType.java

@@ -0,0 +1,20 @@
+package com.cooleshow.institution.stu.constants;
+
+/**
+ * Author by pq, Date on 2023/9/11.
+ */
+public enum HomePageType {
+    EMPTY(0),//暂无声部训练
+    SUBJECT_PRACTICE(1),//声部练习
+    ALL_PRACTICE(2),//合奏练习
+    TRACK_LIST(3);//独奏曲目
+    private int value;
+
+    public int getValue() {
+        return value;
+    }
+
+    HomePageType(int value) {
+        this.value = value;
+    }
+}

+ 12 - 0
institution/src/main/java/com/cooleshow/institution/stu/contract/HomeContract.java

@@ -0,0 +1,12 @@
+package com.cooleshow.institution.stu.contract;
+
+import com.cooleshow.base.presenter.view.BaseView;
+
+/**
+ * Author by pq, Date on 2023/9/11.
+ */
+public interface HomeContract {
+    public interface HomeContractView extends BaseView{
+
+    }
+}

+ 10 - 0
institution/src/main/java/com/cooleshow/institution/stu/presenter/HomePresenter.java

@@ -0,0 +1,10 @@
+package com.cooleshow.institution.stu.presenter;
+
+import com.cooleshow.base.presenter.BasePresenter;
+import com.cooleshow.institution.stu.contract.HomeContract;
+
+/**
+ * Author by pq, Date on 2023/9/11.
+ */
+public class HomePresenter extends BasePresenter<HomeContract.HomeContractView> {
+}

+ 72 - 0
institution/src/main/java/com/cooleshow/institution/stu/ui/main/CardAnimFragment.java

@@ -0,0 +1,72 @@
+package com.cooleshow.institution.stu.ui.main;
+
+import android.os.Bundle;
+import android.view.View;
+
+import com.cooleshow.base.ui.fragment.BaseFragment;
+import com.cooleshow.base.utils.LOG;
+import com.cooleshow.institution.stu.constants.HomePageType;
+import com.cooleshow.institution.stu.databinding.FgCardAnimLayoutBinding;
+
+/**
+ * Author by pq, Date on 2023/9/11.
+ */
+public class CardAnimFragment extends BaseFragment<FgCardAnimLayoutBinding> {
+    private int pageType = HomePageType.EMPTY.getValue();
+
+    public static CardAnimFragment newInstance(int type) {
+        Bundle bundle = new Bundle();
+        bundle.putInt("type", type);
+        CardAnimFragment cardAnimFragment = new CardAnimFragment();
+        cardAnimFragment.setArguments(bundle);
+        return cardAnimFragment;
+    }
+
+    @Override
+    protected FgCardAnimLayoutBinding getLayoutView() {
+        return FgCardAnimLayoutBinding.inflate(getLayoutInflater());
+    }
+
+    @Override
+    protected void initView(View rootView) {
+        if (getArguments() != null) {
+            pageType = getArguments().getInt("type", HomePageType.EMPTY.getValue());
+        }
+        loadAnim();
+    }
+
+    private void loadAnim() {
+        String assetName = "lottieHome/empty_anim.json";
+        if (pageType == HomePageType.SUBJECT_PRACTICE.getValue()) {
+            assetName = "lottieHome/subject_practice.json";
+        }
+        if (pageType == HomePageType.ALL_PRACTICE.getValue()) {
+            assetName = "lottieHome/all_practice.json";
+        }
+        if (pageType == HomePageType.TRACK_LIST.getValue()) {
+            assetName = "lottieHome/track_list.json";
+            mViewBinding.viewLiveAnim.setImageAssetsFolder("lottieHome/trackList/images/");
+        }
+        mViewBinding.viewLiveAnim.setAnimation(assetName);
+    }
+
+    public void startAnim(boolean isStart) {
+        if(isStart){
+            mViewBinding.viewLiveAnim.setProgress(0);
+            mViewBinding.viewLiveAnim.playAnimation();
+        }else{
+            if( mViewBinding.viewLiveAnim.isAnimating()){
+                mViewBinding.viewLiveAnim.pauseAnimation();
+            }
+        }
+    }
+
+    public int getPageType() {
+        return pageType;
+    }
+
+    @Override
+    protected void initData() {
+
+    }
+}

+ 95 - 0
institution/src/main/java/com/cooleshow/institution/stu/ui/main/HomeCardFragment.java

@@ -0,0 +1,95 @@
+package com.cooleshow.institution.stu.ui.main;
+
+import android.view.View;
+
+import com.cooleshow.base.ui.fragment.BaseFragment;
+import com.cooleshow.base.ui.fragment.BaseMVPFragment;
+import com.cooleshow.base.utils.LOG;
+import com.cooleshow.base.utils.SizeUtils;
+import com.cooleshow.base.utils.Utils;
+import com.cooleshow.institution.stu.adapter.HomeCardPageAdapter;
+import com.cooleshow.institution.stu.constants.HomePageType;
+import com.cooleshow.institution.stu.databinding.FgHomeCardLayoutBinding;
+import com.cooleshow.institution.stu.presenter.HomePresenter;
+import com.cooleshow.institution.stu.widget.ScaleTransformer;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import androidx.fragment.app.Fragment;
+import androidx.viewpager2.widget.CompositePageTransformer;
+import androidx.viewpager2.widget.MarginPageTransformer;
+import androidx.viewpager2.widget.ViewPager2;
+
+/**
+ * Author by pq, Date on 2023/9/11.
+ */
+public class HomeCardFragment extends BaseMVPFragment<FgHomeCardLayoutBinding, HomePresenter> {
+
+    private HomePageType[] pages = new HomePageType[]{HomePageType.TRACK_LIST, HomePageType.ALL_PRACTICE, HomePageType.SUBJECT_PRACTICE};
+
+    private HomeCardPageAdapter mCardPageAdapter;
+
+    @Override
+    protected void initView(View rootView) {
+        Utils.setHeadView(mViewBinding.viewStatusBar, requireContext(), 0);
+        CompositePageTransformer compositePageTransformer = new CompositePageTransformer();
+        compositePageTransformer.addTransformer(new ScaleTransformer());
+//        compositePageTransformer.addTransformer(new MarginPageTransformer(SizeUtils.dp2px(0)));
+        mViewBinding.viewPager.setPageTransformer(compositePageTransformer);
+        mCardPageAdapter = new HomeCardPageAdapter(this);
+    }
+
+    @Override
+    protected void initData() {
+        initListener();
+        ArrayList<Fragment> list = new ArrayList<>();
+        for (int i = 0; i < pages.length; i++) {
+            HomePageType page = pages[i];
+            CardAnimFragment cardAnimFragment = CardAnimFragment.newInstance(page.getValue());
+            list.add(cardAnimFragment);
+        }
+        mCardPageAdapter.setFragments(list);
+        mViewBinding.viewPager.setAdapter(mCardPageAdapter);
+        mViewBinding.viewPager.setOffscreenPageLimit(3);
+        mViewBinding.viewPager.setCurrentItem(0, false);
+    }
+
+    private void initListener() {
+        mViewBinding.viewPager.registerOnPageChangeCallback(mPageChangeCallback);
+    }
+
+    private ViewPager2.OnPageChangeCallback mPageChangeCallback = new ViewPager2.OnPageChangeCallback() {
+        @Override
+        public void onPageSelected(int position) {
+            super.onPageSelected(position);
+            LOG.i("onPageSelected:"+position);
+            ArrayList<Fragment> fragments = mCardPageAdapter.getFragments();
+            if (fragments != null) {
+                for (int i = 0; i < fragments.size(); i++) {
+                    Fragment fragment = fragments.get(i);
+                    if (fragment instanceof CardAnimFragment) {
+                        CardAnimFragment cardAnimFragment = (CardAnimFragment) fragment;
+                        cardAnimFragment.startAnim(i == position);
+                    }
+                }
+            }
+        }
+    };
+
+    @Override
+    protected FgHomeCardLayoutBinding getLayoutView() {
+        return FgHomeCardLayoutBinding.inflate(getLayoutInflater());
+    }
+
+    @Override
+    protected HomePresenter createPresenter() {
+        return new HomePresenter();
+    }
+
+    @Override
+    public void onDestroy() {
+        mViewBinding.viewPager.unregisterOnPageChangeCallback(mPageChangeCallback);
+        super.onDestroy();
+    }
+}

+ 42 - 0
institution/src/main/java/com/cooleshow/institution/stu/ui/main/HomeFragment.java

@@ -0,0 +1,42 @@
+package com.cooleshow.institution.stu.ui.main;
+
+import android.view.View;
+
+import com.cooleshow.base.ui.fragment.BaseFragment;
+import com.cooleshow.base.ui.fragment.BaseMVPFragment;
+import com.cooleshow.chatmodule.ui.ChatFragment;
+import com.cooleshow.institution.stu.adapter.HomePageAdapter;
+import com.cooleshow.institution.stu.databinding.FgHomeLayoutBinding;
+import com.cooleshow.institution.stu.presenter.HomePresenter;
+
+import java.util.ArrayList;
+
+import androidx.fragment.app.Fragment;
+
+/**
+ * Author by pq, Date on 2023/9/11.
+ */
+public class HomeFragment extends BaseFragment<FgHomeLayoutBinding> {
+    @Override
+    protected void initView(View rootView) {
+
+    }
+
+    @Override
+    protected void initData() {
+        ArrayList<Fragment> fragments=new ArrayList<>();
+        HomeCardFragment homeCardFragment =new HomeCardFragment();
+        fragments.add(homeCardFragment);
+        HomePageAdapter homePageAdapter = new HomePageAdapter(this);
+        homePageAdapter.setFragments(fragments);
+        mViewBinding.viewPager.setAdapter(homePageAdapter);
+        mViewBinding.viewPager.setOffscreenPageLimit(fragments.size());
+        mViewBinding.viewPager.setSaveEnabled(false);
+    }
+
+    @Override
+    protected FgHomeLayoutBinding getLayoutView() {
+        return FgHomeLayoutBinding.inflate(getLayoutInflater());
+    }
+
+}

+ 83 - 0
institution/src/main/java/com/cooleshow/institution/stu/ui/main/MainActivity.java

@@ -0,0 +1,83 @@
+package com.cooleshow.institution.stu.ui.main;
+
+import android.view.View;
+import android.widget.TextView;
+
+import com.alibaba.android.arouter.facade.annotation.Route;
+import com.cooleshow.base.router.RouterPath;
+import com.cooleshow.base.ui.activity.BaseActivity;
+import com.cooleshow.chatmodule.ui.ChatFragment;
+import com.cooleshow.institution.stu.R;
+import com.cooleshow.institution.stu.adapter.HomePageAdapter;
+import com.cooleshow.institution.stu.databinding.ActivityInstitutionMainLayoutBinding;
+
+import java.util.ArrayList;
+
+import androidx.fragment.app.Fragment;
+
+/**
+ * Author by pq, Date on 2023/9/11.
+ */
+@Route(path = RouterPath.JGCenter.PATH_HOME)
+public class MainActivity extends BaseActivity<ActivityInstitutionMainLayoutBinding> {
+    ArrayList<Fragment> mFragments = new ArrayList<>();
+    private ChatFragment mChatFragment;
+    private HomeFragment mHomeFragment;
+
+    @Override
+    protected void initView() {
+        HomePageAdapter homePageAdapter = new HomePageAdapter(this);
+        mHomeFragment = new HomeFragment();
+        mChatFragment = new ChatFragment();
+//        mMineFragment = new MineFragment();
+        mFragments.add(mHomeFragment);
+        mFragments.add(mChatFragment);
+//        mFragments.add(mMineFragment);
+        homePageAdapter.setFragments(mFragments);
+        viewBinding.viewPager.setAdapter(homePageAdapter);
+        viewBinding.viewPager.setOffscreenPageLimit(mFragments.size());
+        viewBinding.viewPager.setUserInputEnabled(false);
+        viewBinding.viewPager.setSaveEnabled(false);
+        onTabClick(viewBinding.viewHome);
+    }
+
+
+    public void onTabClick(View view) {
+        int id = view.getId();
+        if (id == R.id.view_home) {
+            viewBinding.viewPager.setCurrentItem(0, false);
+            setTabTextStyle(viewBinding.tvHome);
+            updateBottomTabStyle(true);
+            return;
+        }
+        if (id == R.id.view_chat) {
+            viewBinding.viewPager.setCurrentItem(1, false);
+            setTabTextStyle(viewBinding.tvChat);
+            updateBottomTabStyle(false);
+            return;
+        }
+
+        if (id == R.id.view_mine) {
+            viewBinding.viewPager.setCurrentItem(2, false);
+            setTabTextStyle(viewBinding.tvMine);
+            updateBottomTabStyle(false);
+            return;
+        }
+    }
+
+    private void setTabTextStyle(TextView textview) {
+        int id = textview.getId();
+        viewBinding.tvHome.setSelected(id == viewBinding.tvHome.getId());
+        viewBinding.tvChat.setSelected(id == viewBinding.tvChat.getId());
+        viewBinding.tvMine.setSelected(id == viewBinding.tvMine.getId());
+    }
+
+    public void updateBottomTabStyle(boolean isBlack) {
+        viewBinding.csBottom.setBackgroundColor(getResources().getColor(isBlack ? R.color.color_121b2e : com.cooleshow.base.R.color.white));
+    }
+
+    @Override
+    protected ActivityInstitutionMainLayoutBinding getLayoutView() {
+        return ActivityInstitutionMainLayoutBinding.inflate(getLayoutInflater());
+    }
+}

+ 123 - 0
institution/src/main/java/com/cooleshow/institution/stu/widget/NestedScrollableHost.java

@@ -0,0 +1,123 @@
+package com.cooleshow.institution.stu.widget;
+
+import android.annotation.SuppressLint;
+import android.content.Context;
+import android.util.AttributeSet;
+import android.view.MotionEvent;
+import android.view.View;
+import android.view.ViewConfiguration;
+import android.view.ViewParent;
+import android.widget.FrameLayout;
+
+import androidx.annotation.NonNull;
+import androidx.annotation.Nullable;
+import androidx.viewpager2.widget.ViewPager2;
+
+/**
+ * Author by pq, Date on 2023/9/11.
+ */
+public class NestedScrollableHost extends FrameLayout {
+    private boolean isChildHasSameDirection = true;
+    private int touchSlop = 0;
+    private float initialX = 0f;
+    private float initialY = 0f;
+
+    public NestedScrollableHost(@NonNull Context context) {
+        super(context, null);
+    }
+
+    public NestedScrollableHost(@NonNull Context context, @Nullable AttributeSet attrs) {
+        this(context, attrs, 0);
+    }
+
+    @SuppressLint("NewApi")
+    public NestedScrollableHost(@NonNull Context context, @Nullable AttributeSet attrs, int defStyleAttr) {
+        super(context, attrs, defStyleAttr);
+        touchSlop = ViewConfiguration.get(getContext()).getScaledTouchSlop();
+
+    }
+
+    public final ViewPager2 getParentViewPager() {
+        ViewParent parent = getParent();
+        if (!(parent instanceof View)) {
+            parent = null;
+        }
+
+        View v;
+        for (v = (View) parent; v != null && !(v instanceof ViewPager2); v = (View) parent) {
+            parent = v.getParent();
+            if (!(parent instanceof View)) {
+                parent = null;
+            }
+        }
+
+        View viewPager = v;
+        if (!(v instanceof ViewPager2)) {
+            viewPager = null;
+        }
+        return (ViewPager2) viewPager;
+
+    }
+
+    public View getChildView() {
+        return this.getChildCount() > 0 ? this.getChildAt(0) : null;
+    }
+
+    @SuppressLint("NewApi")
+    private boolean canChildScroll(int orientation, Float delta) {
+        View child = getChildView();
+        if (child != null) {
+            int direction = -(int) Math.signum(delta);
+            switch (orientation) {
+                case 0:
+                    return child.canScrollHorizontally(direction);
+                case 1:
+                    return child.canScrollVertically(direction);
+            }
+        }
+        return false;
+
+    }
+
+    @Override
+    public boolean onInterceptTouchEvent(MotionEvent ev) {
+        handleInterceptTouchEvent(ev);
+        return super.onInterceptTouchEvent(ev);
+    }
+
+
+    private void handleInterceptTouchEvent(MotionEvent e) {
+        ViewPager2 parentViewPager = getParentViewPager();
+        if (parentViewPager != null) {
+            int orientation = parentViewPager.getOrientation();
+            int childOrientation = isChildHasSameDirection ? orientation : orientation == 0 ? 1 : 0;
+            if (canChildScroll(childOrientation, -1.0f) || canChildScroll(childOrientation, 1.0f)) {
+                if (e.getAction() == MotionEvent.ACTION_DOWN) {
+                    initialX = e.getX();
+                    initialY = e.getY();
+                    getParent().requestDisallowInterceptTouchEvent(true);
+                } else if (e.getAction() == MotionEvent.ACTION_MOVE) {
+                    float dx = e.getX() - initialX;
+                    float dy = e.getY() - initialY;
+                    boolean isVpHorizontal = orientation == ViewPager2.ORIENTATION_HORIZONTAL;
+
+                    // assuming ViewPager2 touch-slop is 2x touch-slop of child
+                    float scaledDx = Math.abs(dx) * (isVpHorizontal ? 0.5f : 1f);
+                    float scaledDy = Math.abs(dy) * (isVpHorizontal ? 1f : 0.5f);
+
+                    if (scaledDx > touchSlop || scaledDy > touchSlop) {
+                        if (isVpHorizontal == scaledDy > scaledDx) {
+                            getParent().requestDisallowInterceptTouchEvent(false);
+                        } else if (canChildScroll(orientation, isVpHorizontal ? dx : dy)) {
+                            getParent().requestDisallowInterceptTouchEvent(true);
+                        } else {
+                            getParent().requestDisallowInterceptTouchEvent(false);
+                        }
+
+                    }
+                }
+
+            }
+        }
+    }
+}

+ 43 - 0
institution/src/main/java/com/cooleshow/institution/stu/widget/ScaleTransformer.java

@@ -0,0 +1,43 @@
+package com.cooleshow.institution.stu.widget;
+
+import android.view.View;
+
+import com.cooleshow.base.utils.LOG;
+
+import androidx.viewpager.widget.ViewPager;
+import androidx.viewpager2.widget.ViewPager2;
+
+/**
+ * Author by pq, Date on 2023/9/11.
+ */
+public class ScaleTransformer implements ViewPager2.PageTransformer {
+    private static final float MIN_SCALE = 0.87f;
+    private static final float MIN_ALPHA = 0.5f;
+    @Override
+    public void transformPage(View page, float position) {
+//        LOG.i("transformPage:"+position);
+        if (position < -1 || position > 1) {
+            page.setAlpha(MIN_ALPHA);
+            page.setScaleX(MIN_SCALE);
+            page.setScaleY(MIN_SCALE);
+        } else if (position <= 1) { // [-1,1]
+            float scaleFactor = Math.max(MIN_SCALE, 1 - Math.abs(position));
+            if (position < 0) {
+                float scaleX = 1 + 0.3f * position;
+                scaleX =Math.max(scaleX,MIN_SCALE);
+//                LOG.i("scaleX:"+scaleX);
+                page.setScaleX(scaleX);
+                page.setScaleY(scaleX);
+            } else {
+                float scaleX = 1 - 0.3f * position;
+                scaleX =Math.max(scaleX,MIN_SCALE);
+//                LOG.i("scaleX:"+scaleX);
+                page.setScaleX(scaleX);
+                page.setScaleY(scaleX);
+            }
+            float alpha =MIN_ALPHA + (scaleFactor - MIN_SCALE) / (1 - MIN_SCALE) * (1 - MIN_ALPHA);
+//            LOG.i("setAlpha:"+alpha);
+            page.setAlpha(alpha);
+        }
+    }
+}

+ 5 - 0
institution/src/main/res/color/selector_aaaaaa_to_ff497b.xml

@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="utf-8"?>
+<selector xmlns:android="http://schemas.android.com/apk/res/android">
+    <item android:color="@color/color_ff497b" android:state_selected="true" />
+    <item android:color="@color/color_aaaaaa" />
+</selector>

TEMPAT SAMPAH
institution/src/main/res/drawable-xhdpi/icon_chat_normal.png


TEMPAT SAMPAH
institution/src/main/res/drawable-xhdpi/icon_chat_select.png


TEMPAT SAMPAH
institution/src/main/res/drawable-xhdpi/icon_home_more_music.png


TEMPAT SAMPAH
institution/src/main/res/drawable-xhdpi/icon_home_normal.png


TEMPAT SAMPAH
institution/src/main/res/drawable-xhdpi/icon_home_select.png


TEMPAT SAMPAH
institution/src/main/res/drawable-xhdpi/icon_institution_img.png


TEMPAT SAMPAH
institution/src/main/res/drawable-xhdpi/icon_mine_normal.png


TEMPAT SAMPAH
institution/src/main/res/drawable-xhdpi/icon_mine_select.png


TEMPAT SAMPAH
institution/src/main/res/drawable-xhdpi/jg_icon_search.png


TEMPAT SAMPAH
institution/src/main/res/drawable-xxhdpi/bg_star.png


TEMPAT SAMPAH
institution/src/main/res/drawable-xxhdpi/icon_chat_normal.png


TEMPAT SAMPAH
institution/src/main/res/drawable-xxhdpi/icon_chat_select.png


TEMPAT SAMPAH
institution/src/main/res/drawable-xxhdpi/icon_home_more_music.png


TEMPAT SAMPAH
institution/src/main/res/drawable-xxhdpi/icon_home_normal.png


TEMPAT SAMPAH
institution/src/main/res/drawable-xxhdpi/icon_home_select.png


TEMPAT SAMPAH
institution/src/main/res/drawable-xxhdpi/icon_institution_img.png


TEMPAT SAMPAH
institution/src/main/res/drawable-xxhdpi/icon_mine_normal.png


TEMPAT SAMPAH
institution/src/main/res/drawable-xxhdpi/icon_mine_select.png


TEMPAT SAMPAH
institution/src/main/res/drawable-xxhdpi/jg_icon_search.png


+ 5 - 0
institution/src/main/res/drawable/selector_chat_home.xml

@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="utf-8"?>
+<selector xmlns:android="http://schemas.android.com/apk/res/android">
+    <item android:drawable="@drawable/icon_chat_select" android:state_selected="true"/>
+    <item android:drawable="@drawable/icon_chat_normal" />
+</selector>

+ 5 - 0
institution/src/main/res/drawable/selector_main_home.xml

@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="utf-8"?>
+<selector xmlns:android="http://schemas.android.com/apk/res/android">
+    <item android:drawable="@drawable/icon_home_select" android:state_selected="true"/>
+    <item android:drawable="@drawable/icon_home_normal" />
+</selector>

Beberapa file tidak ditampilkan karena terlalu banyak file yang berubah dalam diff ini