Ver código fonte

1.增加模板
2.增加排行榜

FailedToRead 2 anos atrás
pai
commit
9ee6179e77
49 arquivos alterados com 2290 adições e 358 exclusões
  1. 0 17
      .idea/deploymentTargetDropDown.xml
  2. 12 5
      .idea/misc.xml
  3. 5 2
      app/build.gradle
  4. 26 19
      app/src/exception/layout/adapter_item_cusview_model_view_d.xml
  5. 37 13
      app/src/fragmentRecommend/layout/adapter_item_cusview_model_view_f.xml
  6. 1 0
      app/src/main/java/com/edufound/reader/activity/MainActivity.java
  7. 276 15
      app/src/main/java/com/edufound/reader/adapter/FragmentEventAdapter.java
  8. 116 0
      app/src/main/java/com/edufound/reader/adapter/RankListItemAdapter.java
  9. 13 0
      app/src/main/java/com/edufound/reader/apiserver/ActivityEventServerImpl.java
  10. 15 0
      app/src/main/java/com/edufound/reader/apiserver/UserApiServerImpl.java
  11. 256 0
      app/src/main/java/com/edufound/reader/bean/ExampleBean.java
  12. 42 0
      app/src/main/java/com/edufound/reader/bean/ExcellentBean.java
  13. 235 0
      app/src/main/java/com/edufound/reader/bean/ModelBean.java
  14. 25 0
      app/src/main/java/com/edufound/reader/bean/RankListBean.java
  15. 1 0
      app/src/main/java/com/edufound/reader/contract/EventFragmentContract.java
  16. 1 0
      app/src/main/java/com/edufound/reader/contract/MainContract.java
  17. 7 2
      app/src/main/java/com/edufound/reader/cusview/ModelViewA.java
  18. 10 12
      app/src/main/java/com/edufound/reader/cusview/ModelViewB.java
  19. 84 41
      app/src/main/java/com/edufound/reader/cusview/ModelViewC.java
  20. 33 17
      app/src/main/java/com/edufound/reader/cusview/ModelViewD.java
  21. 91 51
      app/src/main/java/com/edufound/reader/cusview/ModelViewE.java
  22. 44 14
      app/src/main/java/com/edufound/reader/cusview/ModelViewF.java
  23. 97 0
      app/src/main/java/com/edufound/reader/cusview/ModelViewG.java
  24. 7 2
      app/src/main/java/com/edufound/reader/cusview/ModelViewWidthA.java
  25. 4 2
      app/src/main/java/com/edufound/reader/fragment/RecommendFragment.java
  26. 1 0
      app/src/main/java/com/edufound/reader/jsinterfaces/WebActivityJsInterfaces.java
  27. 101 11
      app/src/main/java/com/edufound/reader/popwindow/PopWindowUtil.java
  28. 23 7
      app/src/main/java/com/edufound/reader/presenter/EventFragmentPresenter.java
  29. 131 113
      app/src/main/java/com/edufound/reader/presenter/MainPresenter.java
  30. 0 1
      app/src/main/java/com/edufound/reader/presenter/MyTabFragmentPresenter.java
  31. 60 0
      app/src/main/java/com/edufound/reader/presenter/PopWindowPresneter.java
  32. 2 2
      app/src/main/java/com/edufound/reader/presenter/WebPresenter.java
  33. 1 1
      app/src/main/java/com/edufound/reader/util/DataCleanManager.java
  34. 2 2
      app/src/main/java/com/edufound/reader/util/GlideUtils.java
  35. BIN
      app/src/main/res/drawable/btn_blue_bg.png
  36. BIN
      app/src/main/res/drawable/btn_green_bg.png
  37. BIN
      app/src/main/res/drawable/popupwindow_ranklist_bg.png
  38. BIN
      app/src/main/res/drawable/popupwindow_ranklist_window_bg.png
  39. BIN
      app/src/main/res/drawable/ranklist_my_bg.png
  40. BIN
      app/src/main/res/drawable/ranklist_no_list.png
  41. 4 2
      app/src/main/res/layout/activity_userinfo_setting.xml
  42. 1 0
      app/src/main/res/layout/adapter_item_cusview_model_view_c.xml
  43. 110 0
      app/src/main/res/layout/adapter_item_cusview_model_view_g.xml
  44. 92 0
      app/src/main/res/layout/adapter_item_popupwindow_ranklist.xml
  45. 2 1
      app/src/main/res/layout/cusview_model_view_c.xml
  46. 14 6
      app/src/main/res/layout/cusview_model_view_e.xml
  47. 40 0
      app/src/main/res/layout/cusview_model_view_g.xml
  48. 246 0
      app/src/main/res/layout/popupwindow_show_ranklist.xml
  49. 22 0
      app/src/main/res/layout/popupwindow_show_rule.xml

+ 0 - 17
.idea/deploymentTargetDropDown.xml

@@ -1,17 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<project version="4">
-  <component name="deploymentTargetDropDown">
-    <runningDeviceTargetSelectedWithDropDown>
-      <Target>
-        <type value="RUNNING_DEVICE_TARGET" />
-        <deviceKey>
-          <Key>
-            <type value="SERIAL_NUMBER" />
-            <value value="27414/A0QE28771" />
-          </Key>
-        </deviceKey>
-      </Target>
-    </runningDeviceTargetSelectedWithDropDown>
-    <timeTargetWasSelectedWithDropDown value="2022-05-24T06:46:28.107238300Z" />
-  </component>
-</project>

+ 12 - 5
.idea/misc.xml

@@ -124,13 +124,14 @@
         <entry key="..\:/Work_Space/Android_Space/efunboxReader/efunboxReader-android-master/app/src/exception/drawable/adapter_item_video_tab_item_bg.xml" value="0.2165" />
         <entry key="..\:/Work_Space/Android_Space/efunboxReader/efunboxReader-android-master/app/src/exception/drawable/list_divider_horizontal.xml" value="0.2185" />
         <entry key="..\:/Work_Space/Android_Space/efunboxReader/efunboxReader-android-master/app/src/exception/layout/activity_event_pay.xml" value="0.22" />
-        <entry key="..\:/Work_Space/Android_Space/efunboxReader/efunboxReader-android-master/app/src/exception/layout/adapter_item_cusview_model_view_d.xml" value="0.9" />
+        <entry key="..\:/Work_Space/Android_Space/efunboxReader/efunboxReader-android-master/app/src/exception/layout/adapter_item_cusview_model_view_d.xml" value="0.75" />
         <entry key="..\:/Work_Space/Android_Space/efunboxReader/efunboxReader-android-master/app/src/exception/layout/cusview_model_view_d.xml" value="0.67" />
         <entry key="..\:/Work_Space/Android_Space/efunboxReader/efunboxReader-android-master/app/src/exception/layout/popupwindow_webs_events.xml" value="0.2572992700729927" />
         <entry key="..\:/Work_Space/Android_Space/efunboxReader/efunboxReader-android-master/app/src/fragmentRecommend/drawable/activity_comment_quick_item_one_bg.xml" value="0.2165" />
         <entry key="..\:/Work_Space/Android_Space/efunboxReader/efunboxReader-android-master/app/src/fragmentRecommend/drawable/slidevideo_switch_track_selector.xml" value="0.2005" />
-        <entry key="..\:/Work_Space/Android_Space/efunboxReader/efunboxReader-android-master/app/src/fragmentRecommend/layout/adapter_item_cusview_model_view_f.xml" value="0.75" />
+        <entry key="..\:/Work_Space/Android_Space/efunboxReader/efunboxReader-android-master/app/src/fragmentRecommend/layout/adapter_item_cusview_model_view_f.xml" value="1.0" />
         <entry key="..\:/Work_Space/Android_Space/efunboxReader/efunboxReader-android-master/app/src/fragmentRecommend/layout/cusview_model_view_f.xml" value="0.24939172749391728" />
+        <entry key="..\:/Work_Space/Android_Space/efunboxReader/efunboxReader-android-master/app/src/fragmentRecommend/layout/cusview_model_view_g.xml" value="0.28284671532846717" />
         <entry key="..\:/Work_Space/Android_Space/efunboxReader/efunboxReader-android-master/app/src/fragmentRecommend/layout/fragment_main_recommend.xml" value="0.5" />
         <entry key="..\:/Work_Space/Android_Space/efunboxReader/efunboxReader-android-master/app/src/fragmentRecommend/layout/popupwindow_myorder.xml" value="0.2871046228710462" />
         <entry key="..\:/Work_Space/Android_Space/efunboxReader/efunboxReader-android-master/app/src/fragmentRecommend/layout/popupwindow_record_remove.xml" value="0.2913625304136253" />
@@ -160,17 +161,21 @@
         <entry key="..\:/Work_Space/Android_Space/efunboxReader/efunboxReader-android-master/app/src/main/res/layout/activity_record.xml" value="0.75" />
         <entry key="..\:/Work_Space/Android_Space/efunboxReader/efunboxReader-android-master/app/src/main/res/layout/activity_saffloer.xml" value="0.5" />
         <entry key="..\:/Work_Space/Android_Space/efunboxReader/efunboxReader-android-master/app/src/main/res/layout/activity_test.xml" value="0.24452554744525548" />
-        <entry key="..\:/Work_Space/Android_Space/efunboxReader/efunboxReader-android-master/app/src/main/res/layout/activity_userinfo_setting.xml" value="0.5185676392572944" />
+        <entry key="..\:/Work_Space/Android_Space/efunboxReader/efunboxReader-android-master/app/src/main/res/layout/activity_userinfo_setting.xml" value="0.2" />
         <entry key="..\:/Work_Space/Android_Space/efunboxReader/efunboxReader-android-master/app/src/main/res/layout/activity_web.xml" value="0.18" />
+        <entry key="..\:/Work_Space/Android_Space/efunboxReader/efunboxReader-android-master/app/src/main/res/layout/adapter_item_comment_relayout_item.xml" value="0.5" />
         <entry key="..\:/Work_Space/Android_Space/efunboxReader/efunboxReader-android-master/app/src/main/res/layout/adapter_item_cusview_model_view_c.xml" value="0.75" />
-        <entry key="..\:/Work_Space/Android_Space/efunboxReader/efunboxReader-android-master/app/src/main/res/layout/adapter_item_popupwindow_myorder.xml" value="0.75" />
+        <entry key="..\:/Work_Space/Android_Space/efunboxReader/efunboxReader-android-master/app/src/main/res/layout/adapter_item_cusview_model_view_g.xml" value="0.9" />
+        <entry key="..\:/Work_Space/Android_Space/efunboxReader/efunboxReader-android-master/app/src/main/res/layout/adapter_item_popupwindow_myorder.xml" value="0.5" />
+        <entry key="..\:/Work_Space/Android_Space/efunboxReader/efunboxReader-android-master/app/src/main/res/layout/adapter_item_popupwindow_ranklist.xml" value="0.33" />
         <entry key="..\:/Work_Space/Android_Space/efunboxReader/efunboxReader-android-master/app/src/main/res/layout/adapter_item_record_user.xml" value="1.0" />
         <entry key="..\:/Work_Space/Android_Space/efunboxReader/efunboxReader-android-master/app/src/main/res/layout/adapter_item_safflower_v2.xml" value="0.19829683698296838" />
         <entry key="..\:/Work_Space/Android_Space/efunboxReader/efunboxReader-android-master/app/src/main/res/layout/adapter_item_slidevideo.xml" value="0.2975260416666667" />
         <entry key="..\:/Work_Space/Android_Space/efunboxReader/efunboxReader-android-master/app/src/main/res/layout/cusview_model_view_b.xml" value="0.2" />
-        <entry key="..\:/Work_Space/Android_Space/efunboxReader/efunboxReader-android-master/app/src/main/res/layout/cusview_model_view_c.xml" value="0.6722408026755853" />
+        <entry key="..\:/Work_Space/Android_Space/efunboxReader/efunboxReader-android-master/app/src/main/res/layout/cusview_model_view_c.xml" value="0.5" />
         <entry key="..\:/Work_Space/Android_Space/efunboxReader/efunboxReader-android-master/app/src/main/res/layout/cusview_model_view_e.xml" value="0.75" />
         <entry key="..\:/Work_Space/Android_Space/efunboxReader/efunboxReader-android-master/app/src/main/res/layout/cusview_model_view_f.xml" value="0.5" />
+        <entry key="..\:/Work_Space/Android_Space/efunboxReader/efunboxReader-android-master/app/src/main/res/layout/cusview_model_view_g.xml" value="0.28284671532846717" />
         <entry key="..\:/Work_Space/Android_Space/efunboxReader/efunboxReader-android-master/app/src/main/res/layout/fragment_main_character.xml" value="0.2615571776155718" />
         <entry key="..\:/Work_Space/Android_Space/efunboxReader/efunboxReader-android-master/app/src/main/res/layout/fragment_main_event.xml" value="0.16" />
         <entry key="..\:/Work_Space/Android_Space/efunboxReader/efunboxReader-android-master/app/src/main/res/layout/fragment_main_user.xml" value="0.16" />
@@ -179,6 +184,8 @@
         <entry key="..\:/Work_Space/Android_Space/efunboxReader/efunboxReader-android-master/app/src/main/res/layout/popupwindow_mi_sound_qrcode_layout.xml" value="0.18" />
         <entry key="..\:/Work_Space/Android_Space/efunboxReader/efunboxReader-android-master/app/src/main/res/layout/popupwindow_record_status.xml" value="0.2451338199513382" />
         <entry key="..\:/Work_Space/Android_Space/efunboxReader/efunboxReader-android-master/app/src/main/res/layout/popupwindow_registration_events.xml" value="0.25" />
+        <entry key="..\:/Work_Space/Android_Space/efunboxReader/efunboxReader-android-master/app/src/main/res/layout/popupwindow_show_ranklist.xml" value="0.6077669902912621" />
+        <entry key="..\:/Work_Space/Android_Space/efunboxReader/efunboxReader-android-master/app/src/main/res/layout/popupwindow_show_rule.xml" value="0.26763990267639903" />
         <entry key="..\:/Work_Space/Android_Space/efunboxReader/efunboxReader-android-master/app/src/main/res/layout/window_deviceinfo.xml" value="0.22262773722627738" />
       </map>
     </option>

+ 5 - 2
app/build.gradle

@@ -13,8 +13,8 @@ android {
         applicationId "com.edufound.reader"
         minSdkVersion 23 //>23导致无法直接签名
         targetSdkVersion 30
-        versionCode 20
-        versionName "2.0"
+        versionCode 21
+        versionName "2.1"
         flavorDimensions "versionCode"
         manifestPlaceholders = [UMENG_CHANNEL_VALUE: "2006"]//添加一个默认渠道号
         ndk {
@@ -198,4 +198,7 @@ dependencies {
     //小米音响
     implementation files('libs/thirdparty-payment-sdk-2.1.1-20200527.030546-1.jar')
 
+    //超长图imageview
+    implementation 'com.davemorrissey.labs:subsampling-scale-image-view:3.5.0'
+
 }

+ 26 - 19
app/src/exception/layout/adapter_item_cusview_model_view_d.xml

@@ -12,16 +12,24 @@
         android:layout_height="match_parent"
         android:background="@drawable/model_view_d_item_btn_bt"></ImageView>
 
-    <ImageView
-        android:id="@+id/adapter_item_cusview_model_view_d_icon"
+    <com.edufound.reader.cusview.RoundFrameLayout
+        android:id="@+id/adapter_item_cusview_model_view_d_icon_layout"
         android:layout_width="258dp"
-        android:layout_height="145dp"
+        android:layout_height="148dp"
         android:layout_marginTop="10dp"
-        android:background="@color/red"
         android:scaleType="fitXY"
         app:layout_constraintEnd_toEndOf="parent"
         app:layout_constraintStart_toStartOf="parent"
-        app:layout_constraintTop_toTopOf="parent"></ImageView>
+        app:layout_constraintTop_toTopOf="parent"
+        app:radio="16">
+
+        <ImageView
+            android:id="@+id/adapter_item_cusview_model_view_d_icon"
+            android:layout_width="match_parent"
+            android:layout_height="match_parent"
+            android:scaleType="fitXY"></ImageView>
+
+    </com.edufound.reader.cusview.RoundFrameLayout>
 
     <TextView
         android:id="@+id/adapter_item_cusview_model_view_d_name"
@@ -33,8 +41,8 @@
         android:textSize="18dp"
         app:layout_constraintEnd_toEndOf="parent"
         app:layout_constraintHorizontal_bias="0.0"
-        app:layout_constraintStart_toStartOf="@+id/adapter_item_cusview_model_view_d_icon"
-        app:layout_constraintTop_toBottomOf="@+id/adapter_item_cusview_model_view_d_icon"></TextView>
+        app:layout_constraintStart_toStartOf="@+id/adapter_item_cusview_model_view_d_icon_layout"
+        app:layout_constraintTop_toBottomOf="@+id/adapter_item_cusview_model_view_d_icon_layout"></TextView>
 
 
     <LinearLayout
@@ -43,10 +51,10 @@
         android:layout_height="wrap_content"
         android:layout_marginTop="12dp"
         android:orientation="horizontal"
-        app:layout_constraintEnd_toEndOf="@+id/adapter_item_cusview_model_view_d_icon"
+        app:layout_constraintEnd_toEndOf="@+id/adapter_item_cusview_model_view_d_icon_layout"
         app:layout_constraintHorizontal_bias="1.0"
-        app:layout_constraintStart_toStartOf="@+id/adapter_item_cusview_model_view_d_icon"
-        app:layout_constraintTop_toBottomOf="@+id/adapter_item_cusview_model_view_d_icon">
+        app:layout_constraintStart_toStartOf="@+id/adapter_item_cusview_model_view_d_icon_layout"
+        app:layout_constraintTop_toBottomOf="@+id/adapter_item_cusview_model_view_d_icon_layout">
 
         <TextView
             android:id="@+id/adapter_item_cusview_model_view_d_contestant"
@@ -65,18 +73,17 @@
     </LinearLayout>
 
 
-    <com.edufound.reader.cusview.RoundFrameLayout
+    <FrameLayout
         android:id="@+id/adapter_item_cusview_model_view_d_ranklist"
         android:layout_width="96dp"
         android:layout_height="25dp"
-        android:background="#6BADFF"
+        android:background="@drawable/btn_blue_bg"
         app:layout_constraintBottom_toBottomOf="parent"
         app:layout_constraintEnd_toEndOf="parent"
         app:layout_constraintHorizontal_bias="0.1"
         app:layout_constraintStart_toStartOf="parent"
         app:layout_constraintTop_toBottomOf="@+id/linearLayout2"
-        app:layout_constraintVertical_bias="0.26999998"
-        app:radio="10">
+        app:layout_constraintVertical_bias="0.26999998">
 
         <TextView
             android:layout_width="match_parent"
@@ -86,20 +93,20 @@
             android:textColor="#FFFFFF"
             android:textSize="12dp"></TextView>
 
-    </com.edufound.reader.cusview.RoundFrameLayout>
+    </FrameLayout>
 
-    <com.edufound.reader.cusview.RoundFrameLayout
+    <FrameLayout
         android:id="@+id/adapter_item_cusview_model_view_d_enter"
         android:layout_width="96dp"
         android:layout_height="25dp"
-        android:background="#32C965"
+        android:background="@drawable/btn_green_bg"
         app:layout_constraintBottom_toBottomOf="parent"
         app:layout_constraintEnd_toEndOf="parent"
         app:layout_constraintHorizontal_bias="0.9"
         app:layout_constraintStart_toStartOf="parent"
         app:layout_constraintTop_toBottomOf="@+id/linearLayout2"
         app:layout_constraintVertical_bias="0.29000002"
-        app:radio="10">
+        app:radio="7">
 
         <TextView
             android:layout_width="match_parent"
@@ -109,6 +116,6 @@
             android:textColor="#FFFFFF"
             android:textSize="12dp"></TextView>
 
-    </com.edufound.reader.cusview.RoundFrameLayout>
+    </FrameLayout>
 
 </androidx.constraintlayout.widget.ConstraintLayout>

+ 37 - 13
app/src/fragmentRecommend/layout/adapter_item_cusview_model_view_f.xml

@@ -2,7 +2,7 @@
 <androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:app="http://schemas.android.com/apk/res-auto"
     android:layout_width="381dp"
-    android:layout_height="112dp"
+    android:layout_height="120dp"
     android:layout_gravity="center"
     android:background="@drawable/cusview_model_view_f_item_bg">
 
@@ -12,7 +12,6 @@
         android:layout_width="94dp"
         android:layout_height="76dp"
         android:layout_marginStart="25dp"
-        android:background="@color/bisque"
         android:scaleType="fitXY"
         app:layout_constraintBottom_toBottomOf="parent"
         app:layout_constraintStart_toStartOf="parent"
@@ -30,7 +29,7 @@
         app:layout_constraintBottom_toBottomOf="@+id/cusview_model_view_f_layout_item_icon"
         app:layout_constraintStart_toEndOf="@+id/cusview_model_view_f_layout_item_icon"
         app:layout_constraintTop_toTopOf="@+id/cusview_model_view_f_layout_item_icon"
-        app:layout_constraintVertical_bias="0.13"></TextView>
+        app:layout_constraintVertical_bias="0.0"></TextView>
 
     <TextView
         android:id="@+id/cusview_model_view_f_layout_item_enter_num"
@@ -43,7 +42,7 @@
         app:layout_constraintBottom_toBottomOf="@+id/cusview_model_view_f_layout_item_icon"
         app:layout_constraintStart_toEndOf="@+id/cusview_model_view_f_layout_item_icon"
         app:layout_constraintTop_toTopOf="@+id/cusview_model_view_f_layout_item_icon"
-        app:layout_constraintVertical_bias="0.85"></TextView>
+        app:layout_constraintVertical_bias="0.47000003"></TextView>
 
     <TextView
         android:layout_width="wrap_content"
@@ -51,22 +50,47 @@
         android:text="参与"
         android:textColor="#999999"
         android:textSize="18dp"
-        app:layout_constraintBottom_toBottomOf="@+id/cusview_model_view_f_layout_item_icon"
+        app:layout_constraintBottom_toBottomOf="@+id/cusview_model_view_f_layout_item_enter_num"
         app:layout_constraintStart_toEndOf="@+id/cusview_model_view_f_layout_item_enter_num"
-        app:layout_constraintTop_toTopOf="@+id/cusview_model_view_f_layout_item_icon"
-        app:layout_constraintVertical_bias="0.85"></TextView>
+        app:layout_constraintTop_toBottomOf="@+id/cusview_model_view_f_layout_item_name"
+        app:layout_constraintVertical_bias="0.87"></TextView>
+
+
+    <FrameLayout
+        android:id="@+id/cusview_model_view_f_layout_item_ranklist"
+        android:layout_width="96dp"
+        android:layout_height="25dp"
+        android:background="@drawable/btn_blue_bg"
+        app:layout_constraintBottom_toBottomOf="@+id/cusview_model_view_f_layout_item_icon"
+        app:layout_constraintEnd_toEndOf="parent"
+        app:layout_constraintHorizontal_bias="0.0"
+        app:layout_constraintStart_toStartOf="@+id/cusview_model_view_f_layout_item_enter_num"
+        app:layout_constraintTop_toBottomOf="@+id/cusview_model_view_f_layout_item_enter_num"
+        app:layout_constraintVertical_bias="1.0">
+
+        <TextView
+            android:layout_width="match_parent"
+            android:layout_height="wrap_content"
+            android:layout_gravity="center"
+            android:gravity="center"
+            android:text="查看排行榜"
+            android:textColor="#FFFFFF"
+            android:textSize="15dp"></TextView>
+
+    </FrameLayout>
 
 
     <FrameLayout
         android:id="@+id/cusview_model_view_f_layout_item_enter_btn"
-        android:layout_width="118dp"
-        android:layout_height="34dp"
-        android:background="@drawable/cusview_model_view_b_enter_btn_bg"
+        android:layout_width="96dp"
+        android:layout_height="25dp"
+        android:background="@drawable/btn_green_bg"
         app:layout_constraintBottom_toBottomOf="@+id/cusview_model_view_f_layout_item_icon"
         app:layout_constraintEnd_toEndOf="parent"
-        app:layout_constraintHorizontal_bias="0.84"
-        app:layout_constraintStart_toEndOf="@+id/cusview_model_view_f_layout_item_icon"
-        app:layout_constraintTop_toTopOf="@+id/cusview_model_view_f_layout_item_icon">
+        app:layout_constraintHorizontal_bias="0.45"
+        app:layout_constraintStart_toEndOf="@+id/cusview_model_view_f_layout_item_ranklist"
+        app:layout_constraintTop_toBottomOf="@+id/cusview_model_view_f_layout_item_enter_num"
+        app:layout_constraintVertical_bias="1.0">
 
         <TextView
             android:layout_width="match_parent"

+ 1 - 0
app/src/main/java/com/edufound/reader/activity/MainActivity.java

@@ -289,6 +289,7 @@ public class MainActivity extends BaseMvpActivity<MainPresenter> implements Main
             mExitApp.setLayoutParams(exitParams);
         }
         int defaultIndex = getIntent().getIntExtra("defaultIndex", defaultValue);
+        Logger.e("defaultIndex:" + defaultIndex);
         mRadioGroupTab.postDelayed(new Runnable() {
             @Override
             public void run() {

+ 276 - 15
app/src/main/java/com/edufound/reader/adapter/FragmentEventAdapter.java

@@ -2,53 +2,230 @@ package com.edufound.reader.adapter;
 
 import android.annotation.SuppressLint;
 import android.content.Context;
-import android.view.LayoutInflater;
+import android.content.Intent;
+import android.os.Bundle;
 import android.view.View;
 import android.view.ViewGroup;
-import android.widget.ImageView;
+import android.widget.Space;
 
 import androidx.annotation.NonNull;
 import androidx.recyclerview.widget.RecyclerView;
 
-import com.edufound.reader.bean.EventListBean;
+import com.edufound.reader.activity.RecordActivity;
+import com.edufound.reader.activity.SmallFullVideoActivity;
+import com.edufound.reader.bean.ModelBean;
+import com.edufound.reader.bean.UserRecordBean;
+import com.edufound.reader.cusview.CusToast;
 import com.edufound.reader.cusview.ModelViewA;
+import com.edufound.reader.cusview.ModelViewB;
+import com.edufound.reader.cusview.ModelViewC;
+import com.edufound.reader.cusview.ModelViewD;
+import com.edufound.reader.cusview.ModelViewE;
+import com.edufound.reader.cusview.ModelViewF;
+import com.edufound.reader.cusview.ModelViewG;
 import com.edufound.reader.cusview.ModelViewWidthA;
 import com.edufound.reader.util.EfunboxUtil;
-import com.orhanobut.logger.Logger;
+import com.google.gson.Gson;
 
+import java.util.ArrayList;
 import java.util.List;
 
 public class FragmentEventAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> {
 
 
     private Context mContext;
-    private List<EventListBean> mListData;
+    private List<ModelBean> mListModelBean;
+    private showRuleOnClickListener mShowRuleOnClickListener;
+    private Gson mGson;
+    List<UserRecordBean> jsonBeanList;
 
-    public FragmentEventAdapter(Context context, List<EventListBean> listData) {
+    public FragmentEventAdapter(Context context, List<ModelBean> listData) {
         mContext = context;
-        mListData = listData;
+        mListModelBean = listData;
+        mGson = new Gson();
+        jsonBeanList = new ArrayList<>();
+    }
 
+    public void setShowRuleOnClickListener(showRuleOnClickListener listener) {
+        mShowRuleOnClickListener = listener;
     }
 
+
     @NonNull
     @Override
     public RecyclerView.ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
-        if (mListData.get(viewType).getTemplateCode().equals("IMAGE_TEMPLATE_1")) {
+
+        if (mListModelBean.get(viewType).getTemplateCode().equals("IMAGE_TEMPLATE_1")) {
             return new IMAGETEMPLATE1(new ModelViewA(mContext));
-        } else if (mListData.get(viewType).getTemplateCode().equals("IMAGE_TEMPLATE_2")) {
+        } else if (mListModelBean.get(viewType).getTemplateCode().equals("IMAGE_TEMPLATE_2")) {
             return new IMAGETEMPLATE1(new ModelViewWidthA(mContext));
+        } else if (mListModelBean.get(viewType).getTemplateCode().equals("RED_FLOWER_TEMPLATE_1")) {
+            return new REDFLOWERTEMPLATE1(new ModelViewB(mContext));
+        } else if (mListModelBean.get(viewType).getTemplateCode().equals("EXCELLENT_TEMPLATE_1")) {
+            return new EXCELLENTTEMPLATE1(new ModelViewC(mContext));
+        } else if (mListModelBean.get(viewType).getTemplateCode().equals("RACE_TEMPLATE_1")) {
+            return new RACETEMPLATE1(new ModelViewD(mContext));
+        } else if (mListModelBean.get(viewType).getTemplateCode().equals("RACE_TEMPLATE_2")) {
+            return new RACETEMPLATE2(new ModelViewF(mContext));
+        } else if (mListModelBean.get(viewType).getTemplateCode().equals("RACE_TEMPLATE_3")) {
+            return new RACETEMPLATE3(new ModelViewE(mContext));
+        } else if (mListModelBean.get(viewType).getTemplateCode().equals("RACE_TEMPLATE_4")) {
+            return new RACETEMPLATE4(new ModelViewG(mContext));
         }
-        return null;
+        return new NOITEM(new Space(mContext));
     }
 
 
     @Override
     public void onBindViewHolder(@NonNull RecyclerView.ViewHolder holder, @SuppressLint("RecyclerView") int position) {
         if (holder instanceof IMAGETEMPLATE1) {
-            ((ModelViewA) holder.itemView).setView(mListData.get(position).getImg(), new View.OnClickListener() {
+            //单张图片或者是单张宽图
+            ((ModelViewA) holder.itemView).setView(mListModelBean.get(position).getImg(), o -> {
+                if (EfunboxUtil.checkLogin(mContext, holder.itemView)) {
+                    EfunboxUtil.toWebFlowerActivity(mContext, (mListModelBean.get(position)).getUrl(), String.valueOf((mListModelBean.get(position)).getId()));
+                }
+            });
+        } else if (holder instanceof EXCELLENTTEMPLATE1) {
+            //类型1优秀作品展播
+            ((ModelViewC) holder.itemView).setView((mListModelBean.get(position)).getImg(), mListModelBean.get(position), mListModelBean.get(position).getReadUserList().get(0).getTopList());
+            ((ModelViewC) holder.itemView).setItemClickListener(new ModelViewC.onItemClickListener() {
+
+
+                @Override
+                public void clickExample(ModelBean bean) {
+                    if (EfunboxUtil.checkLogin(mContext, holder.itemView)) {
+                        //进入官方
+                        toRecordActivity(bean.getReadUserList().get(0).getExample().getId());
+
+                    }
+                }
+
+                @Override
+                public void clickItem(View view, int position, UserRecordBean bean) {
+                    if (EfunboxUtil.checkLogin(mContext, holder.itemView)) {
+                        //点击item
+                        jsonBeanList.clear();
+                        jsonBeanList.add(bean);
+                        toSmallFullVideoActivity(mGson.toJson(jsonBeanList));
+                    }
+                }
+
+                @Override
+                public void clickRule(ModelBean bean) {
+                    //优秀作品没有显示规则
+//                    if (mShowRuleOnClickListener != null) {
+//                        mShowRuleOnClickListener.showRuleWindow(bean.getUrl());
+//                    }
+                }
+            });
+        } else if (holder instanceof REDFLOWERTEMPLATE1) {
+            //单图背景左右两个按钮
+            ((ModelViewB) holder.itemView).setView("", "", "", "", new ModelViewB.OnClickBtnListener() {
+                @Override
+                public void clickLeft() {
+
+                }
+
+                @Override
+                public void clickRight() {
+
+                }
+            });
+        } else if (holder instanceof RACETEMPLATE1) {
+            ((ModelViewD) holder.itemView).setView((mListModelBean.get(position)).getImg(), mListModelBean.get(position), mListModelBean.get(position).getReadUserList(), new ModelViewD.OnClickBtnListener() {
+                @Override
+                public void clickRule(ModelBean bean) {
+                    if (mShowRuleOnClickListener != null) {
+                        mShowRuleOnClickListener.showRuleWindow(bean.getUrl());
+                    }
+                }
+
+                @Override
+                public void clickItem(ModelBean.ReadUserList bean) {
+                    if (EfunboxUtil.checkLogin(mContext, holder.itemView)) {
+//                        CusToast.getInstance(mContext).show(bean.getExample().getTitle(), 1000);
+                        toRecordActivity(bean.getExample().getId());
+                    }
+                }
+
+                @Override
+                public void openRankList(ModelBean.ReadUserList bean) {
+                    if (mShowRuleOnClickListener != null) {
+                        mShowRuleOnClickListener.showRankListWindow(bean);
+                    }
+                }
+            });
+        } else if (holder instanceof RACETEMPLATE2) {
+            ((ModelViewF) holder.itemView).setView((mListModelBean.get(position)).getImg(), (mListModelBean.get(position)), new ModelViewF.ModelViewFOnItemClick() {
+                @Override
+                public void clickItem(ModelBean.ReadUserList bean) {
+                    if (EfunboxUtil.checkLogin(mContext, holder.itemView)) {
+                        toRecordActivity(bean.getExample().getId());
+                    }
+                }
+
+                @Override
+                public void clickRule(ModelBean bean) {
+                    if (mShowRuleOnClickListener != null) {
+                        mShowRuleOnClickListener.showRuleWindow(bean.getUrl());
+                    }
+                }
+
+
                 @Override
-                public void onClick(View v) {
-                    EfunboxUtil.toWebFlowerActivity(mContext, mListData.get(position).getUrl(), String.valueOf(mListData.get(position).getId()));
+                public void openRankList(ModelBean.ReadUserList bean) {
+                    if (mShowRuleOnClickListener != null) {
+                        mShowRuleOnClickListener.showRankListWindow(bean);
+                    }
+                }
+            });
+        } else if (holder instanceof RACETEMPLATE3) {
+            ((ModelViewE) holder.itemView).setView(mListModelBean.get(position).getImg(), mListModelBean.get(position), new ModelViewE.onItemClickListener() {
+                @Override
+                public void clickItem(View view, int position, UserRecordBean bean) {
+                    if (EfunboxUtil.checkLogin(mContext, holder.itemView)) {
+                        jsonBeanList.clear();
+                        jsonBeanList.add(bean);
+                        toSmallFullVideoActivity(mGson.toJson(jsonBeanList));
+                    }
+                }
+
+                @Override
+                public void clickRule(ModelBean bean) {
+                    if (mShowRuleOnClickListener != null) {
+                        mShowRuleOnClickListener.showRuleWindow(bean.getUrl());
+                    }
+                }
+
+
+                @Override
+                public void clickEnter(ModelBean bean) {
+                    if (EfunboxUtil.checkLogin(mContext, holder.itemView)) {
+                        toRecordActivity(bean.getReadUserList().get(0).getExample().getId());
+                    }
+                }
+            });
+        } else if (holder instanceof RACETEMPLATE4) {
+            ((ModelViewG) holder.itemView).setView((mListModelBean.get(position)).getImg(), (mListModelBean.get(position)), new ModelViewF.ModelViewFOnItemClick() {
+                @Override
+                public void clickItem(ModelBean.ReadUserList bean) {
+                    if (EfunboxUtil.checkLogin(mContext, holder.itemView)) {
+                        toRecordActivity(bean.getExample().getId());
+                    }
+                }
+
+                @Override
+                public void clickRule(ModelBean bean) {
+                    if (mShowRuleOnClickListener != null) {
+                        mShowRuleOnClickListener.showRuleWindow(bean.getUrl());
+                    }
+                }
+
+                @Override
+                public void openRankList(ModelBean.ReadUserList bean) {
+                    if (mShowRuleOnClickListener != null) {
+                        mShowRuleOnClickListener.showRankListWindow(bean);
+                    }
                 }
             });
         }
@@ -56,13 +233,45 @@ public class FragmentEventAdapter extends RecyclerView.Adapter<RecyclerView.View
 
     @Override
     public int getItemCount() {
-        return mListData.size();
+        return mListModelBean.size();
     }
 
     @Override
     public int getItemViewType(int position) {
         return position;
     }
+
+    public void toRecordActivity(String exampleId) {
+        Bundle bundle = new Bundle();
+        bundle.putString("exampleId", exampleId);
+        Intent intent = new Intent(mContext, RecordActivity.class);
+        intent.putExtra("params_bundle", bundle);
+        mContext.startActivity(intent);
+    }
+
+    public void toSmallFullVideoActivity(String json) {
+        Bundle bundle = new Bundle();
+        bundle.putString("index", 0 + "");
+        bundle.putString("dataJson", json);
+        bundle.putString("intoPage", "EventFragment");
+        //数据太多了。直接传不过去,通过MMKV写一下再读一下
+        Intent intent = new Intent(mContext, SmallFullVideoActivity.class);
+        intent.putExtra("params_bundle", bundle);
+        mContext.startActivity(intent);
+    }
+
+    public interface showRuleOnClickListener {
+        void showRuleWindow(String url);
+
+        void showRankListWindow(ModelBean.ReadUserList bean);
+    }
+}
+
+class NOITEM extends RecyclerView.ViewHolder {
+
+    public NOITEM(@NonNull View itemView) {
+        super(itemView);
+    }
 }
 
 class IMAGETEMPLATE1 extends RecyclerView.ViewHolder {
@@ -71,4 +280,56 @@ class IMAGETEMPLATE1 extends RecyclerView.ViewHolder {
         super(itemView);
         ((ModelViewA) itemView).initView();
     }
-}
+}
+
+class EXCELLENTTEMPLATE1 extends RecyclerView.ViewHolder {
+
+    public EXCELLENTTEMPLATE1(@NonNull View itemView) {
+        super(itemView);
+        ((ModelViewC) itemView).initView();
+    }
+}
+
+class REDFLOWERTEMPLATE1 extends RecyclerView.ViewHolder {
+
+    public REDFLOWERTEMPLATE1(@NonNull View itemView) {
+        super(itemView);
+        ((ModelViewB) itemView).initView();
+    }
+}
+
+class RACETEMPLATE1 extends RecyclerView.ViewHolder {
+
+    public RACETEMPLATE1(@NonNull View itemView) {
+        super(itemView);
+        ((ModelViewD) itemView).initView();
+    }
+}
+
+class RACETEMPLATE2 extends RecyclerView.ViewHolder {
+
+    public RACETEMPLATE2(@NonNull View itemView) {
+        super(itemView);
+        ((ModelViewF) itemView).initView();
+    }
+}
+
+class RACETEMPLATE3 extends RecyclerView.ViewHolder {
+
+    public RACETEMPLATE3(@NonNull View itemView) {
+        super(itemView);
+        ((ModelViewE) itemView).initView();
+    }
+
+}
+
+class RACETEMPLATE4 extends RecyclerView.ViewHolder {
+
+    public RACETEMPLATE4(@NonNull View itemView) {
+        super(itemView);
+        ((ModelViewG) itemView).initView();
+    }
+
+}
+
+

+ 116 - 0
app/src/main/java/com/edufound/reader/adapter/RankListItemAdapter.java

@@ -0,0 +1,116 @@
+package com.edufound.reader.adapter;
+
+import android.content.Context;
+import android.graphics.Color;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.ViewGroup;
+import android.widget.ImageView;
+import android.widget.TextView;
+
+import androidx.annotation.NonNull;
+import androidx.recyclerview.widget.RecyclerView;
+
+import com.edufound.reader.R;
+import com.edufound.reader.bean.UserRecordBean;
+import com.edufound.reader.util.Consts;
+
+import java.util.List;
+
+public class RankListItemAdapter extends RecyclerView.Adapter<RankListViewHoler> {
+
+    Context mContext;
+    LayoutInflater mLayoutInflater;
+    List<UserRecordBean> mListData;
+    CallbackUserNum mCallBack;
+
+    public RankListItemAdapter(Context context, List<UserRecordBean> listData) {
+        mContext = context;
+        mListData = listData;
+        mLayoutInflater = LayoutInflater.from(context);
+    }
+
+
+    public void setCallBack(CallbackUserNum listener) {
+        mCallBack = listener;
+    }
+
+    @NonNull
+    @Override
+    public RankListViewHoler onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
+        return new RankListViewHoler(mLayoutInflater.inflate(R.layout.adapter_item_popupwindow_ranklist, parent, false));
+    }
+
+    @Override
+    public void onBindViewHolder(@NonNull RankListViewHoler holder, int position) {
+        if (position % 2 == 0) {
+            holder.itemView.setBackgroundColor(Color.parseColor("#F8F8F8"));
+        } else {
+            holder.itemView.setBackgroundColor(Color.WHITE);
+        }
+        switch (position) {
+            case 0:
+                holder.mImgNum.setImageResource(R.drawable.ranklist_one);
+                holder.mNumber.setText("");
+                holder.mImgNum.setVisibility(View.VISIBLE);
+                break;
+            case 1:
+                holder.mImgNum.setImageResource(R.drawable.ranklist_two);
+                holder.mNumber.setText("");
+                holder.mImgNum.setVisibility(View.VISIBLE);
+                break;
+            case 2:
+                holder.mImgNum.setImageResource(R.drawable.ranklist_three);
+                holder.mNumber.setText("");
+                holder.mImgNum.setVisibility(View.VISIBLE);
+                break;
+            default:
+                holder.mNumber.setText((position + 1) + "");
+                break;
+        }
+        holder.mName.setText(mListData.get(position).getUser().getNickName());
+        holder.mThumb.setText(mListData.get(position).getUserRead().getLikeAmount());
+        holder.mCollection.setText(mListData.get(position).getUserRead().getFavoritesAmount());
+        holder.mScore.setText(mListData.get(position).getUserRead().getScore());
+        if (mListData.get(position).getUser().getUid().equals(Consts.getUID())) {
+            //获取到自己的uid了。看看在第几名
+            if (mCallBack != null) {
+                mCallBack.CallBack(position);
+            }
+        }
+    }
+
+    @Override
+    public int getItemCount() {
+        return mListData.size();
+    }
+
+    @Override
+    public int getItemViewType(int position) {
+        return position;
+    }
+
+    public interface CallbackUserNum {
+        void CallBack(int number);
+    }
+}
+
+class RankListViewHoler extends RecyclerView.ViewHolder {
+
+    TextView mNumber;
+    TextView mName;
+    TextView mScore;
+    TextView mThumb;
+    TextView mCollection;
+    ImageView mImgNum;
+
+    public RankListViewHoler(@NonNull View itemView) {
+        super(itemView);
+        mNumber = itemView.findViewById(R.id.adapter_item_ranklist_number);
+        mImgNum = itemView.findViewById(R.id.adapter_item_ranklist_number_img);
+        mName = itemView.findViewById(R.id.adapter_item_ranklist_name);
+        mScore = itemView.findViewById(R.id.adapter_item_ranklist_score);
+        mThumb = itemView.findViewById(R.id.adapter_item_ranklist_thumb);
+        mCollection = itemView.findViewById(R.id.adapter_item_ranklist_collection);
+    }
+}

+ 13 - 0
app/src/main/java/com/edufound/reader/apiserver/ActivityEventServerImpl.java

@@ -26,10 +26,23 @@ public class ActivityEventServerImpl implements ActivityEventServer {
     public void getEventListByType(Callback callback) {
         OkHttpClient.doGetAsync(new HttpInfo.Builder().setUrl(API + "/activity/list").addParam("channelCode", Consts.getUmengChannel()).addParam("uid", Consts.getUID()), callback);
     }
+
+    @Override
+    public void getExcellentList(Callback callback) {
+        OkHttpClient.doGetAsync(new HttpInfo.Builder().setUrl(API + "/excellent").addParam("channelCode", Consts.getUmengChannel()).addParam("uid", Consts.getUID()), callback);
+    }
 }
 
 interface ActivityEventServer {
     void getEventByType(String type, Callback callback);
 
     void getEventListByType(Callback callback);
+
+    /**
+     * 获取优秀作品
+     */
+
+    void getExcellentList(Callback callback);
+
+
 }

+ 15 - 0
app/src/main/java/com/edufound/reader/apiserver/UserApiServerImpl.java

@@ -155,6 +155,15 @@ public class UserApiServerImpl implements userApiServer {
     public void bindPhoneNum(String phoneNum, Callback callback) {
         OkHttpClient.doPostAsync(HttpInfo.Builder().setUrl(API + "/user/mobileBind").addParamJson("{\"mobileNo\":\"" + phoneNum + "\",\"uid\":\"" + Consts.getUID() + "\"}"), callback);
     }
+
+
+    /**
+     * 获取排行榜
+     */
+    @Override
+    public void getRankList(String id, Callback callback) {
+        OkHttpClient.doGetAsync(HttpInfo.Builder().addParam("channelCode", Consts.getUmengChannel()).addParam("deviceCode", DeviceUuidFactory.getUuid()).addParam("activityRaceReadId", id).setUrl(API + "/activity/rank"), callback);
+    }
 }
 
 
@@ -256,4 +265,10 @@ interface userApiServer {
      * 绑定手机号
      */
     void bindPhoneNum(String phoneNum, Callback callback);
+
+
+    /**
+     * 获取排行榜
+     */
+    void getRankList(String id, Callback callback);
 }

+ 256 - 0
app/src/main/java/com/edufound/reader/bean/ExampleBean.java

@@ -0,0 +1,256 @@
+package com.edufound.reader.bean;
+
+public class ExampleBean {
+    private String audioPath;
+    private String channel;
+    private String commentAmount;
+    private String coverImg;
+    private String day;
+    private String exampleId;
+    private String favoritesAmount;
+    private String gmtCreated;
+    private String gmtModified;
+    private String grade;
+    private String iconImg;
+    private String id;
+    private String lessonText;
+    private String likeAmount;
+    private String originVideo;
+    private String playAmount;
+    private String readAmount;
+    private String score;
+    private String shareImg;
+    private String sort;
+    private String status;
+    private String summary;
+    private String tag;
+    private String title;
+    private String traceId;
+    private String type;
+    private String uid;
+    private String videoPath;
+
+    public String getAudioPath() {
+        return audioPath;
+    }
+
+    public void setAudioPath(String audioPath) {
+        this.audioPath = audioPath;
+    }
+
+    public String getChannel() {
+        return channel;
+    }
+
+    public void setChannel(String channel) {
+        this.channel = channel;
+    }
+
+    public String getCommentAmount() {
+        return commentAmount;
+    }
+
+    public void setCommentAmount(String commentAmount) {
+        this.commentAmount = commentAmount;
+    }
+
+    public String getCoverImg() {
+        return coverImg;
+    }
+
+    public void setCoverImg(String coverImg) {
+        this.coverImg = coverImg;
+    }
+
+    public String getDay() {
+        return day;
+    }
+
+    public void setDay(String day) {
+        this.day = day;
+    }
+
+    public String getExampleId() {
+        return exampleId;
+    }
+
+    public void setExampleId(String exampleId) {
+        this.exampleId = exampleId;
+    }
+
+    public String getFavoritesAmount() {
+        return favoritesAmount;
+    }
+
+    public void setFavoritesAmount(String favoritesAmount) {
+        this.favoritesAmount = favoritesAmount;
+    }
+
+    public String getGmtCreated() {
+        return gmtCreated;
+    }
+
+    public void setGmtCreated(String gmtCreated) {
+        this.gmtCreated = gmtCreated;
+    }
+
+    public String getGmtModified() {
+        return gmtModified;
+    }
+
+    public void setGmtModified(String gmtModified) {
+        this.gmtModified = gmtModified;
+    }
+
+    public String getGrade() {
+        return grade;
+    }
+
+    public void setGrade(String grade) {
+        this.grade = grade;
+    }
+
+    public String getIconImg() {
+        return iconImg;
+    }
+
+    public void setIconImg(String iconImg) {
+        this.iconImg = iconImg;
+    }
+
+    public String getId() {
+        return id;
+    }
+
+    public void setId(String id) {
+        this.id = id;
+    }
+
+    public String getLessonText() {
+        return lessonText;
+    }
+
+    public void setLessonText(String lessonText) {
+        this.lessonText = lessonText;
+    }
+
+    public String getLikeAmount() {
+        return likeAmount;
+    }
+
+    public void setLikeAmount(String likeAmount) {
+        this.likeAmount = likeAmount;
+    }
+
+    public String getOriginVideo() {
+        return originVideo;
+    }
+
+    public void setOriginVideo(String originVideo) {
+        this.originVideo = originVideo;
+    }
+
+    public String getPlayAmount() {
+        return playAmount;
+    }
+
+    public void setPlayAmount(String playAmount) {
+        this.playAmount = playAmount;
+    }
+
+    public String getReadAmount() {
+        return readAmount;
+    }
+
+    public void setReadAmount(String readAmount) {
+        this.readAmount = readAmount;
+    }
+
+    public String getScore() {
+        return score;
+    }
+
+    public void setScore(String score) {
+        this.score = score;
+    }
+
+    public String getShareImg() {
+        return shareImg;
+    }
+
+    public void setShareImg(String shareImg) {
+        this.shareImg = shareImg;
+    }
+
+    public String getSort() {
+        return sort;
+    }
+
+    public void setSort(String sort) {
+        this.sort = sort;
+    }
+
+    public String getStatus() {
+        return status;
+    }
+
+    public void setStatus(String status) {
+        this.status = status;
+    }
+
+    public String getSummary() {
+        return summary;
+    }
+
+    public void setSummary(String summary) {
+        this.summary = summary;
+    }
+
+    public String getTag() {
+        return tag;
+    }
+
+    public void setTag(String tag) {
+        this.tag = tag;
+    }
+
+    public String getTitle() {
+        return title;
+    }
+
+    public void setTitle(String title) {
+        this.title = title;
+    }
+
+    public String getTraceId() {
+        return traceId;
+    }
+
+    public void setTraceId(String traceId) {
+        this.traceId = traceId;
+    }
+
+    public String getType() {
+        return type;
+    }
+
+    public void setType(String type) {
+        this.type = type;
+    }
+
+    public String getUid() {
+        return uid;
+    }
+
+    public void setUid(String uid) {
+        this.uid = uid;
+    }
+
+    public String getVideoPath() {
+        return videoPath;
+    }
+
+    public void setVideoPath(String videoPath) {
+        this.videoPath = videoPath;
+    }
+}

+ 42 - 0
app/src/main/java/com/edufound/reader/bean/ExcellentBean.java

@@ -0,0 +1,42 @@
+package com.edufound.reader.bean;
+
+import java.util.List;
+
+public class ExcellentBean {
+    private String templateCode;
+    private String img;
+    private ExampleBean example;
+    private List<UserRecordBean> userReadList;
+
+    public ExampleBean getExample() {
+        return example;
+    }
+
+    public void setExample(ExampleBean example) {
+        this.example = example;
+    }
+
+    public List<UserRecordBean> getUserReadList() {
+        return userReadList;
+    }
+
+    public void setUserReadList(List<UserRecordBean> userReadList) {
+        this.userReadList = userReadList;
+    }
+
+    public String getTemplateCode() {
+        return templateCode;
+    }
+
+    public void setTemplateCode(String templateCode) {
+        this.templateCode = templateCode;
+    }
+
+    public String getImg() {
+        return img;
+    }
+
+    public void setImg(String img) {
+        this.img = img;
+    }
+}

+ 235 - 0
app/src/main/java/com/edufound/reader/bean/ModelBean.java

@@ -0,0 +1,235 @@
+package com.edufound.reader.bean;
+
+import java.util.List;
+
+public class ModelBean {
+    private String amount;
+    private String endTime;
+    private String gmtCreated;
+    private String gmtModified;
+    private List<ReadUserList> readUserList;
+    private String id;
+    private String img;
+    private String partakeChannel;
+    private String redFlower;
+    private String sort;
+    private String startTime;
+    private String status;
+    private String templateCode;
+    private String type;
+    private String url;
+
+    public String getAmount() {
+        return amount;
+    }
+
+    public void setAmount(String amount) {
+        this.amount = amount;
+    }
+
+    public String getEndTime() {
+        return endTime;
+    }
+
+    public void setEndTime(String endTime) {
+        this.endTime = endTime;
+    }
+
+    public String getGmtCreated() {
+        return gmtCreated;
+    }
+
+    public void setGmtCreated(String gmtCreated) {
+        this.gmtCreated = gmtCreated;
+    }
+
+    public String getGmtModified() {
+        return gmtModified;
+    }
+
+    public void setGmtModified(String gmtModified) {
+        this.gmtModified = gmtModified;
+    }
+
+    public List<ReadUserList> getReadUserList() {
+        return readUserList;
+    }
+
+    public void setReadUserList(List<ReadUserList> readUserList) {
+        this.readUserList = readUserList;
+    }
+
+    public String getId() {
+        return id;
+    }
+
+    public void setId(String id) {
+        this.id = id;
+    }
+
+    public String getImg() {
+        return img;
+    }
+
+    public void setImg(String img) {
+        this.img = img;
+    }
+
+    public String getPartakeChannel() {
+        return partakeChannel;
+    }
+
+    public void setPartakeChannel(String partakeChannel) {
+        this.partakeChannel = partakeChannel;
+    }
+
+    public String getRedFlower() {
+        return redFlower;
+    }
+
+    public void setRedFlower(String redFlower) {
+        this.redFlower = redFlower;
+    }
+
+    public String getSort() {
+        return sort;
+    }
+
+    public void setSort(String sort) {
+        this.sort = sort;
+    }
+
+    public String getStartTime() {
+        return startTime;
+    }
+
+    public void setStartTime(String startTime) {
+        this.startTime = startTime;
+    }
+
+    public String getStatus() {
+        return status;
+    }
+
+    public void setStatus(String status) {
+        this.status = status;
+    }
+
+    public String getTemplateCode() {
+        return templateCode;
+    }
+
+    public void setTemplateCode(String templateCode) {
+        this.templateCode = templateCode;
+    }
+
+    public String getType() {
+        return type;
+    }
+
+    public void setType(String type) {
+        this.type = type;
+    }
+
+    public String getUrl() {
+        return url;
+    }
+
+    public void setUrl(String url) {
+        this.url = url;
+    }
+
+    public class ReadUserList {
+        private String activityId;
+        private ExampleBean example;
+        private String gmtCreated;
+        private String gmtModified;
+        private String id;
+        private String sort;
+        private String status;
+        private String userReadId;
+        private List<UserRecordBean> topList;
+        private String count;
+
+        public String getCount() {
+            return count;
+        }
+
+        public void setCount(String count) {
+            this.count = count;
+        }
+
+        public String getActivityId() {
+            return activityId;
+        }
+
+        public void setActivityId(String activityId) {
+            this.activityId = activityId;
+        }
+
+        public ExampleBean getExample() {
+            return example;
+        }
+
+        public void setExample(ExampleBean example) {
+            this.example = example;
+        }
+
+        public String getGmtCreated() {
+            return gmtCreated;
+        }
+
+        public void setGmtCreated(String gmtCreated) {
+            this.gmtCreated = gmtCreated;
+        }
+
+        public String getGmtModified() {
+            return gmtModified;
+        }
+
+        public void setGmtModified(String gmtModified) {
+            this.gmtModified = gmtModified;
+        }
+
+        public String getId() {
+            return id;
+        }
+
+        public void setId(String id) {
+            this.id = id;
+        }
+
+        public String getSort() {
+            return sort;
+        }
+
+        public void setSort(String sort) {
+            this.sort = sort;
+        }
+
+        public String getStatus() {
+            return status;
+        }
+
+        public void setStatus(String status) {
+            this.status = status;
+        }
+
+        public String getUserReadId() {
+            return userReadId;
+        }
+
+        public void setUserReadId(String userReadId) {
+            this.userReadId = userReadId;
+        }
+
+        public List<UserRecordBean> getTopList() {
+            return topList;
+        }
+
+        public void setTopList(List<UserRecordBean> topList) {
+            this.topList = topList;
+        }
+    }
+}
+

+ 25 - 0
app/src/main/java/com/edufound/reader/bean/RankListBean.java

@@ -0,0 +1,25 @@
+package com.edufound.reader.bean;
+
+import java.util.List;
+
+public class RankListBean {
+    private List<UserRecordBean> activityUserReadList;
+    private UserRecordBean.UserRead myRank;
+
+
+    public List<UserRecordBean> getActivityUserReadList() {
+        return activityUserReadList;
+    }
+
+    public void setActivityUserReadList(List<UserRecordBean> activityUserReadList) {
+        this.activityUserReadList = activityUserReadList;
+    }
+
+    public UserRecordBean.UserRead getMyRank() {
+        return myRank;
+    }
+
+    public void setMyRank(UserRecordBean.UserRead myRank) {
+        this.myRank = myRank;
+    }
+}

+ 1 - 0
app/src/main/java/com/edufound/reader/contract/EventFragmentContract.java

@@ -16,5 +16,6 @@ public interface EventFragmentContract {
     interface Presenter {
         void getAllEvent();
 
+
     }
 }

+ 1 - 0
app/src/main/java/com/edufound/reader/contract/MainContract.java

@@ -49,5 +49,6 @@ public interface MainContract {
         void refMyFragment();
 
         void resumeFragment();
+        
     }
 }

+ 7 - 2
app/src/main/java/com/edufound/reader/cusview/ModelViewA.java

@@ -12,6 +12,11 @@ import androidx.annotation.Nullable;
 
 import com.edufound.reader.util.GlideUtils;
 import com.edufound.reader.util.SizeUtils;
+import com.jakewharton.rxbinding4.view.RxView;
+
+import java.util.concurrent.TimeUnit;
+
+import io.reactivex.rxjava3.functions.Consumer;
 
 /**
  * 一张图片加一个兑换按钮(兑换按钮可能在图片上)
@@ -46,8 +51,8 @@ public class ModelViewA extends FrameLayout {
         addView(imageView);
     }
 
-    public void setView(String url, OnClickListener clickListener) {
-        imageView.setOnClickListener(clickListener);
+    public void setView(String url, Consumer onNext) {
+        RxView.clicks(imageView).throttleFirst(2, TimeUnit.SECONDS).subscribe(onNext);
         GlideUtils.loadImageSizeKipMemoryCache(mContext, url, imageView);
 
     }

+ 10 - 12
app/src/main/java/com/edufound/reader/cusview/ModelViewB.java

@@ -18,9 +18,13 @@ import androidx.constraintlayout.widget.ConstraintLayout;
 import com.edufound.reader.R;
 import com.edufound.reader.util.GlideUtils;
 import com.edufound.reader.util.SizeUtils;
+import com.jakewharton.rxbinding4.view.RxView;
+
+import java.util.concurrent.TimeUnit;
 
 /**
  * 一张图片加左右两个按钮(详情/参加)
+ * 对应后端 templateCode (RED_FLOWER_TEMPLATE_1)
  */
 public class ModelViewB extends FrameLayout {
 
@@ -72,21 +76,15 @@ public class ModelViewB extends FrameLayout {
         mTextName.setText(name);
         mTextTime.setText(time);
         mTextEnterNum.setText(enterNum);
-        btnLeft.setOnClickListener(new OnClickListener() {
-            @Override
-            public void onClick(View v) {
-                if (clickListener != null) {
-                    clickListener.clickLeft();
-                }
+        RxView.clicks(btnLeft).throttleFirst(2, TimeUnit.SECONDS).subscribe(o -> {
+            if (clickListener != null) {
+                clickListener.clickLeft();
             }
         });
 
-        btnRight.setOnClickListener(new OnClickListener() {
-            @Override
-            public void onClick(View v) {
-                if (clickListener != null) {
-                    clickListener.clickRight();
-                }
+        RxView.clicks(btnRight).throttleFirst(2, TimeUnit.SECONDS).subscribe(o -> {
+            if (clickListener != null) {
+                clickListener.clickRight();
             }
         });
     }

+ 84 - 41
app/src/main/java/com/edufound/reader/cusview/ModelViewC.java

@@ -2,7 +2,9 @@ package com.edufound.reader.cusview;
 
 import android.annotation.SuppressLint;
 import android.content.Context;
+import android.content.Intent;
 import android.graphics.Color;
+import android.os.Bundle;
 import android.text.TextUtils;
 import android.util.AttributeSet;
 import android.view.LayoutInflater;
@@ -19,21 +21,41 @@ import androidx.recyclerview.widget.LinearLayoutManager;
 import androidx.recyclerview.widget.RecyclerView;
 
 import com.edufound.reader.R;
+import com.edufound.reader.activity.RecordActivity;
+import com.edufound.reader.bean.ExampleBean;
+import com.edufound.reader.bean.ExcellentBean;
+import com.edufound.reader.bean.ModelBean;
+import com.edufound.reader.bean.UserRecordBean;
+import com.edufound.reader.popwindow.PopWindowUtil;
+import com.edufound.reader.util.EfunboxUtil;
 import com.edufound.reader.util.GlideUtils;
 import com.edufound.reader.util.SizeUtils;
+import com.jakewharton.rxbinding4.view.RxView;
+
+import org.w3c.dom.Text;
 
 import java.util.ArrayList;
 import java.util.List;
+import java.util.concurrent.TimeUnit;
 
 
 /**
  * 上面一个课程,下面一个list展示所有读过课程的用户
+ * 对应后端模板type (EXCELLENT_TEMPLATE_1)
  */
 public class ModelViewC extends FrameLayout {
     Context mContext;
     private LayoutInflater mLayoutInflater;
     private onItemClickListener mItemClickListener;
-
+    ConstraintLayout mCourseLayout;
+    RecyclerView mRecyclerView;
+    ImageView mBackgroundImg;
+    ImageView mExamIcon;
+    TextView mExamName;
+    TextView mAllCount;
+    TextView mThumbNum;
+    TextView mStartNum;
+    FrameLayout mshowRule;
 
     public ModelViewC(@NonNull Context context) {
         super(context);
@@ -53,56 +75,64 @@ public class ModelViewC extends FrameLayout {
         mItemClickListener = listener;
     }
 
-    public void initView(String bgUrl) {
+    public void initView() {
         LayoutParams layoutParams = new LayoutParams(SizeUtils.dp2px(mContext, 428)
                 , SizeUtils.dp2px(mContext, 598));
         this.setLayoutParams(layoutParams);
         View modelCView = mLayoutInflater.inflate(R.layout.cusview_model_view_c, null);
-        ImageView backgournd = modelCView.findViewById(R.id.cusview_model_view_e_background);
-        if (!TextUtils.isEmpty(bgUrl)) {
-            GlideUtils.loadImageSizeKipMemoryCache(mContext, bgUrl, backgournd);
-        } else {
-            GlideUtils.loadImageSizeKipMemoryCache(mContext, R.drawable.test_youxiuzuopin, backgournd);
-        }
-        FrameLayout mshowRule = modelCView.findViewById(R.id.cusview_model_view_c_show_rule);
-        mshowRule.setOnClickListener(new OnClickListener() {
-            @Override
-            public void onClick(View v) {
-                //显示规
-                CusToast.getInstance(mContext).show("显示规则弹窗还是什么玩意儿", 2000);
-            }
-        });
+        mBackgroundImg = modelCView.findViewById(R.id.cusview_model_view_e_background);
+        mshowRule = modelCView.findViewById(R.id.cusview_model_view_c_show_rule);
+
+        mExamIcon = modelCView.findViewById(R.id.model_view_c_icon);
+        mExamName = modelCView.findViewById(R.id.model_view_c_name);
+        mAllCount = modelCView.findViewById(R.id.model_view_c_allcount_num);
+        mThumbNum = modelCView.findViewById(R.id.model_view_c_thumb_num);
+        mStartNum = modelCView.findViewById(R.id.model_view_c_start_num);
 
         //cusview_model_view_c_course_layout
-        ConstraintLayout mCourseLayout = modelCView.findViewById(R.id.cusview_model_view_c_course_layout);
-        mCourseLayout.setOnClickListener(new OnClickListener() {
-            @Override
-            public void onClick(View v) {
-                CusToast.getInstance(mContext).show("去朗读页面", 2000);
-            }
-        });
+        mCourseLayout = modelCView.findViewById(R.id.cusview_model_view_c_course_layout);
 
-        RecyclerView mRecyclerView = modelCView.findViewById(R.id.model_view_c_recyclerview);
+        mRecyclerView = modelCView.findViewById(R.id.model_view_c_recyclerview);
         mRecyclerView.setLayoutManager(new LinearLayoutManager(mContext, LinearLayoutManager.VERTICAL, false));
+        addView(modelCView);
+    }
 
-        //测试数据
-        List<String> list = new ArrayList<>();
-        for (int i = 0; i < 40; i++) {
-            list.add("" + i);
+
+    public void setView(String bgurl, ModelBean bean, List<UserRecordBean> list) {
+
+        GlideUtils.loadRoundCircleImage(mContext, bean.getReadUserList().get(0).getExample().getShareImg(), mExamIcon, SizeUtils.dp2px(mContext, 10));
+        if (bean.getReadUserList().get(0).getExample().getTitle().length() > 10) {
+            mExamName.setText(bean.getReadUserList().get(0).getExample().getTitle().substring(0, 10));
+        } else {
+            mExamName.setText(bean.getReadUserList().get(0).getExample().getTitle());
+        }
+        mAllCount.setText(EfunboxUtil.checkNum10000(String.valueOf(bean.getReadUserList().get(0).getExample().getCommentAmount())));
+        mThumbNum.setText(EfunboxUtil.checkNum10000(bean.getReadUserList().get(0).getExample().getLikeAmount()));
+        mStartNum.setText(EfunboxUtil.checkNum10000(bean.getReadUserList().get(0).getExample().getFavoritesAmount()));
+
+        RxView.clicks(mCourseLayout).throttleFirst(2, TimeUnit.SECONDS).subscribe(o -> {
+            mItemClickListener.clickExample(bean);
+        });
+        RxView.clicks(mshowRule).throttleFirst(2, TimeUnit.SECONDS).subscribe(o -> {
+            mItemClickListener.clickRule(bean);
+        });
+        if (!TextUtils.isEmpty(bgurl)) {
+            GlideUtils.loadImageSizeKipMemoryCache(mContext, bgurl, mBackgroundImg);
+        } else {
+            GlideUtils.loadImageSizeKipMemoryCache(mContext, R.drawable.test_youxiuzuopin, mBackgroundImg);
         }
         ModelViewCAdapter adapter = new ModelViewCAdapter(mContext, list);
         mRecyclerView.setAdapter(adapter);
-        addView(modelCView);
-    }
 
+    }
 
     public class ModelViewCAdapter extends RecyclerView.Adapter<ModelViewCViewHolder> {
 
 
-        public List<String> mListData;
+        public List<UserRecordBean> mListData;
 
 
-        public ModelViewCAdapter(Context context, List<String> listData) {
+        public ModelViewCAdapter(Context context, List<UserRecordBean> listData) {
             mContext = context;
             mListData = listData;
         }
@@ -130,17 +160,25 @@ public class ModelViewC extends FrameLayout {
                     holder.mScore.setTextColor(Color.parseColor("#FF6984"));
                     break;
                 default:
-                    holder.mItemIcon.setText(position + "");
+                    holder.mItemIcon.setText((position + 1) + "");
                     break;
             }
-            holder.mNickName.setText(mListData.get(position));
-            holder.mScore.setText(mListData.get(position) + "分");
+            if (!TextUtils.isEmpty(mListData.get(position).getUser().getNickName())) {
+                holder.mNickName.setText(mListData.get(position).getUser().getNickName());
+            } else {
+                if (!TextUtils.isEmpty(mListData.get(position).getUser().getWechatName())) {
+                    holder.mNickName.setText(mListData.get(position).getUser().getWechatName());
+                } else {
+                    holder.mNickName.setText(mListData.get(position).getUser().getMobile());
+                }
+            }
+            if (holder.mNickName.getText().toString().length() > 11) {
+                holder.mNickName.setText(holder.mNickName.getText().toString().substring(0, 11) + "...");
+            }
+            holder.mScore.setText(mListData.get(position).getUserRead().getScore() + "分");
             if (mItemClickListener != null) {
-                holder.itemView.setOnClickListener(new OnClickListener() {
-                    @Override
-                    public void onClick(View v) {
-                        mItemClickListener.clickItem(holder.itemView, position);
-                    }
+                RxView.clicks(holder.itemView).throttleFirst(2, TimeUnit.SECONDS).subscribe(o -> {
+                    mItemClickListener.clickItem(holder.itemView, position, mListData.get(position));
                 });
             }
         }
@@ -159,7 +197,12 @@ public class ModelViewC extends FrameLayout {
 
 
     public interface onItemClickListener {
-        void clickItem(View view, int position);
+
+        void clickExample(ModelBean bean);
+
+        void clickItem(View view, int position, UserRecordBean bean);
+
+        void clickRule(ModelBean bean);
 
     }
 

+ 33 - 17
app/src/main/java/com/edufound/reader/cusview/ModelViewD.java

@@ -15,12 +15,18 @@ import androidx.annotation.NonNull;
 import androidx.annotation.Nullable;
 
 import com.edufound.reader.R;
+import com.edufound.reader.bean.ModelBean;
 import com.edufound.reader.util.GlideUtils;
 import com.edufound.reader.util.SizeUtils;
+import com.jakewharton.rxbinding4.view.RxView;
 
 import java.util.List;
+import java.util.concurrent.TimeUnit;
 
-
+/**
+ * gridlayout 2x2展示item
+ * RACE_TEMPLATE_1
+ */
 public class ModelViewD extends FrameLayout {
 
     Context mContext;
@@ -57,19 +63,18 @@ public class ModelViewD extends FrameLayout {
         addView(modelDView);
     }
 
-    public void setView(String bgUrl, List<String> listData, OnClickBtnListener listener) {
+    public void setView(String bgUrl, ModelBean modelBean, List<ModelBean.ReadUserList> readUserLists, OnClickBtnListener listener) {
+        gridLayout.removeAllViews();
         if (!TextUtils.isEmpty(bgUrl)) {
             GlideUtils.loadImageSizeKipMemoryCache(mContext, bgUrl, backgournd);
         } else {
             GlideUtils.loadImageSizeKipMemoryCache(mContext, R.drawable.test_four_img, backgournd);
         }
-        rule.setOnClickListener(new OnClickListener() {
-            @Override
-            public void onClick(View v) {
-                listener.clickLeft(null);
-            }
+
+        RxView.clicks(rule).throttleFirst(2, TimeUnit.SECONDS).subscribe(o -> {
+            listener.clickRule(modelBean);
         });
-        for (int i = 0; i < listData.size(); i++) {
+        for (int i = 0; i < readUserLists.size(); i++) {
             View itemView = mLayoutInflater.inflate(R.layout.adapter_item_cusview_model_view_d, null);
             GridLayout.LayoutParams gridItemParams = new GridLayout.LayoutParams();
             gridItemParams.width = SizeUtils.dp2px(mContext, 289);
@@ -79,24 +84,35 @@ public class ModelViewD extends FrameLayout {
             itemView.setLayoutParams(gridItemParams);
             ImageView icon = itemView.findViewById(R.id.adapter_item_cusview_model_view_d_icon);
             TextView name = itemView.findViewById(R.id.adapter_item_cusview_model_view_d_name);
-            name.setText(listData.get(i));
+//            Logger.e(" readUserLists.get(i).getExample().getShareImg():" + readUserLists.get(i).getExample().getShareImg());
+//            Logger.e(" readUserLists.get(i).getExample().getIconImg():" + readUserLists.get(i).getExample().getIconImg());
+//            GlideUtils.loadRoundCircleImage(mContext, readUserLists.get(i).getExample().getShareImg(), icon, SizeUtils.dp2px(mContext, 10));
+            GlideUtils.loadImage(mContext, readUserLists.get(i).getExample().getShareImg(), icon);
+//            GlideUtils.loadImage(mContext, readUserLists.get(i).getExample().getIconImg(), icon);
+            name.setText(readUserLists.get(i).getExample().getTitle());
             TextView contestant = itemView.findViewById(R.id.adapter_item_cusview_model_view_d_contestant);
-            contestant.setText(listData.get(i) + "参赛者");
+            contestant.setText(readUserLists.get(i).getCount());
+
+            FrameLayout openRanklist = itemView.findViewById(R.id.adapter_item_cusview_model_view_d_ranklist);
+
+
             gridLayout.addView(itemView);
             int finalI = i;
-            itemView.setOnClickListener(new OnClickListener() {
-                @Override
-                public void onClick(View v) {
-                    listener.clickItem(listData.get(finalI) + "");
-                }
+            RxView.clicks(itemView).throttleFirst(2, TimeUnit.SECONDS).subscribe(o -> {
+                listener.clickItem(modelBean.getReadUserList().get(finalI));
+            });
+            RxView.clicks(openRanklist).throttleFirst(2, TimeUnit.SECONDS).subscribe(o -> {
+                listener.openRankList(modelBean.getReadUserList().get(finalI));
             });
         }
     }
 
     public interface OnClickBtnListener {
-        void clickLeft(Object object);
+        void clickRule(ModelBean bean);
+
 
+        void clickItem(ModelBean.ReadUserList bean);
 
-        void clickItem(Object object);
+        void openRankList(ModelBean.ReadUserList bean);
     }
 }

+ 91 - 51
app/src/main/java/com/edufound/reader/cusview/ModelViewE.java

@@ -2,6 +2,7 @@ package com.edufound.reader.cusview;
 
 import android.annotation.SuppressLint;
 import android.content.Context;
+import android.graphics.Color;
 import android.text.TextUtils;
 import android.util.AttributeSet;
 import android.view.LayoutInflater;
@@ -18,21 +19,39 @@ import androidx.recyclerview.widget.LinearLayoutManager;
 import androidx.recyclerview.widget.RecyclerView;
 
 import com.edufound.reader.R;
+import com.edufound.reader.bean.ExampleBean;
+import com.edufound.reader.bean.ModelBean;
+import com.edufound.reader.bean.UserRecordBean;
 import com.edufound.reader.util.GlideUtils;
 import com.edufound.reader.util.SizeUtils;
+import com.jakewharton.rxbinding4.view.RxView;
+
+import org.w3c.dom.Text;
 
 import java.util.ArrayList;
 import java.util.List;
+import java.util.concurrent.TimeUnit;
 
 
 /**
- * 上面一个课程,下面一个list展示所有读过课程的用户
+ * 上面一个课程,下面一个list展示所有读过课程的用户,有立即参赛
+ * RACE_TEMPLATE_3
  */
 public class ModelViewE extends FrameLayout {
     Context mContext;
     private LayoutInflater mLayoutInflater;
     private onItemClickListener mItemClickListener;
-
+    private ImageView mBackgroundImg;
+    ConstraintLayout mCourseLayout;
+    FrameLayout mEnterMatch;
+    FrameLayout mshowRule;
+    RecyclerView mRecyclerView;
+    ImageView mIcon;
+    TextView mName;
+    TextView mComment;
+    TextView mThumb;
+    TextView mStart;
+    ImageView mNoRankListImg;
 
     public ModelViewE(@NonNull Context context) {
         super(context);
@@ -48,67 +67,71 @@ public class ModelViewE extends FrameLayout {
         super(context, attrs, defStyleAttr);
     }
 
-    public void setItemClickListener(onItemClickListener listener) {
-        mItemClickListener = listener;
-    }
 
-    public void initView(String bgUrl) {
+    public void initView() {
         LayoutParams layoutParams = new LayoutParams(SizeUtils.dp2px(mContext, 428)
                 , SizeUtils.dp2px(mContext, 598));
         this.setLayoutParams(layoutParams);
-        View modelCView = mLayoutInflater.inflate(R.layout.cusview_model_view_e, null);
-        ImageView backgournd = modelCView.findViewById(R.id.cusview_model_view_e_background);
+        View modelEView = mLayoutInflater.inflate(R.layout.cusview_model_view_e, null);
+        mBackgroundImg = modelEView.findViewById(R.id.cusview_model_view_e_background);
+        mshowRule = modelEView.findViewById(R.id.cusview_model_view_e_show_rule);
+        mCourseLayout = modelEView.findViewById(R.id.cusview_cusview_model_view_e_course_layout);
+        mEnterMatch = modelEView.findViewById(R.id.cusview_model_view_e_enter_match);
+        mIcon = modelEView.findViewById(R.id.cusview_model_view_e_icon);
+        mName = modelEView.findViewById(R.id.cusview_model_view_e_name);
+        mComment = modelEView.findViewById(R.id.cusview_model_view_e_allcount_num);
+        mThumb = modelEView.findViewById(R.id.cusview_model_view_e_thumb_num);
+        mStart = modelEView.findViewById(R.id.cusview_model_view_e_start_num);
+        mRecyclerView = modelEView.findViewById(R.id.cusview_model_view_e_recyclerview);
+        mNoRankListImg = modelEView.findViewById(R.id.cusview_model_view_e_noranklist);
+        mNoRankListImg.setVisibility(View.GONE);
+        addView(modelEView);
+    }
+
+
+    public void setView(String bgUrl, ModelBean bean, onItemClickListener listener) {
+        mItemClickListener = listener;
         if (!TextUtils.isEmpty(bgUrl)) {
-            GlideUtils.loadImageSizeKipMemoryCache(mContext, bgUrl, backgournd);
+            GlideUtils.loadImageSizeKipMemoryCache(mContext, bgUrl, mBackgroundImg);
         } else {
-            GlideUtils.loadImageSizeKipMemoryCache(mContext, R.drawable.test_lijicansai, backgournd);
+            GlideUtils.loadImageSizeKipMemoryCache(mContext, R.drawable.test_lijicansai, mBackgroundImg);
         }
-        FrameLayout mshowRule = modelCView.findViewById(R.id.cusview_model_view_e_show_rule);
-        mshowRule.setOnClickListener(new OnClickListener() {
-            @Override
-            public void onClick(View v) {
-                //显示规
-                CusToast.getInstance(mContext).show("显示规则弹窗还是什么玩意儿", 2000);
-            }
+        GlideUtils.loadRoundCircleImage(mContext, bean.getReadUserList().get(0).getExample().getShareImg(), mIcon, SizeUtils.dp2px(mContext, 10));
+        mName.setText(bean.getReadUserList().get(0).getExample().getTitle());
+        mComment.setText(bean.getReadUserList().get(0).getExample().getCommentAmount());
+        mThumb.setText(bean.getReadUserList().get(0).getExample().getLikeAmount());
+        mStart.setText(bean.getReadUserList().get(0).getExample().getFavoritesAmount());
+        RxView.clicks(mCourseLayout).throttleFirst(2, TimeUnit.SECONDS).subscribe(o -> {
+            mItemClickListener.clickEnter(bean);
         });
-
-        //cusview_model_view_e_course_layout
-        ConstraintLayout mCourseLayout = modelCView.findViewById(R.id.cusview_cusview_model_view_e_course_layout);
-        mCourseLayout.setOnClickListener(new OnClickListener() {
-            @Override
-            public void onClick(View v) {
-                CusToast.getInstance(mContext).show("去列表播放页SmallFullVideoActivity", 2000);
-            }
+        RxView.clicks(mEnterMatch).throttleFirst(2, TimeUnit.SECONDS).subscribe(o -> {
+            mItemClickListener.clickEnter(bean);
         });
-
-        RoundFrameLayout enterMatch = modelCView.findViewById(R.id.cusview_model_view_e_enter_match);
-        enterMatch.setOnClickListener(new OnClickListener() {
-            @Override
-            public void onClick(View v) {
-                CusToast.getInstance(mContext).show("立即参赛", 2000);
-            }
+        RxView.clicks(mshowRule).throttleFirst(2, TimeUnit.SECONDS).subscribe(o -> {
+            mItemClickListener.clickRule(bean);
         });
-        RecyclerView mRecyclerView = modelCView.findViewById(R.id.cusview_model_view_e_recyclerview);
+
         mRecyclerView.setLayoutManager(new LinearLayoutManager(mContext, LinearLayoutManager.VERTICAL, false));
 
         //测试数据
-        List<String> list = new ArrayList<>();
-        for (int i = 0; i < 40; i++) {
-            list.add("" + i);
+
+        if (bean.getReadUserList().get(0).getTopList() != null && bean.getReadUserList().get(0).getTopList().size() != 0) {
+            ModelViewEAdapter adapter = new ModelViewEAdapter(mContext, bean.getReadUserList().get(0).getTopList());
+            mRecyclerView.setAdapter(adapter);
+        } else {
+            mRecyclerView.setVisibility(View.GONE);
+            mNoRankListImg.setVisibility(View.VISIBLE);
         }
-        ModelViewEAdapter adapter = new ModelViewEAdapter(mContext, list);
-        mRecyclerView.setAdapter(adapter);
-        addView(modelCView);
-    }
 
+    }
 
     public class ModelViewEAdapter extends RecyclerView.Adapter<ModelViewEViewHolder> {
 
 
-        public List<String> mListData;
+        public List<UserRecordBean> mListData;
 
 
-        public ModelViewEAdapter(Context context, List<String> listData) {
+        public ModelViewEAdapter(Context context, List<UserRecordBean> listData) {
             mContext = context;
             mListData = listData;
         }
@@ -125,26 +148,39 @@ public class ModelViewE extends FrameLayout {
             switch (position) {
                 case 0:
                     holder.mItemIcon.setBackgroundResource(R.drawable.ranklist_one);
+                    holder.mScore.setTextColor(Color.parseColor("#FF6984"));
                     break;
                 case 1:
                     holder.mItemIcon.setBackgroundResource(R.drawable.ranklist_two);
+                    holder.mScore.setTextColor(Color.parseColor("#FF6984"));
                     break;
                 case 2:
                     holder.mItemIcon.setBackgroundResource(R.drawable.ranklist_three);
+                    holder.mScore.setTextColor(Color.parseColor("#FF6984"));
                     break;
                 default:
-                    holder.mItemIcon.setText(position + "");
+                    holder.mItemIcon.setText((position + 1) + "");
                     break;
             }
-            holder.mNickName.setText(mListData.get(position));
-            holder.mScore.setText(mListData.get(position) + "分数");
+            if (!TextUtils.isEmpty(mListData.get(position).getUser().getNickName())) {
+                holder.mNickName.setText(mListData.get(position).getUser().getNickName());
+            } else {
+                if (!TextUtils.isEmpty(mListData.get(position).getUser().getWechatName())) {
+                    holder.mNickName.setText(mListData.get(position).getUser().getWechatName());
+                } else {
+                    holder.mNickName.setText(mListData.get(position).getUser().getMobile());
+                }
+            }
+            if (holder.mNickName.getText().toString().length() > 6) {
+                holder.mNickName.setText(holder.mNickName.getText().toString().substring(0, 3) + "...");
+            }
+            holder.mScore.setText(mListData.get(position).getUserRead().getScore() + "分");
             if (mItemClickListener != null) {
-                holder.itemView.setOnClickListener(new OnClickListener() {
-                    @Override
-                    public void onClick(View v) {
-                        mItemClickListener.clickItem(holder.itemView, position);
-                    }
+
+                RxView.clicks(holder.itemView).throttleFirst(2, TimeUnit.SECONDS).subscribe(o -> {
+                    mItemClickListener.clickItem(holder.itemView, position, mListData.get(position));
                 });
+
             }
         }
 
@@ -162,7 +198,11 @@ public class ModelViewE extends FrameLayout {
 
 
     public interface onItemClickListener {
-        void clickItem(View view, int position);
+        void clickItem(View view, int position, UserRecordBean bean);
+
+        void clickRule(ModelBean bean);
+
+        void clickEnter(ModelBean bean);
 
     }
 

+ 44 - 14
app/src/main/java/com/edufound/reader/cusview/ModelViewF.java

@@ -10,21 +10,32 @@ import android.view.ViewGroup;
 import android.widget.FrameLayout;
 import android.widget.ImageView;
 import android.widget.LinearLayout;
+import android.widget.TextView;
 
 import androidx.annotation.NonNull;
 import androidx.annotation.Nullable;
 import androidx.constraintlayout.widget.ConstraintLayout;
 
 import com.edufound.reader.R;
+import com.edufound.reader.bean.ModelBean;
 import com.edufound.reader.util.GlideUtils;
 import com.edufound.reader.util.SizeUtils;
+import com.jakewharton.rxbinding4.view.RxView;
 
+import java.util.List;
+import java.util.concurrent.TimeUnit;
+
+/**
+ * 下面4个参赛的item
+ * RACE_TEMPLATE_2
+ */
 public class ModelViewF extends FrameLayout {
 
     Context mContext;
     LayoutInflater mLayoutInflater;
     LinearLayout mItemLayout;
     ImageView mBackgroundImg;
+    FrameLayout mRuleBtn;
 
     public ModelViewF(@NonNull Context context) {
         super(context);
@@ -47,33 +58,52 @@ public class ModelViewF extends FrameLayout {
         layoutParams.gravity = Gravity.CENTER;
         FrameLayout modelViewF = (FrameLayout) mLayoutInflater.inflate(R.layout.cusview_model_view_f, null);
         mBackgroundImg = modelViewF.findViewById(R.id.cusview_model_view_f_background);
-        FrameLayout btn_rule = modelViewF.findViewById(R.id.cusview_model_view_f_rule);
-        btn_rule.setOnClickListener(new OnClickListener() {
-            @Override
-            public void onClick(View v) {
-                CusToast.getInstance(mContext).show("显示规则", 1000);
-            }
-        });
-
+        mRuleBtn = modelViewF.findViewById(R.id.cusview_model_view_f_rule);
         mItemLayout = modelViewF.findViewById(R.id.cusview_model_view_f_item_layout);
-        mItemLayout.removeAllViews();
-
         this.addView(modelViewF);
-
-
     }
 
-    public void setView(String bgurl) {
+    public void setView(String bgurl, ModelBean bean, ModelViewFOnItemClick listener) {
+        mItemLayout.removeAllViews();
         if (!TextUtils.isEmpty(bgurl)) {
             GlideUtils.loadImageSizeKipMemoryCache(mContext, bgurl, mBackgroundImg);
         } else {
             GlideUtils.loadImageSizeKipMemoryCache(mContext, R.drawable.test_view_f_bg, mBackgroundImg);
         }
+
+        RxView.clicks(mRuleBtn).throttleFirst(2, TimeUnit.SECONDS).subscribe(o -> {
+            listener.clickRule(bean);
+        });
+
+
         LinearLayout.LayoutParams itemParams = new LinearLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, 0, 1);
-        for (int i = 0; i < 4; i++) {
+        for (int i = 0; i < bean.getReadUserList().size(); i++) {
             ConstraintLayout item = (ConstraintLayout) mLayoutInflater.inflate(R.layout.adapter_item_cusview_model_view_f, null);
+            ImageView icon = item.findViewById(R.id.cusview_model_view_f_layout_item_icon);
+            GlideUtils.loadRoundCircleImage(mContext, bean.getReadUserList().get(i).getExample().getShareImg(), icon, SizeUtils.dp2px(mContext, 10));
+            TextView name = item.findViewById(R.id.cusview_model_view_f_layout_item_name);
+            name.setText(bean.getReadUserList().get(i).getExample().getTitle());
+            TextView enterNum = item.findViewById(R.id.cusview_model_view_f_layout_item_enter_num);
+            enterNum.setText(bean.getReadUserList().get(i).getCount());
+            FrameLayout openRankList = item.findViewById(R.id.cusview_model_view_f_layout_item_ranklist);
+
             item.setLayoutParams(itemParams);
+            int finalI = i;
+            RxView.clicks(item).throttleFirst(2, TimeUnit.SECONDS).subscribe(o -> {
+                listener.clickItem(bean.getReadUserList().get(finalI));
+            });
+            RxView.clicks(openRankList).throttleFirst(2, TimeUnit.SECONDS).subscribe(o -> {
+                listener.openRankList(bean.getReadUserList().get(finalI));
+            });
             mItemLayout.addView(item);
         }
     }
+
+    public interface ModelViewFOnItemClick {
+        void clickItem(ModelBean.ReadUserList bean);
+
+        void clickRule(ModelBean bean);
+
+        void openRankList(ModelBean.ReadUserList bean);
+    }
 }

+ 97 - 0
app/src/main/java/com/edufound/reader/cusview/ModelViewG.java

@@ -0,0 +1,97 @@
+package com.edufound.reader.cusview;
+
+import android.content.Context;
+import android.graphics.drawable.GradientDrawable;
+import android.text.TextUtils;
+import android.util.AttributeSet;
+import android.view.Gravity;
+import android.view.LayoutInflater;
+import android.view.ViewGroup;
+import android.widget.FrameLayout;
+import android.widget.ImageView;
+import android.widget.LinearLayout;
+import android.widget.TextView;
+
+import androidx.annotation.NonNull;
+import androidx.annotation.Nullable;
+import androidx.constraintlayout.widget.ConstraintLayout;
+
+import com.edufound.reader.R;
+import com.edufound.reader.bean.ModelBean;
+import com.edufound.reader.util.GlideUtils;
+import com.edufound.reader.util.SizeUtils;
+import com.jakewharton.rxbinding4.view.RxView;
+
+import java.util.concurrent.TimeUnit;
+
+public class ModelViewG extends FrameLayout {
+
+    Context mContext;
+    LayoutInflater mLayoutInflater;
+    LinearLayout mItemLayout;
+    ImageView mBackgroundImg;
+    FrameLayout mRuleBtn;
+
+    public ModelViewG(@NonNull Context context) {
+        super(context);
+        mContext = context;
+        mLayoutInflater = LayoutInflater.from(mContext);
+    }
+
+    public ModelViewG(@NonNull Context context, @Nullable AttributeSet attrs) {
+        super(context, attrs);
+    }
+
+    public ModelViewG(@NonNull Context context, @Nullable AttributeSet attrs, int defStyleAttr) {
+        super(context, attrs, defStyleAttr);
+    }
+
+    public void initView() {
+        FrameLayout.LayoutParams layoutParams = new FrameLayout.LayoutParams(SizeUtils.dp2px(mContext, 428)
+                , SizeUtils.dp2px(mContext, 598));
+        this.setLayoutParams(layoutParams);
+        layoutParams.gravity = Gravity.CENTER;
+        FrameLayout modelViewF = (FrameLayout) mLayoutInflater.inflate(R.layout.cusview_model_view_g, null);
+        mBackgroundImg = modelViewF.findViewById(R.id.cusview_model_view_g_background);
+        mRuleBtn = modelViewF.findViewById(R.id.cusview_model_view_g_rule);
+        mItemLayout = modelViewF.findViewById(R.id.cusview_model_view_g_item_layout);
+        GradientDrawable drawable = new GradientDrawable();
+        drawable.setSize(1, SizeUtils.dp2px(mContext, 46));
+        mItemLayout.setDividerDrawable(drawable);
+        mItemLayout.setShowDividers(LinearLayout.SHOW_DIVIDER_MIDDLE);
+        this.addView(modelViewF);
+    }
+
+    public void setView(String bgurl, ModelBean bean, ModelViewF.ModelViewFOnItemClick listener) {
+        mItemLayout.removeAllViews();
+        if (!TextUtils.isEmpty(bgurl)) {
+            GlideUtils.loadImageSizeKipMemoryCache(mContext, bgurl, mBackgroundImg);
+        } else {
+            GlideUtils.loadImageSizeKipMemoryCache(mContext, R.drawable.test_view_f_bg, mBackgroundImg);
+        }
+        RxView.clicks(mRuleBtn).throttleFirst(2, TimeUnit.SECONDS).subscribe(o -> {
+            listener.clickRule(bean);
+        });
+        LinearLayout.LayoutParams itemParams = new LinearLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, 0, 1);
+        for (int i = 0; i < bean.getReadUserList().size(); i++) {
+            ConstraintLayout item = (ConstraintLayout) mLayoutInflater.inflate(R.layout.adapter_item_cusview_model_view_g, null);
+            ImageView icon = item.findViewById(R.id.cusview_model_view_g_layout_item_icon);
+            GlideUtils.loadRoundCircleImage(mContext, bean.getReadUserList().get(i).getExample().getShareImg(), icon, SizeUtils.dp2px(mContext, 10));
+            TextView name = item.findViewById(R.id.cusview_model_view_g_layout_item_name);
+            name.setText(bean.getReadUserList().get(i).getExample().getTitle());
+            TextView enterNum = item.findViewById(R.id.cusview_model_view_g_layout_item_enter_num);
+            enterNum.setText(bean.getReadUserList().get(i).getCount());
+            FrameLayout openRankList = item.findViewById(R.id.cusview_model_view_g_layout_item_ranklist);
+            item.setLayoutParams(itemParams);
+            int finalI = i;
+            RxView.clicks(item).throttleFirst(2, TimeUnit.SECONDS).subscribe(o -> {
+                listener.clickItem(bean.getReadUserList().get(finalI));
+            });
+            RxView.clicks(openRankList).throttleFirst(2, TimeUnit.SECONDS).subscribe(o -> {
+                listener.openRankList(bean.getReadUserList().get(finalI));
+            });
+            mItemLayout.addView(item);
+        }
+    }
+
+}

+ 7 - 2
app/src/main/java/com/edufound/reader/cusview/ModelViewWidthA.java

@@ -11,6 +11,11 @@ import androidx.annotation.Nullable;
 
 import com.edufound.reader.util.GlideUtils;
 import com.edufound.reader.util.SizeUtils;
+import com.jakewharton.rxbinding4.view.RxView;
+
+import java.util.concurrent.TimeUnit;
+
+import io.reactivex.rxjava3.functions.Consumer;
 
 /**
  * 一张图片加一个兑换按钮(兑换按钮可能在图片上),比ModelViewA宽的
@@ -45,8 +50,8 @@ public class ModelViewWidthA extends ModelViewA {
         addView(imageView);
     }
 
-    public void setView(String url, OnClickListener clickListener) {
-        imageView.setOnClickListener(clickListener);
+    public void setView(String url, Consumer onNext) {
+        RxView.clicks(imageView).throttleFirst(2, TimeUnit.SECONDS).subscribe(onNext);
         GlideUtils.loadImageSizeKipMemoryCache(mContext, url, imageView);
 
     }

+ 4 - 2
app/src/main/java/com/edufound/reader/fragment/RecommendFragment.java

@@ -369,8 +369,10 @@ public class RecommendFragment extends BaseMvpFragment<RecommendFragmentPresente
         boolean isFirst = (boolean) MMKVUtil.getInstance().decode("first_into", true);
         if (isFirst) {
             //是第一次进入
-            ((BaseActivity) getActivity()).showFirstTouchView();
-            MMKVUtil.getInstance().encode("first_into", false);
+            if (!((BaseActivity) getActivity()).getLocalClassName().contains("SmallFullVideoActivity")) {
+                ((BaseActivity) getActivity()).showFirstTouchView();
+                MMKVUtil.getInstance().encode("first_into", false);
+            }
         } else {
             //不是第一次进入了
         }

+ 1 - 0
app/src/main/java/com/edufound/reader/jsinterfaces/WebActivityJsInterfaces.java

@@ -57,6 +57,7 @@ public class WebActivityJsInterfaces {
 
     @JavascriptInterface
     public void efunboxQRPay(String productId, String orderId) {
+        Logger.e("webview调用支付");
         OkHttpClient.doGetAsync(mView.getActivity(), new HttpInfo.Builder().setUrl(Consts.getFinalApi() + "/pay/efun/qrCode")
                 .addParam("channel", Consts.getUmengChannel()).addParam("productId", productId).addParam("activityId", mView.getActivityId()), new Callback() {
             @Override

+ 101 - 11
app/src/main/java/com/edufound/reader/popwindow/PopWindowUtil.java

@@ -4,6 +4,9 @@ import android.app.Activity;
 import android.app.Dialog;
 import android.content.Context;
 import android.graphics.Color;
+import android.graphics.PointF;
+import android.net.Uri;
+import android.os.FileUtils;
 import android.view.Display;
 import android.view.Gravity;
 import android.view.KeyEvent;
@@ -16,9 +19,19 @@ import android.widget.ImageView;
 import android.widget.PopupWindow;
 import android.widget.TextView;
 
+import com.bumptech.glide.Glide;
+import com.bumptech.glide.load.DataSource;
+import com.bumptech.glide.load.engine.GlideException;
+import com.bumptech.glide.request.RequestListener;
+import com.bumptech.glide.request.target.SimpleTarget;
+import com.bumptech.glide.request.target.Target;
+import com.davemorrissey.labs.subscaleview.ImageSource;
+import com.davemorrissey.labs.subscaleview.ImageViewState;
+import com.davemorrissey.labs.subscaleview.SubsamplingScaleImageView;
 import com.edufound.reader.R;
 import com.edufound.reader.application.EApplication;
 import com.edufound.reader.bean.ChannelCodeEnum;
+import com.edufound.reader.bean.ModelBean;
 import com.edufound.reader.bean.RecordResultBean;
 import com.edufound.reader.bean.UserRecordBean;
 import com.edufound.reader.cusview.GridRadioGroup;
@@ -27,29 +40,23 @@ import com.edufound.reader.listener.PopupRecordStatusListener;
 import com.edufound.reader.miutil.MiSoundSDKUtil;
 import com.edufound.reader.presenter.PopWindowPresneter;
 import com.edufound.reader.util.Consts;
+import com.edufound.reader.util.DataCleanManager;
 import com.edufound.reader.util.DeviceUtil;
 import com.edufound.reader.util.DeviceUuidFactory;
+import com.edufound.reader.util.EfunboxUtil;
 import com.edufound.reader.util.GlideUtils;
 import com.edufound.reader.util.SizeUtils;
 import com.jakewharton.rxbinding4.view.RxView;
 import com.orhanobut.logger.Logger;
-import com.trello.rxlifecycle4.android.ActivityEvent;
 
-import java.util.List;
+import java.io.File;
 import java.util.concurrent.TimeUnit;
 
 import androidx.annotation.Nullable;
 import androidx.constraintlayout.widget.ConstraintLayout;
+import androidx.recyclerview.widget.RecyclerView;
 
-import io.reactivex.rxjava3.android.schedulers.AndroidSchedulers;
-import io.reactivex.rxjava3.annotations.NonNull;
-import io.reactivex.rxjava3.core.Observable;
-import io.reactivex.rxjava3.core.Observer;
 import io.reactivex.rxjava3.functions.Consumer;
-import io.reactivex.rxjava3.functions.Function;
-import kotlin.Unit;
-
-import static com.trello.rxlifecycle4.RxLifecycle.bindUntilEvent;
 
 public class PopWindowUtil {
     private static PopWindowPresneter mPresenter;
@@ -76,9 +83,12 @@ public class PopWindowUtil {
     }
 
     public static void hidePopupWindow() {
-        if (mPopupWindow.isShowing()) {
+        if (mPopupWindow != null && mPopupWindow.isShowing()) {
             mPopupWindow.dismiss();
         }
+        if (recordPopupWindow != null && recordPopupWindow.isShowing()) {
+            recordPopupWindow.dismiss();
+        }
     }
 
     public static void showExitAppWindow(Activity context, View parent) {
@@ -86,6 +96,7 @@ public class PopWindowUtil {
         if (checkWindowShoing()) {
             return;
         }
+        EfunboxUtil.initDesignSize(context);
         dialog_view = (FrameLayout) LayoutInflater.from(context).inflate(R.layout.popupwindow_exit_app, null);
         dialog_view.setFocusable(true);
         ImageView image = dialog_view.findViewById(R.id.popupwindow_exit_app_image);
@@ -114,6 +125,7 @@ public class PopWindowUtil {
         if (checkWindowShoing()) {
             return;
         }
+        EfunboxUtil.initDesignSize(context);
         dialog_view = (FrameLayout) LayoutInflater.from(context).inflate(R.layout.popupwindow_select_grade, null);
         dialog_view.setFocusable(true);
         FrameLayout btn_ok = dialog_view.findViewById(R.id.popupwindow_select_ok);
@@ -187,6 +199,7 @@ public class PopWindowUtil {
         if (checkWindowShoing()) {
             return;
         }
+        EfunboxUtil.initDesignSize(context);
         dialog_view = (FrameLayout) LayoutInflater.from(context).inflate(R.layout.popupwindow_exit_login, null);
         dialog_view.setFocusable(true);
         ImageView image = dialog_view.findViewById(R.id.popupwindow_exit_login_image);
@@ -209,6 +222,7 @@ public class PopWindowUtil {
         if (checkWindowShoing()) {
             return;
         }
+        EfunboxUtil.initDesignSize(context);
         dialog_view = (FrameLayout) LayoutInflater.from(context).inflate(R.layout.popupwindow_cancellation_account, null);
         dialog_view.setFocusable(true);
         FrameLayout exit = dialog_view.findViewById(R.id.popupwindow_cancellation_account_ok);
@@ -230,6 +244,7 @@ public class PopWindowUtil {
         if (checkWindowShoing()) {
             return;
         }
+        EfunboxUtil.initDesignSize(context);
         dialog_view = (FrameLayout) LayoutInflater.from(context).inflate(R.layout.popupwindow_bind_wechat, null);
         dialog_view.setFocusable(true);
         ImageView back = dialog_view.findViewById(R.id.popupwindow_bindwechat_back);
@@ -256,6 +271,7 @@ public class PopWindowUtil {
         if (record_view != null) {
             record_view = null;
         }
+        EfunboxUtil.initDesignSize(context);
         record_view = (FrameLayout) LayoutInflater.from(context).inflate(R.layout.popupwindow_record_status, null);
         record_view.setFocusable(true);
         record_view.setOnKeyListener(new View.OnKeyListener() {
@@ -292,6 +308,7 @@ public class PopWindowUtil {
             mPopupWindow.dismiss();
             return;
         }
+        EfunboxUtil.initDesignSize(context);
         dialog_view = (FrameLayout) LayoutInflater.from(context).inflate(R.layout.popupwindow_myorder, null);
         dialog_view.setFocusable(true);
         dialog_view.setOnKeyListener(new View.OnKeyListener() {
@@ -317,6 +334,7 @@ public class PopWindowUtil {
         if (checkWindowShoing()) {
             return;
         }
+        EfunboxUtil.initDesignSize(context);
         dialog_view = (FrameLayout) LayoutInflater.from(context).inflate(R.layout.popupwindow_record_remove, null);
         dialog_view.setFocusable(true);
         FrameLayout ok = dialog_view.findViewById(R.id.popupwindow_record_remove_ok);
@@ -342,6 +360,7 @@ public class PopWindowUtil {
         if (checkWindowShoing()) {
             return;
         }
+        EfunboxUtil.initDesignSize(context);
         dialog_view = (FrameLayout) LayoutInflater.from(context).inflate(R.layout.popupwindow_registration_events, null);
         dialog_view.setFocusable(true);
         ImageView img = dialog_view.findViewById(R.id.popupwindow_registration_events_img);
@@ -369,6 +388,7 @@ public class PopWindowUtil {
             listener.clickSubmit(null);
             return;
         }
+        EfunboxUtil.initDesignSize(context);
         dialog_view = (FrameLayout) LayoutInflater.from(context).inflate(R.layout.popupwindow_webs_events, null);
         dialog_view.setFocusable(true);
         ImageView img = dialog_view.findViewById(R.id.popupwindow_webs_events_img);
@@ -403,6 +423,7 @@ public class PopWindowUtil {
             mPopupWindow.dismiss();
             return;
         }
+        EfunboxUtil.initDesignSize(context);
         dialog_view = (FrameLayout) LayoutInflater.from(context).inflate(R.layout.popupwindow_mi_sound_qrcode_layout, null);
         dialog_view.setFocusable(true);
         dialog_view.setOnKeyListener(new View.OnKeyListener() {
@@ -455,6 +476,75 @@ public class PopWindowUtil {
     }
 
 
+    /**
+     * 超长图popupwindow
+     */
+    public static void showLongSizeImg(Context context, String url, View parent) {
+        initPresenter();
+        if (checkWindowShoing()) {
+            return;
+        }
+        EfunboxUtil.initDesignSize(context);
+        dialog_view = (FrameLayout) LayoutInflater.from(context).inflate(R.layout.popupwindow_show_rule, null);
+        dialog_view.setFocusable(true);
+        final File[] imgResource = new File[1];
+        SubsamplingScaleImageView imageView = (SubsamplingScaleImageView) dialog_view.findViewById(R.id.imageview);
+        imageView.setMinimumScaleType(SubsamplingScaleImageView.SCALE_TYPE_CUSTOM);
+        imageView.setMinScale(1.0F);
+        //下载图片保存到本地
+        GlideUtils.downloadImage(context, url, new RequestListener<File>() {
+            @Override
+            public boolean onLoadFailed(@Nullable GlideException e, Object model, Target<File> target, boolean isFirstResource) {
+                return false;
+            }
+
+            @Override
+            public boolean onResourceReady(File resource, Object model, Target<File> target, DataSource dataSource, boolean isFirstResource) {
+                imgResource[0] = resource;
+                imageView.setImage(ImageSource.uri(Uri.fromFile(resource)), new ImageViewState(1.0F, new PointF(0, 0), 0));
+//                Uri uri = Uri.fromFile(resource);
+//                imageView.setImage(uri);
+
+                return false;
+            }
+        });
+        ImageView back = dialog_view.findViewById(R.id.popupwindow_show_rule_back);
+        setClickListener(back, o -> {
+            if (imgResource[0] != null) {
+                DataCleanManager.deleteFilesByDirectory(imgResource[0]);
+            }
+            mPopupWindow.dismiss();
+        });
+
+        newPopupWindow(parent, true);
+    }
+
+
+    /**
+     * 排行榜
+     * */
+
+    /**
+     * 超长图popupwindow
+     */
+    public static void showRankListWindow(Context context, ModelBean.ReadUserList bean, View parent) {
+        initPresenter();
+        if (checkWindowShoing()) {
+            return;
+        }
+        EfunboxUtil.initDesignSize(context);
+        dialog_view = (FrameLayout) LayoutInflater.from(context).inflate(R.layout.popupwindow_show_ranklist, null);
+        dialog_view.setFocusable(true);
+        mPresenter.rankListInit(context, dialog_view, bean.getId());
+        ImageView back = dialog_view.findViewById(R.id.popupwindow_ranklist_back);
+        setClickListener(back, o -> {
+            mPopupWindow.dismiss();
+        });
+
+        newPopupWindow(parent, true);
+    }
+
+
     private static void showDeviceInfo(Activity context) {
         StringBuffer buffer = new StringBuffer();
         buffer.append("\tchannel:\t" + "\t" + Consts.getUmengChannel() + "\n");

+ 23 - 7
app/src/main/java/com/edufound/reader/presenter/EventFragmentPresenter.java

@@ -3,17 +3,15 @@ package com.edufound.reader.presenter;
 import com.edufound.reader.adapter.FragmentEventAdapter;
 import com.edufound.reader.apiserver.ActivityEventServerImpl;
 import com.edufound.reader.base.BasePresenter;
-import com.edufound.reader.bean.ActivityEventBean;
-import com.edufound.reader.bean.EventListBean;
 import com.edufound.reader.bean.HttpResultBean;
+import com.edufound.reader.bean.ModelBean;
 import com.edufound.reader.contract.EventFragmentContract;
 import com.edufound.reader.cusview.CusToast;
 import com.edufound.reader.model.EventFragmentModel;
-import com.edufound.reader.util.EfunboxUtil;
+import com.edufound.reader.popwindow.PopWindowUtil;
 import com.google.gson.reflect.TypeToken;
 import com.okhttplib.HttpInfo;
 import com.okhttplib.callback.Callback;
-import com.orhanobut.logger.Logger;
 
 import java.io.IOException;
 import java.util.List;
@@ -26,22 +24,40 @@ public class EventFragmentPresenter extends BasePresenter<EventFragmentContract.
     public EventFragmentPresenter() {
         mModel = new EventFragmentModel();
         mEventImpl = new ActivityEventServerImpl();
+
     }
 
 
     @Override
+    public void attachView(EventFragmentContract.View view) {
+        super.attachView(view);
+
+    }
+
+    @Override
     public void getAllEvent() {
         mEventImpl.getEventListByType(new Callback() {
             @Override
             public void onSuccess(HttpInfo info) throws IOException {
-                HttpResultBean<List<EventListBean>> activityBean = info.getRetDetail(new TypeToken<HttpResultBean<List<EventListBean>>>() {
+                HttpResultBean<List<ModelBean>> activityBean = info.getRetDetail(new TypeToken<HttpResultBean<List<ModelBean>>>() {
                 }.getType());
                 if (activityBean.getSuccess()) {
                     if (activityBean.getData() != null) {
                         //有活动
                         mAdapter = new FragmentEventAdapter(mView.getActivity(), activityBean.getData());
+                        mAdapter.setShowRuleOnClickListener(new FragmentEventAdapter.showRuleOnClickListener() {
+                            @Override
+                            public void showRuleWindow(String url) {
+                                //显示规则
+                                PopWindowUtil.showLongSizeImg(mView.getActivity(), url, mView.getRootView());
+                            }
+
+                            @Override
+                            public void showRankListWindow(ModelBean.ReadUserList bean) {
+                                PopWindowUtil.showRankListWindow(mView.getActivity(), bean, mView.getRootView());
+                            }
+                        });
                         mView.getAllEventSuccess(mAdapter);
-                        return;
                     } else {
                         //没活动
                         CusToast.getInstance(mView.getActivity()).show("获取活动失败", 1000);
@@ -49,7 +65,6 @@ public class EventFragmentPresenter extends BasePresenter<EventFragmentContract.
                 } else {
                     CusToast.getInstance(mView.getActivity()).show("获取活动失败", 1000);
                 }
-                //没活动
             }
 
             @Override
@@ -59,4 +74,5 @@ public class EventFragmentPresenter extends BasePresenter<EventFragmentContract.
             }
         });
     }
+
 }

+ 131 - 113
app/src/main/java/com/edufound/reader/presenter/MainPresenter.java

@@ -22,10 +22,12 @@ import com.edufound.reader.base.BaseActivity;
 import com.edufound.reader.base.BasePresenter;
 import com.edufound.reader.bean.ActivityEventBean;
 import com.edufound.reader.bean.ChannelCodeEnum;
+import com.edufound.reader.bean.ExampleBean;
 import com.edufound.reader.bean.HttpResultBean;
 import com.edufound.reader.bean.SignBean;
 import com.edufound.reader.bean.UserBean;
 import com.edufound.reader.bean.UserEventEnum;
+import com.edufound.reader.bean.UserRecordBean;
 import com.edufound.reader.contract.MainContract;
 import com.edufound.reader.cusview.CusToast;
 import com.edufound.reader.cusview.ModelViewA;
@@ -207,123 +209,139 @@ public class MainPresenter extends BasePresenter<MainContract.View> implements M
 
         if (Consts.isIsDebug()) {
 //            {
-            HorizontalScrollView scrollView = new HorizontalScrollView(mView.getActivity());
-            ViewGroup.LayoutParams params = new ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT);
-            scrollView.setLayoutParams(params);
-            LinearLayout testlayout = new LinearLayout(mView.getActivity());
-            testlayout.setShowDividers(LinearLayout.SHOW_DIVIDER_MIDDLE);
-            testlayout.setDividerDrawable(new ColorDrawable() {
-                @Override
-                public int getIntrinsicWidth() {
-                    return SizeUtils.dp2px(mView.getActivity(), 50);
-                }
-            });
-            testlayout.setOrientation(LinearLayout.HORIZONTAL);
-            TextView tv = new TextView(mView.getActivity());
-            tv.setLayoutParams(new FrameLayout.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT));
-            tv.setTextSize(SizeUtils.px2dp(mView.getActivity(), 30));
-            tv.setTextColor(Color.RED);
-            tv.setBackgroundColor(mView.getActivity().getResources().getColor(R.color.translucent_background));
-            tv.setText("当前在Debug模式下(->application->setIsDebug)");
-            tv.setOnClickListener(new View.OnClickListener() {
-                @Override
-                public void onClick(View view) {
-//                    MMKVUtil.getInstance().clearAll();
-                    EfunboxUtil.toWebFlowerActivity(mView.getActivity(), "http://activity.ai160.com/index.html", null);
-                }
-            });
-            testlayout.addView(tv);
+//                HorizontalScrollView scrollView = new HorizontalScrollView(mView.getActivity());
+//                ViewGroup.LayoutParams params = new ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT);
+//                scrollView.setLayoutParams(params);
+//                LinearLayout testlayout = new LinearLayout(mView.getActivity());
+//                testlayout.setShowDividers(LinearLayout.SHOW_DIVIDER_MIDDLE);
+//                testlayout.setDividerDrawable(new ColorDrawable() {
+//                    @Override
+//                    public int getIntrinsicWidth() {
+//                        return SizeUtils.dp2px(mView.getActivity(), 50);
+//                    }
+//                });
+//                testlayout.setOrientation(LinearLayout.HORIZONTAL);
+//                TextView tv = new TextView(mView.getActivity());
+//                tv.setLayoutParams(new FrameLayout.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT));
+//                tv.setTextSize(SizeUtils.px2dp(mView.getActivity(), 30));
+//                tv.setTextColor(Color.RED);
+//                tv.setBackgroundColor(mView.getActivity().getResources().getColor(R.color.translucent_background));
+//                tv.setText("当前在Debug模式下(->application->setIsDebug)");
+//                tv.setOnClickListener(new View.OnClickListener() {
+//                    @Override
+//                    public void onClick(View view) {
+////                    MMKVUtil.getInstance().clearAll();
+////                        EfunboxUtil.toWebFlowerActivity(mView.getActivity(), "http://activity.ai160.com/index.html", null);
+//                        PopWindowUtil.showRankListWindow(mView.getActivity(), "1", view.getRootView());
+//                    }
+//                });
+//                testlayout.addView(tv);
+////
+////
+//                ModelViewA modelViewA = new ModelViewA(mView.getActivity());
+//                modelViewA.initView();
+//                modelViewA.setView("http://reader-apk.ai160.com/reader-apk/res/character_image.png", new View.OnClickListener() {
+//                    @Override
+//                    public void onClick(View v) {
+//                        CusToast.getInstance(mView.getActivity()).show("test model view A right", 1000);
+//                    }
+//                });
+//                ModelViewWidthA modelViewWidthA = new ModelViewWidthA(mView.getActivity());
+//                modelViewWidthA.initView();
+//                modelViewWidthA.setView("http://reader-apk.ai160.com/reader-apk/res/character_image.png", new View.OnClickListener() {
+//                    @Override
+//                    public void onClick(View v) {
+//                        CusToast.getInstance(mView.getActivity()).show("test model view A right", 1000);
+//                    }
+//                });
 //
+//                ModelViewB modelViewB = new ModelViewB(mView.getActivity());
+//                modelViewB.initView();
+//                modelViewB.setView("", "不知道什么名字", "2020.05.24-2222.22.22", "111", new ModelViewB.OnClickBtnListener() {
+//                    @Override
+//                    public void clickLeft() {
+//                        CusToast.getInstance(mView.getActivity()).show("test model view B left", 1000);
+//                    }
 //
-            ModelViewA modelViewA = new ModelViewA(mView.getActivity());
-            modelViewA.initView();
-            modelViewA.setView("http://reader-apk.ai160.com/reader-apk/res/character_image.png", new View.OnClickListener() {
-                @Override
-                public void onClick(View v) {
-                    CusToast.getInstance(mView.getActivity()).show("test model view A right", 1000);
-                }
-            });
-            ModelViewWidthA modelViewWidthA = new ModelViewWidthA(mView.getActivity());
-            modelViewWidthA.initView();
-            modelViewWidthA.setView("http://reader-apk.ai160.com/reader-apk/res/character_image.png", new View.OnClickListener() {
-                @Override
-                public void onClick(View v) {
-                    CusToast.getInstance(mView.getActivity()).show("test model view A right", 1000);
-                }
-            });
-
-            ModelViewB modelViewB = new ModelViewB(mView.getActivity());
-            modelViewB.initView();
-            modelViewB.setView("", "不知道什么名字", "2020.05.24-2222.22.22", "111", new ModelViewB.OnClickBtnListener() {
-                @Override
-                public void clickLeft() {
-                    CusToast.getInstance(mView.getActivity()).show("test model view B left", 1000);
-                }
-
-                @Override
-                public void clickRight() {
-                    CusToast.getInstance(mView.getActivity()).show("test model view B right", 1000);
-                }
-            });
-
-
-            ModelViewC modelViewC = new ModelViewC(mView.getActivity());
-            //传空有默认图
-            modelViewC.initView("");
-            modelViewC.setItemClickListener(new ModelViewC.onItemClickListener() {
-                @Override
-                public void clickItem(View view, int position) {
-                    CusToast.getInstance(mView.getActivity()).show("test model view C position:" + position, 1000);
-                }
-            });
-
-
-            ModelViewD modelViewD = new ModelViewD(mView.getActivity());
-            List<String> list = new ArrayList<>();
-            for (int i = 0; i < 4; i++) {
-                list.add(i + "");
-            }
-            modelViewD.initView();
-            modelViewD.setView("", list, new ModelViewD.OnClickBtnListener() {
-                @Override
-                public void clickLeft(Object object) {
-                    CusToast.getInstance(mView.getActivity()).show("test model view D 查看规则", 1000);
-                }
-
-
-                @Override
-                public void clickItem(Object object) {
-                    CusToast.getInstance(mView.getActivity()).show("test model view D item:" + String.valueOf(object), 1000);
-                }
-
-
-            });
-
-            ModelViewE modelViewE = new ModelViewE(mView.getActivity());
-            modelViewE.initView("");
-            modelViewE.setItemClickListener(new ModelViewE.onItemClickListener() {
-                @Override
-                public void clickItem(View view, int position) {
-                    CusToast.getInstance(mView.getActivity()).show("test model view E position:" + position, 1000);
-                }
-            });
-
-            ModelViewF modelViewF = new ModelViewF(mView.getActivity());
-            modelViewF.initView();
-            modelViewF.setView("");
-
-
-            testlayout.addView(modelViewA);
-            testlayout.addView(modelViewWidthA);
-            testlayout.addView(modelViewB);
-            testlayout.addView(modelViewC);
-            testlayout.addView(modelViewD);
-            testlayout.addView(modelViewE);
-            testlayout.addView(modelViewF);
-            scrollView.addView(testlayout);
+//                    @Override
+//                    public void clickRight() {
+//                        CusToast.getInstance(mView.getActivity()).show("test model view B right", 1000);
+//                    }
+//                });
+//
+//
+//                ModelViewC modelViewC = new ModelViewC(mView.getActivity());
+//                //传空有默认图
+//                modelViewC.initView();
+//                modelViewC.setItemClickListener(new ModelViewC.onItemClickListener() {
+//                    @Override
+//                    public void clickExample(ExampleBean bean) {
+//                        CusToast.getInstance(mView.getActivity()).show("test model view C position:" + bean.getId(), 1000);
+//                    }
+//
+//                    @Override
+//                    public void clickItem(View view, int position, UserRecordBean bean) {
+//                        CusToast.getInstance(mView.getActivity()).show("test model view C position:" + position, 1000);
+//                    }
+//                });
+//
+//
+//                ModelViewD modelViewD = new ModelViewD(mView.getActivity());
+//                List<String> list = new ArrayList<>();
+//                for (int i = 0; i < 4; i++) {
+//                    list.add(i + "");
+//                }
+//                modelViewD.initView();
+//                modelViewD.setView("", list, new ModelViewD.OnClickBtnListener() {
+//                    @Override
+//                    public void clickLeft(Object object) {
+//                        CusToast.getInstance(mView.getActivity()).show("test model view D 查看规则", 1000);
+//                    }
+//
+//
+//                    @Override
+//                    public void clickItem(Object object) {
+//                        CusToast.getInstance(mView.getActivity()).show("test model view D item:" + String.valueOf(object), 1000);
+//                    }
+//
+//
+//                });
+//
+//                ModelViewE modelViewE = new ModelViewE(mView.getActivity());
+//                modelViewE.initView("");
+//                modelViewE.setItemClickListener(new ModelViewE.onItemClickListener() {
+//                    @Override
+//                    public void clickItem(View view, int position) {
+//                        CusToast.getInstance(mView.getActivity()).show("test model view E position:" + position, 1000);
+//                    }
+//
+//                    @Override
+//                    public void clickExample() {
+//                        CusToast.getInstance(mView.getActivity()).show("test model view E position:查看规则", 1000);
+//                    }
+//
+//                    @Override
+//                    public void clickEnter(ExampleBean bean) {
+//                        CusToast.getInstance(mView.getActivity()).show("test model view E position:参加比赛", 1000);
+//                    }
+//                });
+//
+//                ModelViewF modelViewF = new ModelViewF(mView.getActivity());
+//                modelViewF.initView();
+//                modelViewF.setView("");
 //
-            mView.getRootView().addView(scrollView);
 //
+//                testlayout.addView(modelViewA);
+//                testlayout.addView(modelViewWidthA);
+//                testlayout.addView(modelViewB);
+//                testlayout.addView(modelViewC);
+//                testlayout.addView(modelViewD);
+//                testlayout.addView(modelViewE);
+//                testlayout.addView(modelViewF);
+//                scrollView.addView(testlayout);
+////
+//                mView.getRootView().addView(scrollView);
+////
 //            }
 
         }

+ 0 - 1
app/src/main/java/com/edufound/reader/presenter/MyTabFragmentPresenter.java

@@ -246,7 +246,6 @@ public class MyTabFragmentPresenter extends BasePresenter<MyTabFragmentContract.
             List<UserRecordBean> toList = new ArrayList<>();
             for (int i = 0; i < mDataList.size(); i++) {
                 if (!mDataList.get(i).getUserRead().getStatus().equals("DEL")) {
-                    Logger.e("" + mDataList.get(i).getUserRead().getTitle() + "---" + mDataList.get(i).getUserRead().getStatus());
                     toList.add(mDataList.get(i));
                 }
             }

+ 60 - 0
app/src/main/java/com/edufound/reader/presenter/PopWindowPresneter.java

@@ -24,6 +24,7 @@ import androidx.recyclerview.widget.RecyclerView;
 import com.edufound.reader.R;
 import com.edufound.reader.activity.MainActivity;
 import com.edufound.reader.adapter.PopupMyOrderAdapter;
+import com.edufound.reader.adapter.RankListItemAdapter;
 import com.edufound.reader.apiserver.OrderApiServerImpl;
 import com.edufound.reader.apiserver.UserApiServerImpl;
 import com.edufound.reader.application.EApplication;
@@ -31,6 +32,7 @@ import com.edufound.reader.bean.ChannelCodeEnum;
 import com.edufound.reader.bean.HttpResultBean;
 import com.edufound.reader.bean.MyInfoBean;
 import com.edufound.reader.bean.MyOrderListBean;
+import com.edufound.reader.bean.RankListBean;
 import com.edufound.reader.bean.RecordResultBean;
 import com.edufound.reader.bean.SignBean;
 import com.edufound.reader.bean.UserBean;
@@ -59,6 +61,7 @@ import com.orhanobut.logger.Logger;
 import org.json.JSONObject;
 
 import java.io.IOException;
+import java.util.ArrayList;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
@@ -409,6 +412,63 @@ public class PopWindowPresneter {
     }
 
 
+    /**
+     * 排行榜
+     */
+    public void rankListInit(Context context, View dialog_view, String id) {
+        Logger.e("id:" + id);
+        //请求排行榜接口
+        userApi.getRankList(id, new Callback() {
+            @Override
+            public void onSuccess(HttpInfo info) throws IOException {
+                HttpResultBean<RankListBean> bean = info.getRetDetail(new TypeToken<HttpResultBean<RankListBean>>() {
+                }.getType());
+                //设置数据
+                if (bean.getData().getActivityUserReadList() != null && bean.getData().getActivityUserReadList().size() > 0) {
+                    RankListItemAdapter adapter = new RankListItemAdapter(context, bean.getData().getActivityUserReadList());
+                    LinearLayoutManager linearLayoutManager = new LinearLayoutManager(context);
+                    RecyclerView recyclerView = dialog_view.findViewById(R.id.popupwindow_ranklist_recyclerview);
+                    recyclerView.setLayoutManager(linearLayoutManager);
+                    recyclerView.setAdapter(adapter);
+                    FrameLayout myInfoLayout = dialog_view.findViewById(R.id.popupwindow_ranklist_myinfo_layout);
+                    if (bean.getData().getMyRank() == null) {
+                        myInfoLayout.setVisibility(View.GONE);
+                    } else {
+                        TextView myNum = dialog_view.findViewById(R.id.popupwindow_show_ranklist_my_num);
+                        TextView myName = dialog_view.findViewById(R.id.popupwindow_show_ranklist_my_name);
+                        TextView myThumb = dialog_view.findViewById(R.id.popupwindow_show_ranklist_my_thumb);
+                        TextView myCollection = dialog_view.findViewById(R.id.popupwindow_show_ranklist_my_collection);
+                        TextView myScore = dialog_view.findViewById(R.id.popupwindow_show_ranklist_my_score);
+                        myName.setText("我自己");
+                        myThumb.setText(bean.getData().getMyRank().getLikeAmount());
+                        myCollection.setText(bean.getData().getMyRank().getFavoritesAmount());
+                        myScore.setText(bean.getData().getMyRank().getScore());
+                        adapter.setCallBack(new RankListItemAdapter.CallbackUserNum() {
+                            @Override
+                            public void CallBack(int number) {
+                                Logger.e("找到自己了:" + number);
+                                myNum.setText((number + 1) + "");
+                            }
+                        });
+                    }
+                } else {
+                    LinearLayout recyParent = dialog_view.findViewById(R.id.popupwindow_ranklist_recyclerview_layout);
+                    recyParent.setVisibility(View.GONE);
+                    ImageView noList = dialog_view.findViewById(R.id.popupwindow_ranklist_recyclerview_layout_nolist);
+                    noList.setVisibility(View.VISIBLE);
+                }
+            }
+
+            @Override
+            public void onFailure(HttpInfo info) throws IOException {
+
+            }
+        });
+
+
+    }
+
+
     boolean loginSuccess = false;
     MISoundLoginCallBack miSoundLoginCallback;
     int mVCodeCount = 60;

+ 2 - 2
app/src/main/java/com/edufound/reader/presenter/WebPresenter.java

@@ -54,8 +54,8 @@ public class WebPresenter extends BasePresenter<WebContract.View> implements Web
 
     @Override
     public WebView initWebView(Intent intent) {
-        WebView webview = new WebView(Consts.getmApplicAtion());
-//        WebView webview = new WebView(mView.getActivity());
+//        WebView webview = new WebView(Consts.getmApplicAtion());
+        WebView webview = new WebView(mView.getActivity());
         webview.setLayoutParams(new FrameLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT));
         if (Build.VERSION.SDK_INT >= 19) {
             webview.getSettings().setLoadsImagesAutomatically(true);

+ 1 - 1
app/src/main/java/com/edufound/reader/util/DataCleanManager.java

@@ -101,7 +101,7 @@ public class DataCleanManager {
      *
      * @param directory
      */
-    private static void deleteFilesByDirectory(File directory) {
+    public static void deleteFilesByDirectory(File directory) {
         if (directory != null && directory.exists() && directory.isDirectory()) {
             for (File item : directory.listFiles()) {
                 item.delete();

+ 2 - 2
app/src/main/java/com/edufound/reader/util/GlideUtils.java

@@ -211,7 +211,7 @@ public class GlideUtils {
         RequestOptions options = RequestOptions.bitmapTransform(
                         new MultiTransformation<>(
                                 new CenterCrop(),
-                                new RoundedCornersTransformation(SizeUtils.px2dp(context, radius), 0,
+                                new RoundedCornersTransformation((int) radius, 0,
                                         RoundedCornersTransformation.CornerType.ALL)
                         ))
                 .placeholder(placeholderImage) //占位图
@@ -356,7 +356,7 @@ public class GlideUtils {
      * @param url             下载链接
      * @param requestListener 下载监听
      */
-    public void downloadImage(final Context context, final String url, RequestListener<File> requestListener) {
+    public static void downloadImage(final Context context, final String url, RequestListener<File> requestListener) {
         Glide.with(context)
                 .downloadOnly()
                 .load(url)

BIN
app/src/main/res/drawable/btn_blue_bg.png


BIN
app/src/main/res/drawable/btn_green_bg.png


BIN
app/src/main/res/drawable/popupwindow_ranklist_bg.png


BIN
app/src/main/res/drawable/popupwindow_ranklist_window_bg.png


BIN
app/src/main/res/drawable/ranklist_my_bg.png


BIN
app/src/main/res/drawable/ranklist_no_list.png


+ 4 - 2
app/src/main/res/layout/activity_userinfo_setting.xml

@@ -5,6 +5,7 @@
     xmlns:tools="http://schemas.android.com/tools"
     android:layout_width="match_parent"
     android:layout_height="match_parent"
+    android:layout_gravity="center"
     android:clickable="true"
     android:focusableInTouchMode="true">
 
@@ -27,6 +28,7 @@
         android:layout_height="720dp"
         android:clickable="true"
         android:focusableInTouchMode="true"
+        android:gravity="center"
         android:orientation="vertical"
         app:layout_constraintBottom_toBottomOf="parent"
         app:layout_constraintDimensionRatio="h,16:9"
@@ -281,9 +283,9 @@
 
                                 <ImageView
                                     android:layout_width="100dp"
-                                    android:scaleY="0.9"
-                                    android:scaleX="0.9"
                                     android:layout_height="100dp"
+                                    android:scaleX="0.9"
+                                    android:scaleY="0.9"
                                     android:src="@drawable/bind_phone_num"></ImageView>
 
                                 <TextView

+ 1 - 0
app/src/main/res/layout/adapter_item_cusview_model_view_c.xml

@@ -24,6 +24,7 @@
         android:layout_width="200dp"
         android:layout_height="25dp"
         android:gravity="center|left"
+        android:maxLength="14"
         android:text="昵称"
         android:textColor="#333333"
         android:textSize="20dp"

+ 110 - 0
app/src/main/res/layout/adapter_item_cusview_model_view_g.xml

@@ -0,0 +1,110 @@
+<?xml version="1.0" encoding="utf-8"?>
+<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:app="http://schemas.android.com/apk/res-auto"
+    android:layout_width="404dp"
+    android:layout_height="168dp"
+    android:layout_gravity="center">
+
+    <com.edufound.reader.cusview.RoundFrameLayout
+        android:layout_width="match_parent"
+        android:layout_height="match_parent"
+        android:background="@color/white"
+        app:radio="20"></com.edufound.reader.cusview.RoundFrameLayout>
+
+    <ImageView
+        android:id="@+id/cusview_model_view_g_layout_item_icon"
+        android:layout_width="153dp"
+        android:layout_height="123dp"
+        android:layout_marginStart="8dp"
+        android:scaleType="fitXY"
+        app:layout_constraintBottom_toBottomOf="parent"
+        app:layout_constraintStart_toStartOf="parent"
+        app:layout_constraintTop_toTopOf="parent"
+        app:layout_constraintVertical_bias="0.45999998"></ImageView>
+
+    <TextView
+        android:id="@+id/cusview_model_view_g_layout_item_name"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:layout_marginStart="15dp"
+        android:text="春夏秋冬"
+        android:textColor="#314051"
+        android:textSize="18dp"
+        app:layout_constraintBottom_toBottomOf="@+id/cusview_model_view_g_layout_item_icon"
+        app:layout_constraintStart_toEndOf="@+id/cusview_model_view_g_layout_item_icon"
+        app:layout_constraintTop_toTopOf="@+id/cusview_model_view_g_layout_item_icon"
+        app:layout_constraintVertical_bias="0.0"></TextView>
+
+    <TextView
+        android:id="@+id/cusview_model_view_g_layout_item_enter_num"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:layout_marginStart="15dp"
+        android:text="248587"
+        android:textColor="#77CE6A"
+        android:textSize="18dp"
+        app:layout_constraintBottom_toBottomOf="@+id/cusview_model_view_g_layout_item_icon"
+        app:layout_constraintStart_toEndOf="@+id/cusview_model_view_g_layout_item_icon"
+        app:layout_constraintTop_toTopOf="@+id/cusview_model_view_g_layout_item_icon"
+        app:layout_constraintVertical_bias="0.47000003"></TextView>
+
+    <TextView
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:text="参与"
+        android:textColor="#999999"
+        android:textSize="18dp"
+        app:layout_constraintBottom_toBottomOf="@+id/cusview_model_view_g_layout_item_enter_num"
+        app:layout_constraintStart_toEndOf="@+id/cusview_model_view_g_layout_item_enter_num"
+        app:layout_constraintTop_toTopOf="@+id/cusview_model_view_g_layout_item_enter_num"
+        app:layout_constraintVertical_bias="0.87"></TextView>
+
+
+    <FrameLayout
+        android:id="@+id/cusview_model_view_g_layout_item_ranklist"
+        android:layout_width="96dp"
+        android:layout_height="25dp"
+        android:background="@drawable/btn_blue_bg"
+        app:layout_constraintBottom_toBottomOf="@+id/cusview_model_view_g_layout_item_icon"
+        app:layout_constraintEnd_toEndOf="parent"
+        app:layout_constraintHorizontal_bias="0.0"
+        app:layout_constraintStart_toStartOf="@+id/cusview_model_view_g_layout_item_enter_num"
+        app:layout_constraintTop_toBottomOf="@+id/cusview_model_view_g_layout_item_enter_num"
+        app:layout_constraintVertical_bias="1.0">
+
+        <TextView
+            android:layout_width="match_parent"
+            android:layout_height="wrap_content"
+            android:layout_gravity="center"
+            android:gravity="center"
+            android:text="查看排行榜"
+            android:textColor="#FFFFFF"
+            android:textSize="15dp"></TextView>
+
+    </FrameLayout>
+
+
+    <FrameLayout
+        android:id="@+id/cusview_model_view_g_layout_item_enter_btn"
+        android:layout_width="96dp"
+        android:layout_height="25dp"
+        android:background="@drawable/btn_green_bg"
+        app:layout_constraintBottom_toBottomOf="@+id/cusview_model_view_g_layout_item_icon"
+        app:layout_constraintEnd_toEndOf="parent"
+        app:layout_constraintHorizontal_bias="0.45"
+        app:layout_constraintStart_toEndOf="@+id/cusview_model_view_g_layout_item_ranklist"
+        app:layout_constraintTop_toBottomOf="@+id/cusview_model_view_g_layout_item_enter_num"
+        app:layout_constraintVertical_bias="1.0">
+
+        <TextView
+            android:layout_width="match_parent"
+            android:layout_height="wrap_content"
+            android:layout_gravity="center"
+            android:gravity="center"
+            android:text="立即参赛"
+            android:textColor="#FFFFFF"
+            android:textSize="15dp"></TextView>
+
+    </FrameLayout>
+
+</androidx.constraintlayout.widget.ConstraintLayout>

+ 92 - 0
app/src/main/res/layout/adapter_item_popupwindow_ranklist.xml

@@ -0,0 +1,92 @@
+<?xml version="1.0" encoding="utf-8"?>
+<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
+    android:layout_width="match_parent"
+    android:layout_height="63dp"
+    android:layout_gravity="center">
+
+    <LinearLayout
+        android:layout_width="match_parent"
+        android:layout_height="63dp"
+        android:layout_gravity="center"
+        android:gravity="center"
+        android:orientation="horizontal"
+        android:paddingLeft="10dp">
+
+
+        <FrameLayout
+            android:layout_width="0dp"
+            android:layout_height="match_parent"
+            android:layout_weight="1">
+
+            <ImageView
+                android:id="@+id/adapter_item_ranklist_number_img"
+                android:layout_width="36dp"
+                android:layout_height="36dp"
+                android:layout_gravity="center"
+                android:src="@drawable/ranklist_one"
+                android:visibility="gone"></ImageView>
+
+            <TextView
+                android:id="@+id/adapter_item_ranklist_number"
+                android:layout_width="wrap_content"
+                android:layout_height="36dp"
+                android:layout_gravity="center"
+                android:text="1"
+                android:textColor="#333333"
+                android:textSize="22dp"></TextView>
+        </FrameLayout>
+
+
+        <Space
+            android:layout_width="0dp"
+            android:layout_height="match_parent"
+            android:layout_weight="0.9"></Space>
+
+        <TextView
+            android:id="@+id/adapter_item_ranklist_name"
+            android:layout_width="0dp"
+            android:layout_height="match_parent"
+            android:layout_weight="3"
+            android:gravity="center|left"
+            android:text="昵称"
+            android:textColor="#333333"
+            android:textSize="22dp"></TextView>
+
+
+        <TextView
+            android:id="@+id/adapter_item_ranklist_thumb"
+            android:layout_width="0dp"
+            android:layout_height="match_parent"
+            android:layout_weight="1"
+            android:gravity="center"
+            android:text="点赞"
+            android:textColor="#333333"
+            android:textSize="22dp"></TextView>
+
+        <TextView
+            android:id="@+id/adapter_item_ranklist_collection"
+            android:layout_width="0dp"
+            android:layout_height="match_parent"
+            android:layout_weight="1"
+            android:gravity="center"
+            android:text="收藏"
+            android:textColor="#333333"
+            android:textSize="22dp"></TextView>
+
+        <TextView
+            android:id="@+id/adapter_item_ranklist_score"
+            android:layout_width="0dp"
+            android:layout_height="match_parent"
+            android:layout_weight="1"
+            android:gravity="center"
+            android:text="成绩"
+            android:textColor="#333333"
+            android:textSize="22dp"></TextView>
+
+        <Space
+            android:layout_width="0dp"
+            android:layout_height="match_parent"
+            android:layout_weight="0.5"></Space>
+
+    </LinearLayout>
+</FrameLayout>

+ 2 - 1
app/src/main/res/layout/cusview_model_view_c.xml

@@ -36,7 +36,7 @@
             android:layout_width="94dp"
             android:layout_height="76dp"
             android:layout_marginStart="13dp"
-            android:background="@color/red"
+            android:scaleType="fitXY"
             app:layout_constraintBottom_toBottomOf="parent"
             app:layout_constraintEnd_toEndOf="parent"
             app:layout_constraintHorizontal_bias="0.0"
@@ -47,6 +47,7 @@
             android:id="@+id/model_view_c_name"
             android:layout_width="wrap_content"
             android:layout_height="wrap_content"
+            android:maxLength="13"
             android:text="春夏秋冬"
             android:textSize="26dp"
             app:layout_constraintBottom_toBottomOf="parent"

+ 14 - 6
app/src/main/res/layout/cusview_model_view_e.xml

@@ -36,7 +36,6 @@
             android:layout_width="94dp"
             android:layout_height="76dp"
             android:layout_marginStart="13dp"
-            android:background="@color/red"
             app:layout_constraintBottom_toBottomOf="parent"
             app:layout_constraintEnd_toEndOf="parent"
             app:layout_constraintHorizontal_bias="0.0"
@@ -47,6 +46,7 @@
             android:id="@+id/cusview_model_view_e_name"
             android:layout_width="wrap_content"
             android:layout_height="wrap_content"
+            android:maxLength="6"
             android:text="春夏秋冬"
             android:textSize="26dp"
             app:layout_constraintBottom_toBottomOf="parent"
@@ -56,17 +56,16 @@
             app:layout_constraintTop_toTopOf="parent"
             app:layout_constraintVertical_bias="0.19"></TextView>
 
-        <com.edufound.reader.cusview.RoundFrameLayout
+        <FrameLayout
             android:id="@+id/cusview_model_view_e_enter_match"
             android:layout_width="111dp"
             android:layout_height="31dp"
-            android:background="#32C965"
+            android:background="@drawable/btn_green_bg"
             app:layout_constraintBottom_toBottomOf="@+id/cusview_model_view_e_name"
             app:layout_constraintEnd_toEndOf="parent"
             app:layout_constraintHorizontal_bias="0.62"
             app:layout_constraintStart_toEndOf="@+id/cusview_model_view_e_name"
-            app:layout_constraintTop_toTopOf="@+id/cusview_model_view_e_name"
-            app:radio="30">
+            app:layout_constraintTop_toTopOf="@+id/cusview_model_view_e_name">
 
             <TextView
                 android:layout_width="match_parent"
@@ -75,7 +74,7 @@
                 android:text="立即参赛"
                 android:textColor="#FFFFFF"
                 android:textSize="17dp"></TextView>
-        </com.edufound.reader.cusview.RoundFrameLayout>
+        </FrameLayout>
 
 
         <LinearLayout
@@ -196,5 +195,14 @@
             android:layout_height="match_parent"
             android:paddingBottom="5dp"></androidx.recyclerview.widget.RecyclerView>
 
+        <ImageView
+            android:id="@+id/cusview_model_view_e_noranklist"
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:layout_gravity="center"
+            android:scaleX="0.6"
+            android:scaleY="0.6"
+            android:src="@drawable/ranklist_no_list"></ImageView>
+
     </FrameLayout>
 </androidx.constraintlayout.widget.ConstraintLayout>

+ 40 - 0
app/src/main/res/layout/cusview_model_view_g.xml

@@ -0,0 +1,40 @@
+<?xml version="1.0" encoding="utf-8"?>
+<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:app="http://schemas.android.com/apk/res-auto"
+    android:layout_width="428dp"
+    android:layout_height="598dp"
+    android:layout_gravity="center">
+
+    <ImageView
+        android:id="@+id/cusview_model_view_g_background"
+        android:layout_width="match_parent"
+        android:layout_height="match_parent"></ImageView>
+
+    <LinearLayout
+        android:layout_width="match_parent"
+        android:layout_height="match_parent"
+        android:orientation="vertical">
+
+        <FrameLayout
+            android:id="@+id/cusview_model_view_g_rule"
+            android:layout_width="match_parent"
+            android:layout_height="0dp"
+            android:layout_weight="1"></FrameLayout>
+
+        <LinearLayout
+            android:id="@+id/cusview_model_view_g_item_layout"
+            android:layout_width="match_parent"
+            android:layout_height="0dp"
+            android:layout_gravity="center"
+            android:layout_weight="4"
+            android:gravity="center|top"
+            android:orientation="vertical"
+            android:paddingLeft="10dp"
+            android:paddingTop="50dp"
+            android:paddingRight="10dp"
+            android:paddingBottom="40dp">
+
+
+        </LinearLayout>
+    </LinearLayout>
+</FrameLayout>

+ 246 - 0
app/src/main/res/layout/popupwindow_show_ranklist.xml

@@ -0,0 +1,246 @@
+<?xml version="1.0" encoding="utf-8"?>
+<FrameLayout 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"
+    android:layout_width="match_parent"
+    android:layout_height="match_parent">
+
+
+    <androidx.constraintlayout.widget.ConstraintLayout
+        android:layout_width="match_parent"
+        android:layout_height="match_parent">
+
+
+        <FrameLayout
+            android:id="@+id/background"
+            android:layout_width="match_parent"
+            android:layout_height="match_parent"
+            android:background="@drawable/popupwindow_ranklist_window_bg"
+            app:layout_constraintBottom_toBottomOf="parent"
+            app:layout_constraintEnd_toEndOf="parent"
+            app:layout_constraintStart_toStartOf="parent"
+            app:layout_constraintTop_toTopOf="parent"></FrameLayout>
+
+
+        <FrameLayout
+            android:layout_width="1280dp"
+            android:layout_height="720dp"
+            android:gravity="center"
+            android:orientation="vertical"
+            app:layout_constraintBottom_toBottomOf="parent"
+            app:layout_constraintDimensionRatio="h,16:9"
+            app:layout_constraintEnd_toEndOf="parent"
+            app:layout_constraintStart_toStartOf="parent"
+            app:layout_constraintTop_toTopOf="parent">
+
+            <androidx.constraintlayout.widget.ConstraintLayout
+                android:layout_width="953dp"
+                android:layout_height="592dp"
+                android:layout_gravity="center"
+                android:layout_marginTop="30dp"
+                android:background="@drawable/popupwindow_ranklist_bg">
+
+
+                <LinearLayout
+                    android:layout_width="860dp"
+                    android:layout_height="37dp"
+                    android:orientation="horizontal"
+                    app:layout_constraintBottom_toTopOf="@+id/roundFrameLayout"
+                    app:layout_constraintEnd_toEndOf="parent"
+                    app:layout_constraintStart_toStartOf="parent"
+                    app:layout_constraintTop_toTopOf="parent">
+
+                    <TextView
+                        android:layout_width="0dp"
+                        android:layout_height="wrap_content"
+                        android:layout_weight="2"
+                        android:paddingLeft="30dp"
+                        android:text="排名"
+                        android:textColor="#8D4C05"
+                        android:textSize="26dp"></TextView>
+
+                    <TextView
+                        android:layout_width="0dp"
+                        android:layout_height="wrap_content"
+                        android:layout_weight="3"
+                        android:text="昵称"
+                        android:textColor="#8D4C05"
+                        android:textSize="26dp"></TextView>
+
+                    <TextView
+                        android:layout_width="0dp"
+                        android:layout_height="wrap_content"
+                        android:layout_weight="1"
+                        android:gravity="center"
+                        android:text="点赞"
+                        android:textColor="#8D4C05"
+                        android:textSize="26dp"></TextView>
+
+                    <TextView
+                        android:layout_width="0dp"
+                        android:layout_height="wrap_content"
+                        android:layout_weight="1"
+                        android:gravity="center"
+                        android:text="收藏"
+                        android:textColor="#8D4C05"
+                        android:textSize="26dp"></TextView>
+
+
+                    <TextView
+                        android:layout_width="0dp"
+                        android:layout_height="wrap_content"
+                        android:layout_weight="1"
+                        android:gravity="center"
+                        android:text="成绩"
+                        android:textColor="#8D4C05"
+                        android:textSize="26dp"></TextView>
+
+                    <Space
+                        android:layout_width="0dp"
+                        android:layout_height="match_parent"
+                        android:layout_weight="0.5"></Space>
+
+                </LinearLayout>
+
+                <com.edufound.reader.cusview.RoundFrameLayout
+                    android:id="@+id/roundFrameLayout"
+                    android:layout_width="860dp"
+                    android:layout_height="480dp"
+                    android:layout_gravity="center"
+                    android:layout_marginTop="24dp"
+                    app:layout_constraintBottom_toBottomOf="parent"
+                    app:layout_constraintEnd_toEndOf="parent"
+                    app:layout_constraintHorizontal_bias="0.47"
+                    app:layout_constraintStart_toStartOf="parent"
+                    app:layout_constraintTop_toTopOf="parent">
+
+
+                    <LinearLayout
+                        android:id="@+id/popupwindow_ranklist_recyclerview_layout"
+                        android:layout_width="match_parent"
+                        android:layout_height="match_parent"
+                        android:orientation="vertical">
+
+                        <androidx.recyclerview.widget.RecyclerView
+                            android:id="@+id/popupwindow_ranklist_recyclerview"
+                            android:layout_width="match_parent"
+                            android:layout_height="0dp"
+                            android:layout_weight="9"
+                            android:orientation="vertical"></androidx.recyclerview.widget.RecyclerView>
+
+                        <FrameLayout
+                            android:id="@+id/popupwindow_ranklist_myinfo_layout"
+                            android:layout_width="match_parent"
+                            android:layout_height="0dp"
+                            android:layout_weight="1.5"
+                            android:background="@drawable/ranklist_my_bg">
+
+                            <LinearLayout
+                                android:layout_width="match_parent"
+                                android:layout_height="63dp"
+                                android:layout_gravity="center"
+                                android:gravity="center"
+                                android:orientation="horizontal"
+                                android:paddingLeft="10dp">
+
+
+                                <FrameLayout
+                                    android:layout_width="0dp"
+                                    android:layout_height="match_parent"
+                                    android:layout_weight="1">
+
+
+                                    <TextView
+                                        android:id="@+id/popupwindow_show_ranklist_my_num"
+                                        android:layout_width="wrap_content"
+                                        android:layout_height="36dp"
+                                        android:layout_gravity="center"
+                                        android:text="1"
+                                        android:textColor="#333333"
+                                        android:textSize="22dp"></TextView>
+                                </FrameLayout>
+
+
+                                <Space
+                                    android:layout_width="0dp"
+                                    android:layout_height="match_parent"
+                                    android:layout_weight="0.9"></Space>
+
+                                <TextView
+                                    android:id="@+id/popupwindow_show_ranklist_my_name"
+                                    android:layout_width="0dp"
+                                    android:layout_height="match_parent"
+                                    android:layout_weight="3"
+                                    android:gravity="center|left"
+                                    android:text="昵称"
+                                    android:textColor="#333333"
+                                    android:textSize="22dp"></TextView>
+
+
+                                <TextView
+                                    android:id="@+id/popupwindow_show_ranklist_my_thumb"
+                                    android:layout_width="0dp"
+                                    android:layout_height="match_parent"
+                                    android:layout_weight="1"
+                                    android:gravity="center"
+                                    android:text="点赞"
+                                    android:textColor="#333333"
+                                    android:textSize="22dp"></TextView>
+
+                                <TextView
+                                    android:id="@+id/popupwindow_show_ranklist_my_collection"
+                                    android:layout_width="0dp"
+                                    android:layout_height="match_parent"
+                                    android:layout_weight="1"
+                                    android:gravity="center"
+                                    android:text="收藏"
+                                    android:textColor="#333333"
+                                    android:textSize="22dp"></TextView>
+
+                                <TextView
+                                    android:id="@+id/popupwindow_show_ranklist_my_score"
+                                    android:layout_width="0dp"
+                                    android:layout_height="match_parent"
+                                    android:layout_weight="1"
+                                    android:gravity="center"
+                                    android:text="成绩"
+                                    android:textColor="#333333"
+                                    android:textSize="22dp"></TextView>
+
+                                <Space
+                                    android:layout_width="0dp"
+                                    android:layout_height="match_parent"
+                                    android:layout_weight="0.5"></Space>
+
+                            </LinearLayout>
+
+                        </FrameLayout>
+                    </LinearLayout>
+
+
+                    <ImageView
+                        android:id="@+id/popupwindow_ranklist_recyclerview_layout_nolist"
+                        android:layout_width="wrap_content"
+                        android:layout_height="wrap_content"
+                        android:layout_gravity="center"
+                        android:src="@drawable/ranklist_no_list"
+                        android:visibility="gone"></ImageView>
+                </com.edufound.reader.cusview.RoundFrameLayout>
+
+            </androidx.constraintlayout.widget.ConstraintLayout>
+
+
+        </FrameLayout>
+
+        <ImageView
+            android:id="@+id/popupwindow_ranklist_back"
+            android:layout_width="77dp"
+            android:layout_height="77dp"
+            android:layout_marginLeft="32dp"
+            android:layout_marginTop="24dp"
+            android:src="@drawable/main_back"
+            app:layout_constraintStart_toStartOf="parent"
+            app:layout_constraintTop_toTopOf="@+id/background"></ImageView>
+
+    </androidx.constraintlayout.widget.ConstraintLayout>
+</FrameLayout>

+ 22 - 0
app/src/main/res/layout/popupwindow_show_rule.xml

@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="utf-8"?>
+<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
+    android:layout_width="match_parent"
+    android:layout_height="match_parent">
+
+
+    <com.davemorrissey.labs.subscaleview.SubsamplingScaleImageView
+        android:id="@+id/imageview"
+        android:layout_width="match_parent"
+        android:layout_height="match_parent"
+        android:background="@color/translucent_background" />
+
+    <ImageView
+        android:id="@+id/popupwindow_show_rule_back"
+        android:layout_width="77dp"
+        android:layout_height="77dp"
+        android:layout_marginLeft="32dp"
+        android:layout_marginTop="20dp"
+        android:src="@drawable/main_back"></ImageView>
+
+
+</FrameLayout>