瀏覽代碼

1.首页左侧tab(选中效果)
2.推荐Fragment编写
3.适配问题

FailedToRead 3 年之前
父節點
當前提交
7089922504
共有 54 個文件被更改,包括 962 次插入284 次删除
  1. 10 2
      .idea/misc.xml
  2. 4 0
      app/build.gradle
  3. 二進制
      app/src/fragmentRecommend/drawable/fragment_recommend_bg.png
  4. 二進制
      app/src/fragmentRecommend/drawable/fragment_recommend_collection.png
  5. 二進制
      app/src/fragmentRecommend/drawable/fragment_recommend_comment.9.png
  6. 二進制
      app/src/fragmentRecommend/drawable/fragment_recommend_next.png
  7. 20 0
      app/src/fragmentRecommend/drawable/fragment_recommend_rv_round.xml
  8. 二進制
      app/src/fragmentRecommend/drawable/fragment_recommend_thumbs_up.9.png
  9. 二進制
      app/src/fragmentRecommend/drawable/fragment_recommend_up.png
  10. 二進制
      app/src/fragmentRecommend/drawable/fragment_recommend_userhead.png
  11. 二進制
      app/src/fragmentRecommend/drawable/fragment_recommend_userhead_bg.png
  12. 二進制
      app/src/fragmentRecommend/drawable/plus.png
  13. 二進制
      app/src/fragmentRecommend/drawable/to_record.png
  14. 255 0
      app/src/fragmentRecommend/layout/fragment_main_recommend.xml
  15. 4 3
      app/src/main/AndroidManifest.xml
  16. 33 11
      app/src/main/java/com/edufound/reader/activity/CrashDialogActivity.java
  17. 21 37
      app/src/main/java/com/edufound/reader/activity/MainActivity.java
  18. 1 0
      app/src/main/java/com/edufound/reader/adapter/SlideVideoAdapter.java
  19. 1 0
      app/src/main/java/com/edufound/reader/application/EApplication.java
  20. 12 0
      app/src/main/java/com/edufound/reader/base/BaseActivity.java
  21. 42 0
      app/src/main/java/com/edufound/reader/base/BaseFragment.java
  22. 1 0
      app/src/main/java/com/edufound/reader/base/BaseMvpFragment.java
  23. 9 0
      app/src/main/java/com/edufound/reader/base/BasePresenter.java
  24. 10 0
      app/src/main/java/com/edufound/reader/contract/CrashDialogContract.java
  25. 3 6
      app/src/main/java/com/edufound/reader/contract/MainContract.java
  26. 19 0
      app/src/main/java/com/edufound/reader/contract/RecommendFragmentContract.java
  27. 7 1
      app/src/main/java/com/edufound/reader/cusview/RvListJzvdStd.java
  28. 62 0
      app/src/main/java/com/edufound/reader/fragment/RecommendFragment.java
  29. 6 0
      app/src/main/java/com/edufound/reader/model/RecommendFragmentModel.java
  30. 75 0
      app/src/main/java/com/edufound/reader/presenter/CrashDialogPresenter.java
  31. 34 193
      app/src/main/java/com/edufound/reader/presenter/MainPresenter.java
  32. 183 0
      app/src/main/java/com/edufound/reader/presenter/RecommendFragmentPresenter.java
  33. 3 2
      app/src/main/java/com/edufound/reader/util/EfunboxUtil.java
  34. 0 1
      app/src/main/java/com/edufound/reader/util/HttpInterceptor.java
  35. 2 0
      app/src/main/java/com/edufound/reader/videoutil/ViewPagerLayoutManager.java
  36. 二進制
      app/src/main/res/drawable/main_background.jpg
  37. 二進制
      app/src/main/res/drawable/main_left_tab_bg.png
  38. 7 0
      app/src/main/res/drawable/main_left_tab_character_selector.xml
  39. 8 0
      app/src/main/res/drawable/main_left_tab_divider.xml
  40. 7 0
      app/src/main/res/drawable/main_left_tab_follow_selector.xml
  41. 二進制
      app/src/main/res/drawable/main_left_tab_layout_character.png
  42. 二進制
      app/src/main/res/drawable/main_left_tab_layout_character_s.png
  43. 二進制
      app/src/main/res/drawable/main_left_tab_layout_follow.png
  44. 二進制
      app/src/main/res/drawable/main_left_tab_layout_follow_s.png
  45. 二進制
      app/src/main/res/drawable/main_left_tab_layout_recommend.png
  46. 二進制
      app/src/main/res/drawable/main_left_tab_layout_recommend_s.png
  47. 7 0
      app/src/main/res/drawable/main_left_tab_myinfo_selector.xml
  48. 7 0
      app/src/main/res/drawable/main_left_tab_recommend_selector.xml
  49. 二進制
      app/src/main/res/drawable/main_tab_layout_myinfo.png
  50. 二進制
      app/src/main/res/drawable/main_tab_layout_myinfo_s.png
  51. 32 1
      app/src/main/res/layout/activity_crash_dialog.xml
  52. 72 24
      app/src/main/res/layout/activity_main.xml
  53. 4 2
      app/src/main/res/layout/cusjzplayer_controller.xml
  54. 1 1
      gradle.properties

+ 10 - 2
.idea/misc.xml

@@ -3,14 +3,22 @@
   <component name="DesignSurface">
     <option name="filePathToZoomLevelMap">
       <map>
+        <entry key="..\:/WorkSpace/Git_WorkSpace/efunboxReader-android/efunboxReader-android-master/app/src/fragmentRecommend/drawable/fragment_recommend_rv_round.xml" value="0.32421875" />
+        <entry key="..\:/WorkSpace/Git_WorkSpace/efunboxReader-android/efunboxReader-android-master/app/src/fragmentRecommend/layout/fragment_main_recommend.xml" value="0.2" />
         <entry key="..\:/WorkSpace/Git_WorkSpace/efunboxReader-android/efunboxReader-android-master/app/src/main/res/drawable/cusjzplayer_controller_seekbar.xml" value="0.2713541666666667" />
+        <entry key="..\:/WorkSpace/Git_WorkSpace/efunboxReader-android/efunboxReader-android-master/app/src/main/res/drawable/main_left_tab_character_selector.xml" value="0.32421875" />
+        <entry key="..\:/WorkSpace/Git_WorkSpace/efunboxReader-android/efunboxReader-android-master/app/src/main/res/drawable/main_left_tab_divider.xml" value="0.4" />
+        <entry key="..\:/WorkSpace/Git_WorkSpace/efunboxReader-android/efunboxReader-android-master/app/src/main/res/drawable/main_left_tab_myInfo_selected.xml" value="0.32421875" />
+        <entry key="..\:/WorkSpace/Git_WorkSpace/efunboxReader-android/efunboxReader-android-master/app/src/main/res/drawable/main_left_tab_myinfo_selected.xml" value="0.32421875" />
+        <entry key="..\:/WorkSpace/Git_WorkSpace/efunboxReader-android/efunboxReader-android-master/app/src/main/res/drawable/main_left_tab_recommend_selector.xml" value="0.32421875" />
         <entry key="..\:/WorkSpace/Git_WorkSpace/efunboxReader-android/efunboxReader-android-master/app/src/main/res/drawable/player_seekbar_list.xml" value="0.2713541666666667" />
         <entry key="..\:/WorkSpace/Git_WorkSpace/efunboxReader-android/efunboxReader-android-master/app/src/main/res/layout/activity_crash_dialog.xml" value="0.2" />
-        <entry key="..\:/WorkSpace/Git_WorkSpace/efunboxReader-android/efunboxReader-android-master/app/src/main/res/layout/activity_main.xml" value="0.25" />
+        <entry key="..\:/WorkSpace/Git_WorkSpace/efunboxReader-android/efunboxReader-android-master/app/src/main/res/layout/activity_main.xml" value="0.4010416666666667" />
         <entry key="..\:/WorkSpace/Git_WorkSpace/efunboxReader-android/efunboxReader-android-master/app/src/main/res/layout/activity_video.xml" value="0.1331521739130435" />
         <entry key="..\:/WorkSpace/Git_WorkSpace/efunboxReader-android/efunboxReader-android-master/app/src/main/res/layout/adapter_item_slidevideo.xml" value="0.18177083333333333" />
         <entry key="..\:/WorkSpace/Git_WorkSpace/efunboxReader-android/efunboxReader-android-master/app/src/main/res/layout/curjzplayer_controller.xml" value="0.16" />
-        <entry key="..\:/WorkSpace/Git_WorkSpace/efunboxReader-android/efunboxReader-android-master/app/src/main/res/layout/cusjzplayer_controller.xml" value="0.18" />
+        <entry key="..\:/WorkSpace/Git_WorkSpace/efunboxReader-android/efunboxReader-android-master/app/src/main/res/layout/cusjzplayer_controller.xml" value="0.5" />
+        <entry key="..\:/WorkSpace/Git_WorkSpace/efunboxReader-android/efunboxReader-android-master/app/src/main/res/layout/fragment_main_recommend.xml" value="0.2" />
         <entry key="..\:/WorkSpace/Git_WorkSpace/efunboxReader-android/efunboxReader-android-master/app/src/main/res/layout/player_controller.xml" value="0.13" />
       </map>
     </option>

+ 4 - 0
app/build.gradle

@@ -59,6 +59,10 @@ android {
     sourceSets {
         main {
             jniLibs.srcDirs = ['libs']
+            res.srcDirs = [
+                    'src/main/res', //默认只有这一个路径
+                    'src/fragmentRecommend'   //这个就是告诉gradle在编译的时候到这个文件夹找资源文件
+            ]
         }
     }
 

二進制
app/src/fragmentRecommend/drawable/fragment_recommend_bg.png


二進制
app/src/fragmentRecommend/drawable/fragment_recommend_collection.png


二進制
app/src/fragmentRecommend/drawable/fragment_recommend_comment.9.png


二進制
app/src/fragmentRecommend/drawable/fragment_recommend_next.png


+ 20 - 0
app/src/fragmentRecommend/drawable/fragment_recommend_rv_round.xml

@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<shape xmlns:android="http://schemas.android.com/apk/res/android">
+    <solid android:color="@color/transparent" />
+
+    <stroke
+            android:width="5dp"
+            android:color="@color/white" />
+
+    <padding
+            android:bottom="4dp"
+            android:left="5dp"
+            android:right="5dp"
+            android:top="4dp" />
+
+    <corners
+            android:bottomLeftRadius="40dp"
+            android:bottomRightRadius="40dp"
+            android:topLeftRadius="40dp"
+            android:topRightRadius="40dp" />
+</shape>

二進制
app/src/fragmentRecommend/drawable/fragment_recommend_thumbs_up.9.png


二進制
app/src/fragmentRecommend/drawable/fragment_recommend_up.png


二進制
app/src/fragmentRecommend/drawable/fragment_recommend_userhead.png


二進制
app/src/fragmentRecommend/drawable/fragment_recommend_userhead_bg.png


二進制
app/src/fragmentRecommend/drawable/plus.png


二進制
app/src/fragmentRecommend/drawable/to_record.png


+ 255 - 0
app/src/fragmentRecommend/layout/fragment_main_recommend.xml

@@ -0,0 +1,255 @@
+<?xml version="1.0" encoding="utf-8"?>
+<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+        android:layout_width="match_parent"
+        android:layout_height="match_parent"
+        android:layout_marginTop="37dp"
+        android:gravity="center">
+
+    <FrameLayout
+            android:layout_width="1080dp"
+            android:layout_height="750dp"
+            android:layout_gravity="center">
+
+
+        <ImageView
+                android:layout_width="match_parent"
+                android:layout_height="712dp"
+                android:background="@drawable/fragment_recommend_bg"></ImageView>
+
+        <FrameLayout
+                android:layout_width="match_parent"
+                android:layout_height="564.3dp"
+                android:layout_gravity="center"
+                android:layout_marginLeft="40dp"
+                android:layout_marginTop="20dp"
+                android:layout_marginRight="40dp"
+                android:background="@drawable/fragment_recommend_rv_round">
+
+            <androidx.recyclerview.widget.RecyclerView
+                    android:id="@+id/fragment_recommend_recyclerview"
+                    android:layout_width="match_parent"
+                    android:layout_height="match_parent"
+                    android:layout_gravity="center"
+                    android:orientation="vertical"></androidx.recyclerview.widget.RecyclerView>
+        </FrameLayout>
+
+
+        <LinearLayout
+                android:layout_width="match_parent"
+                android:layout_height="42dp"
+                android:layout_gravity="bottom"
+                android:layout_marginBottom="15dp">
+
+            <ImageView
+                    android:id="@+id/fragment_recommend_video_up"
+                    android:layout_width="0dp"
+                    android:layout_height="match_parent"
+                    android:layout_weight="1"
+                    android:src="@drawable/fragment_recommend_up"></ImageView>
+
+            <ImageView
+                    android:id="@+id/fragment_recommend_video_next"
+                    android:layout_width="0dp"
+                    android:layout_height="match_parent"
+                    android:layout_weight="1"
+                    android:src="@drawable/fragment_recommend_next"></ImageView>
+        </LinearLayout>
+
+        <ImageView
+                android:id="@+id/fragment_recommend_to_record"
+                android:layout_width="wrap_content"
+                android:layout_height="wrap_content"
+                android:layout_gravity="bottom|right"
+                android:layout_marginRight="15dp"
+                android:layout_marginBottom="15dp"
+                android:src="@drawable/to_record"></ImageView>
+
+        <LinearLayout
+                android:layout_width="match_parent"
+                android:layout_height="90dp"
+                android:layout_gravity="top"
+                android:layout_marginLeft="40dp"
+                android:layout_marginTop="20dp"
+                android:layout_marginRight="40dp"
+                android:gravity="center|left">
+
+            <FrameLayout
+                    android:layout_width="290dp"
+                    android:layout_height="56dp"
+                    android:layout_gravity="center">
+
+
+                <FrameLayout
+                        android:layout_width="match_parent"
+                        android:layout_height="match_parent"
+                        android:layout_gravity="center"
+                        android:paddingLeft="30dp">
+
+                    <ImageView
+                            android:layout_width="match_parent"
+                            android:layout_height="match_parent"
+                            android:src="@drawable/fragment_recommend_userhead_bg"></ImageView>
+
+                    <LinearLayout
+                            android:layout_width="match_parent"
+                            android:layout_height="match_parent"
+                            android:orientation="vertical"
+                            android:paddingLeft="40dp">
+
+                        <TextView
+                                android:id="@+id/fragment_recommend_user_name"
+                                android:layout_width="match_parent"
+                                android:layout_height="0dp"
+                                android:layout_weight="0.8"
+                                android:gravity="center|left"
+                                android:maxLength="6"
+                                android:text="一二三四五六"
+                                android:textColor="#333333"
+                                android:textSize="20dp"></TextView>
+
+                        <TextView
+                                android:id="@+id/fragment_recommend_user_readnum"
+                                android:layout_width="match_parent"
+                                android:layout_height="0dp"
+                                android:layout_weight="1"
+                                android:gravity="top|left"
+                                android:text="朗读号:123123123123123123"></TextView>
+
+                        <androidx.legacy.widget.Space
+                                android:layout_width="match_parent"
+                                android:layout_height="0dp"
+                                android:layout_weight="0.01"></androidx.legacy.widget.Space>
+                    </LinearLayout>
+                </FrameLayout>
+
+
+                <FrameLayout
+                        android:layout_width="60dp"
+                        android:layout_height="60dp"
+                        android:layout_gravity="center|left"
+                        android:background="@drawable/fragment_recommend_userhead">
+
+                    <ImageView
+                            android:id="@+id/fragment_recommend_user_head"
+                            android:layout_width="match_parent"
+                            android:layout_height="match_parent"
+                            android:layout_gravity="center|left"></ImageView>
+                </FrameLayout>
+
+            </FrameLayout>
+
+
+            <FrameLayout
+                    android:id="@+id/fragment_recommend_collection_layout"
+                    android:layout_width="wrap_content"
+                    android:layout_height="56dp"
+                    android:layout_marginLeft="50dp">
+
+                <FrameLayout
+                        android:layout_width="match_parent"
+                        android:layout_height="match_parent"
+                        android:layout_gravity="center">
+
+                    <ImageView
+                            android:layout_width="match_parent"
+                            android:layout_height="match_parent"
+                            android:layout_marginRight="10dp"
+                            android:src="@drawable/fragment_recommend_collection"></ImageView>
+
+                    <TextView
+                            android:layout_width="match_parent"
+                            android:layout_height="match_parent"
+                            android:layout_gravity="center"
+                            android:layout_marginLeft="46dp"
+                            android:layout_marginRight="40dp"
+                            android:gravity="center"
+                            android:paddingBottom="10dp"
+                            android:text="收藏"
+                            android:textColor="#333333"
+                            android:textSize="32dp"></TextView>
+                </FrameLayout>
+
+                <ImageView
+                        android:layout_width="wrap_content"
+                        android:layout_height="wrap_content"
+                        android:layout_gravity="center|right"
+                        android:src="@drawable/plus"></ImageView>
+            </FrameLayout>
+
+            <FrameLayout
+                    android:id="@+id/fragment_recommend_comment_layout"
+                    android:layout_width="wrap_content"
+                    android:layout_height="56dp"
+                    android:layout_marginLeft="37dp">
+
+                <FrameLayout
+                        android:layout_width="match_parent"
+                        android:layout_height="match_parent"
+                        android:layout_gravity="center">
+
+                    <ImageView
+                            android:layout_width="match_parent"
+                            android:layout_height="match_parent"
+                            android:layout_marginRight="10dp"
+                            android:background="@drawable/fragment_recommend_comment"></ImageView>
+
+                    <TextView
+                            android:layout_width="match_parent"
+                            android:layout_height="match_parent"
+                            android:layout_gravity="center"
+                            android:layout_marginLeft="55dp"
+                            android:layout_marginRight="45dp"
+                            android:gravity="center"
+                            android:paddingBottom="10dp"
+                            android:text="1234"
+                            android:textColor="#333333"
+                            android:textSize="32dp"></TextView>
+                </FrameLayout>
+
+                <ImageView
+                        android:layout_width="wrap_content"
+                        android:layout_height="wrap_content"
+                        android:layout_gravity="center|right"
+                        android:src="@drawable/plus"></ImageView>
+            </FrameLayout>
+
+            <FrameLayout
+                    android:id="@+id/fragment_recommend_thumbs_up_layout"
+                    android:layout_width="wrap_content"
+                    android:layout_height="56dp"
+                    android:layout_marginLeft="37dp">
+
+                <FrameLayout
+                        android:layout_width="match_parent"
+                        android:layout_height="match_parent"
+                        android:layout_gravity="center">
+
+                    <ImageView
+                            android:layout_width="match_parent"
+                            android:layout_height="match_parent"
+                            android:layout_marginRight="10dp"
+                            android:background="@drawable/fragment_recommend_thumbs_up"></ImageView>
+
+                    <TextView
+                            android:layout_width="match_parent"
+                            android:layout_height="match_parent"
+                            android:layout_gravity="center"
+                            android:layout_marginLeft="55dp"
+                            android:layout_marginRight="45dp"
+                            android:gravity="center"
+                            android:paddingBottom="10dp"
+                            android:text="1234"
+                            android:textColor="#333333"
+                            android:textSize="32dp"></TextView>
+                </FrameLayout>
+
+                <ImageView
+                        android:layout_width="wrap_content"
+                        android:layout_height="wrap_content"
+                        android:layout_gravity="center|right"
+                        android:src="@drawable/plus"></ImageView>
+            </FrameLayout>
+        </LinearLayout>
+    </FrameLayout>
+
+</LinearLayout>

+ 4 - 3
app/src/main/AndroidManifest.xml

@@ -63,7 +63,10 @@
                 android:resizeableActivity="true"
                 android:screenOrientation="landscape"
                 android:theme="@style/Theme.AppCompat.Light.NoActionBar.FullScreen"
-                android:windowSoftInputMode="adjustNothing|stateHidden"></activity>
+                android:windowSoftInputMode="adjustNothing|stateHidden">
+
+
+        </activity>
         <!--友盟start-->
         <meta-data
                 android:name="UMENG_APPKEY"
@@ -74,9 +77,7 @@
         <!--友盟end-->
 
         <!-- 录音services -->
-        <!--services -->
         <service android:name="com.edufound.reader.services.RecordServices"></service>
-        <!--services -->
         <!-- 录音services -->
 
     </application>

+ 33 - 11
app/src/main/java/com/edufound/reader/activity/CrashDialogActivity.java

@@ -4,8 +4,10 @@ import android.app.Activity;
 import android.app.AlertDialog;
 import android.content.DialogInterface;
 import android.os.Bundle;
+import android.widget.Button;
 
 import com.edufound.reader.R;
+import com.edufound.reader.annotation.BindView;
 import com.edufound.reader.application.EApplication;
 import com.edufound.reader.base.BaseMvpActivity;
 import com.edufound.reader.contract.CrashDialogContract;
@@ -19,6 +21,14 @@ public class CrashDialogActivity extends BaseMvpActivity<CrashDialogPresenter> i
 
     Activity mActivity;
 
+    @BindView(id = R.id.main_initrecord)
+    Button btn_main_initrecord;
+
+    @BindView(id = R.id.main_stoprecord)
+    Button main_stoprecord;
+
+    @BindView(id = R.id.main_playrecord)
+    Button main_playrecord;
 
     @Override
     public int getLayoutId() {
@@ -30,18 +40,30 @@ public class CrashDialogActivity extends BaseMvpActivity<CrashDialogPresenter> i
         mPresenter = new CrashDialogPresenter();
         mPresenter.attachView(this);
         mActivity = this;
-        AlertDialog.Builder builder = new AlertDialog.Builder(mActivity);
-        builder.setTitle("error");
-        builder.setIcon(R.drawable.icon);
-        builder.setMessage("出现异常");
-        builder.setNegativeButton("退出", new DialogInterface.OnClickListener() {
-            @Override
-            public void onClick(DialogInterface dialogInterface, int i) {
-                dialogInterface.dismiss();
-                EApplication.killAppProcess(mActivity);
-            }
+//        AlertDialog.Builder builder = new AlertDialog.Builder(mActivity);
+//        builder.setTitle("error");
+//        builder.setIcon(R.drawable.icon);
+//        builder.setMessage("出现异常");
+//        builder.setNegativeButton("退出", new DialogInterface.OnClickListener() {
+//            @Override
+//            public void onClick(DialogInterface dialogInterface, int i) {
+//                dialogInterface.dismiss();
+//                EApplication.killAppProcess(mActivity);
+//            }
+//        });
+//        builder.create().show();
+
+        mPresenter.bindRecordServices();
+
+        addUiClickListener(btn_main_initrecord, o -> {
+            mPresenter.startRecord("123", "123123123123123123123123123123123");
+        });
+        addUiClickListener(main_stoprecord, o -> {
+            mPresenter.stopRecord();
+        });
+        addUiClickListener(main_playrecord, o -> {
+            mPresenter.rePlayRecord();
         });
-        builder.create().show();
     }
 
     @Override

+ 21 - 37
app/src/main/java/com/edufound/reader/activity/MainActivity.java

@@ -5,6 +5,8 @@ import android.app.Activity;
 import android.view.KeyEvent;
 import android.view.View;
 import android.widget.Button;
+import android.widget.FrameLayout;
+import android.widget.RadioGroup;
 
 import com.edufound.reader.R;
 import com.edufound.reader.annotation.BindView;
@@ -30,19 +32,12 @@ public class MainActivity extends BaseMvpActivity<MainPresenter> implements Main
 
     Activity mActivity;
 
-    @BindView(id = R.id.main_initrecord)
-    Button btn_main_initrecord;
+    @BindView(id = R.id.main_left_tab_layout)
+    RadioGroup mRadioGroupTab;
 
-    @BindView(id = R.id.main_stoprecord)
-    Button main_stoprecord;
-
-    @BindView(id = R.id.main_playrecord)
-    Button main_playrecord;
-
-
-    @BindView(id = R.id.main_recyclerview)
-    RecyclerView mRecyclerView;
 
+    @BindView(id = R.id.main_fragment_layout)
+    FrameLayout mFragmentLayout;
 
     @Override
     public int getLayoutId() {
@@ -52,33 +47,22 @@ public class MainActivity extends BaseMvpActivity<MainPresenter> implements Main
     @SuppressLint("AutoDispose")
     @Override
     public void initView() {
-        mPresenter = new MainPresenter();
+
+        mPresenter = new MainPresenter(getSupportFragmentManager());
         mPresenter.attachView(this);
         mActivity = this;
-//        GlideUtils.loadImageSizeKipMemoryCache(this, "https://gimg2.baidu.com/image_search/src=http%3A%2F%2Fpic1.zhimg.com%2F50%2Fv2-a96199f59f76eef6698e572c19944e40_hd.jpg&refer=http%3A%2F%2Fpic1.zhimg.com&app=2002&size=f9999,10000&q=a80&n=0&g=0n&fmt=jpeg?sec=1640338680&t=511cd171a44a99e646ce6063b751c78f", mImage);
-        mPresenter.bindRecordServices();
-        addDisposable(RxView.clicks(btn_main_initrecord).throttleFirst(2, TimeUnit.SECONDS)
-                .subscribe(o -> {
-                    mPresenter.startRecord("123", "1234567");
-                }));
-
-        addDisposable(RxView.clicks(main_stoprecord).throttleFirst(2, TimeUnit.SECONDS)
-                .subscribe(o -> {
-                    mPresenter.stopRecord();
-                }));
-
-        addDisposable(RxView.clicks(main_playrecord).throttleFirst(2, TimeUnit.SECONDS)
-                .subscribe(o -> {
-                    mPresenter.rePlayRecord();
-                }));
-
-        mPresenter.initVideoList(mRecyclerView);
-
+        mRadioGroupTab.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() {
+            @Override
+            public void onCheckedChanged(RadioGroup radioGroup, int id) {
+                mPresenter.onRadioChecked(radioGroup, id);
+            }
+        });
     }
 
+
     @Override
     public void onDisconnect() {
-        
+
     }
 
     @Override
@@ -113,9 +97,9 @@ public class MainActivity extends BaseMvpActivity<MainPresenter> implements Main
 
     @Override
     public void onBackPressed() {
-        if (Jzvd.backPress()) {
-            return;
-        }
+//        if (Jzvd.backPress()) {
+//            return;
+//        }
         super.onBackPressed();
     }
 
@@ -123,13 +107,13 @@ public class MainActivity extends BaseMvpActivity<MainPresenter> implements Main
     protected void onPause() {
         super.onPause();
 //        Jzvd.releaseAllVideos();
-        JzvdStd.goOnPlayOnPause();
+//        JzvdStd.goOnPlayOnPause();
     }
 
     @Override
     protected void onResume() {
         super.onResume();
-        JzvdStd.goOnPlayOnResume();
+//        JzvdStd.goOnPlayOnResume();
     }
 
     @Override

+ 1 - 0
app/src/main/java/com/edufound/reader/adapter/SlideVideoAdapter.java

@@ -28,6 +28,7 @@ public class SlideVideoAdapter extends RecyclerView.Adapter<VideoHolder> {
         mContext = context;
         mLayoutInflater = LayoutInflater.from(context);
         this.mListData = data;
+        Logger.e("init--size:" + mListData.size());
     }
 
 

+ 1 - 0
app/src/main/java/com/edufound/reader/application/EApplication.java

@@ -83,6 +83,7 @@ public class EApplication extends Application {
             Logger.addLogAdapter(new AndroidLogAdapter(formatStrategy));
             //初始化友盟
             UMConfigure.init(this, UMConfigure.DEVICE_TYPE_PHONE, "");
+//            UMConfigure.preInit(this,"");
             //初始化MMKV
             MMKV.initialize(this);
 

+ 12 - 0
app/src/main/java/com/edufound/reader/base/BaseActivity.java

@@ -1,11 +1,13 @@
 package com.edufound.reader.base;
 
+import android.annotation.SuppressLint;
 import android.app.Activity;
 import android.content.Intent;
 import android.content.IntentFilter;
 import android.os.Build;
 import android.os.Bundle;
 import android.util.DisplayMetrics;
+import android.view.View;
 import android.view.WindowManager;
 
 import com.edufound.reader.annotation.BindView;
@@ -15,15 +17,18 @@ import com.edufound.reader.util.Consts;
 import com.edufound.reader.util.EfunboxUtil;
 import com.edufound.reader.util.LiuHaiScreenUtil;
 import com.edufound.reader.util.PermissionsUtil;
+import com.jakewharton.rxbinding4.view.RxView;
 
 import java.lang.reflect.Field;
 import java.lang.reflect.InvocationTargetException;
 import java.lang.reflect.Method;
+import java.util.concurrent.TimeUnit;
 
 import androidx.appcompat.app.AppCompatActivity;
 import io.reactivex.rxjava3.annotations.Nullable;
 import io.reactivex.rxjava3.disposables.CompositeDisposable;
 import io.reactivex.rxjava3.disposables.Disposable;
+import io.reactivex.rxjava3.functions.Consumer;
 
 public abstract class BaseActivity extends AppCompatActivity {
 
@@ -67,6 +72,7 @@ public abstract class BaseActivity extends AppCompatActivity {
     @Override
     protected void onDestroy() {
         super.onDestroy();
+        clearDisposable();
         unregisterReceiver(mHomeReceiver);
         NetworkChangeReceiver.unRegisterReceiver(this);
     }
@@ -139,6 +145,12 @@ public abstract class BaseActivity extends AppCompatActivity {
         }
     }
 
+
+    @SuppressLint("AutoDispose")
+    public void addUiClickListener(View view, Consumer onNext) {
+        addDisposable(RxView.clicks(view).throttleFirst(2, TimeUnit.SECONDS).subscribe(onNext));
+    }
+
     public abstract void onDisconnect();
 
     public abstract void onMobileConnect();

+ 42 - 0
app/src/main/java/com/edufound/reader/base/BaseFragment.java

@@ -1,15 +1,30 @@
 package com.edufound.reader.base;
 
+import android.annotation.SuppressLint;
+import android.app.Activity;
 import android.os.Bundle;
 import android.view.LayoutInflater;
 import android.view.View;
 import android.view.ViewGroup;
 
+import com.edufound.reader.annotation.BindView;
+import com.jakewharton.rxbinding4.view.RxView;
+
+import java.lang.reflect.Field;
+import java.lang.reflect.InvocationTargetException;
+import java.lang.reflect.Method;
+import java.util.concurrent.TimeUnit;
+
 import androidx.fragment.app.Fragment;
 import io.reactivex.rxjava3.annotations.Nullable;
+import io.reactivex.rxjava3.disposables.CompositeDisposable;
+import io.reactivex.rxjava3.disposables.Disposable;
+import io.reactivex.rxjava3.functions.Consumer;
 
 public abstract class BaseFragment extends Fragment {
 
+    public CompositeDisposable mCompositeDisposable;
+
     @Override
     public void onCreate(@Nullable Bundle savedInstanceState) {
         super.onCreate(savedInstanceState);
@@ -33,4 +48,31 @@ public abstract class BaseFragment extends Fragment {
     protected abstract void initView(View view);
 
     protected abstract int getLayoutId();
+
+    /**
+     * 添加订阅
+     */
+    public void addDisposable(Disposable mDisposable) {
+        if (mCompositeDisposable == null) {
+            mCompositeDisposable = new CompositeDisposable();
+        }
+        mCompositeDisposable.add(mDisposable);
+    }
+
+    /**
+     * 取消所有订阅
+     */
+    public void clearDisposable() {
+        if (mCompositeDisposable != null) {
+            mCompositeDisposable.clear();
+        }
+    }
+
+
+    @SuppressLint("AutoDispose")
+    public void addUiClickListener(View view, Consumer onNext) {
+        addDisposable(RxView.clicks(view).throttleFirst(2, TimeUnit.SECONDS).subscribe(onNext));
+    }
+
+
 }

+ 1 - 0
app/src/main/java/com/edufound/reader/base/BaseMvpFragment.java

@@ -29,4 +29,5 @@ public abstract class BaseMvpFragment<T extends BasePresenter> extends BaseFragm
         return AutoDispose.autoDisposable(AndroidLifecycleScopeProvider
                 .from(this, Lifecycle.Event.ON_DESTROY));
     }
+
 }

+ 9 - 0
app/src/main/java/com/edufound/reader/base/BasePresenter.java

@@ -1,5 +1,13 @@
 package com.edufound.reader.base;
 
+import android.app.Activity;
+
+import com.edufound.reader.annotation.BindView;
+
+import java.lang.reflect.Field;
+import java.lang.reflect.InvocationTargetException;
+import java.lang.reflect.Method;
+
 public class BasePresenter<V extends BaseView> {
     protected V mView;
 
@@ -29,4 +37,5 @@ public class BasePresenter<V extends BaseView> {
     public boolean isViewAttached() {
         return mView != null;
     }
+
 }

+ 10 - 0
app/src/main/java/com/edufound/reader/contract/CrashDialogContract.java

@@ -10,5 +10,15 @@ public interface CrashDialogContract {
     }
 
     interface Presenter {
+
+        void bindRecordServices();
+
+        void startRecord(String name, String refText);
+
+        void stopRecord();
+
+        void rePlayRecord();
+
+        void activityDestory();
     }
 }

+ 3 - 6
app/src/main/java/com/edufound/reader/contract/MainContract.java

@@ -1,5 +1,7 @@
 package com.edufound.reader.contract;
 
+import android.widget.RadioGroup;
+
 import com.edufound.reader.base.BaseView;
 
 import androidx.recyclerview.widget.RecyclerView;
@@ -12,13 +14,8 @@ public interface MainContract {
     }
 
     interface Presenter {
-        void initVideoList(RecyclerView rv);
-
-        void bindRecordServices();
-
-        void startRecord(String name, String refText);
 
-        void stopRecord();
+        void onRadioChecked(RadioGroup radioGroup, int id);
 
 
         void activityDestroy();

+ 19 - 0
app/src/main/java/com/edufound/reader/contract/RecommendFragmentContract.java

@@ -0,0 +1,19 @@
+package com.edufound.reader.contract;
+
+import android.app.Activity;
+
+import com.edufound.reader.base.BaseView;
+
+import androidx.recyclerview.widget.RecyclerView;
+
+public interface RecommendFragmentContract {
+    interface Model {
+    }
+
+    interface View  {
+    }
+
+    interface Presenter {
+        void initVideoList(RecyclerView rv);
+    }
+}

+ 7 - 1
app/src/main/java/com/edufound/reader/cusview/RvListJzvdStd.java

@@ -323,7 +323,7 @@ public class RvListJzvdStd extends Jzvd {
 //                    }
                     break;
             }
-            gestureDetector.onTouchEvent(event);
+//            gestureDetector.onTouchEvent(event);
         } else if (id == R.id.bottom_seek_progress) {
             switch (event.getAction()) {
                 case MotionEvent.ACTION_DOWN:
@@ -780,10 +780,12 @@ public class RvListJzvdStd extends Jzvd {
                                         int posterImg, int bottomPro, int retryLayout) {
         topContainer.setVisibility(topCon);
         bottomContainer.setVisibility(bottomCon);
+        bottomContainer.setVisibility(View.INVISIBLE);
         startButton.setVisibility(startBtn);
         loadingProgressBar.setVisibility(loadingPro);
         posterImageView.setVisibility(posterImg);
         bottomProgressBar.setVisibility(bottomPro);
+        bottomProgressBar.setVisibility(View.INVISIBLE);
         mRetryLayout.setVisibility(retryLayout);
     }
 
@@ -1004,4 +1006,8 @@ public class RvListJzvdStd extends Jzvd {
     public interface VideoCallBack {
         void onComplete();
     }
+
+    public String getVideoTitle() {
+        return jzDataSource.title;
+    }
 }

+ 62 - 0
app/src/main/java/com/edufound/reader/fragment/RecommendFragment.java

@@ -0,0 +1,62 @@
+package com.edufound.reader.fragment;
+
+import android.app.Activity;
+import android.view.View;
+import android.widget.ImageView;
+
+import com.edufound.reader.R;
+import com.edufound.reader.base.BaseMvpFragment;
+import com.edufound.reader.contract.RecommendFragmentContract;
+import com.edufound.reader.presenter.RecommendFragmentPresenter;
+import com.edufound.reader.util.GlideUtils;
+
+import androidx.recyclerview.widget.RecyclerView;
+import cn.jzvd.JzvdStd;
+
+public class RecommendFragment extends BaseMvpFragment<RecommendFragmentPresenter> implements RecommendFragmentContract.View {
+
+
+    RecyclerView mRecyclerView;
+
+    @Override
+    protected void initView(View view) {
+        mPresenter = new RecommendFragmentPresenter(getContext());
+        mPresenter.attachView(this);
+        mRecyclerView = view.findViewById(R.id.fragment_recommend_recyclerview);
+        mPresenter.initVideoList(mRecyclerView);
+    }
+
+    @Override
+    protected int getLayoutId() {
+        return R.layout.fragment_main_recommend;
+    }
+
+    @Override
+    public void showLoading() {
+
+    }
+
+    @Override
+    public void hideLoading() {
+
+    }
+
+    @Override
+    public void onError(String errMessage) {
+
+    }
+
+
+    @Override
+    public void onPause() {
+        super.onPause();
+        JzvdStd.goOnPlayOnPause();
+    }
+
+
+    @Override
+    public void onResume() {
+        super.onResume();
+        JzvdStd.goOnPlayOnResume();
+    }
+}

+ 6 - 0
app/src/main/java/com/edufound/reader/model/RecommendFragmentModel.java

@@ -0,0 +1,6 @@
+package com.edufound.reader.model;
+
+import com.edufound.reader.contract.RecommendFragmentContract;
+
+public class RecommendFragmentModel implements RecommendFragmentContract.Model {
+}

+ 75 - 0
app/src/main/java/com/edufound/reader/presenter/CrashDialogPresenter.java

@@ -1,7 +1,82 @@
 package com.edufound.reader.presenter;
 
+import android.content.ComponentName;
+import android.content.Context;
+import android.content.Intent;
+import android.content.ServiceConnection;
+import android.os.IBinder;
+
+import com.chivox.aiengine.EvalResult;
 import com.edufound.reader.base.BasePresenter;
 import com.edufound.reader.contract.CrashDialogContract;
+import com.edufound.reader.services.RecordServices;
+import com.orhanobut.logger.Logger;
 
 public class CrashDialogPresenter extends BasePresenter implements CrashDialogContract.Presenter {
+    RecordServices mRecordServices;
+
+
+    public CrashDialogPresenter() {
+    }
+
+    @Override
+    public void bindRecordServices() {
+        if (mRecordServices == null) {
+            Intent intent = new Intent();
+            intent.setClass(mView.getActivity(), RecordServices.class);
+            mView.getActivity().bindService(intent, recordServicesConn, Context.BIND_AUTO_CREATE);
+        }
+    }
+
+    @Override
+    public void startRecord(String name, String refText) {
+        mRecordServices.startRecord(mView.getActivity(), name, refText);
+    }
+
+    @Override
+    public void stopRecord() {
+        mRecordServices.stopRecord();
+    }
+
+    @Override
+    public void rePlayRecord() {
+        mRecordServices.replayRecord();
+    }
+
+    @Override
+    public void activityDestory() {
+        mRecordServices.unbindService(recordServicesConn);
+        if (mRecordServices != null) {
+            mView.getActivity().unbindService(recordServicesConn);
+        }
+    }
+
+
+    private ServiceConnection recordServicesConn = new ServiceConnection() {
+        @Override
+        public void onServiceConnected(ComponentName componentName, IBinder iBinder) {
+            mRecordServices = ((RecordServices.RecordServicesBind) iBinder).getService();
+            mRecordServices.setRecordCallBack(new RecordServices.RecordCallBack() {
+                @Override
+                public void onRecordStart() {
+                    Logger.e("录音开始");
+                }
+
+                @Override
+                public void onRecordStop(int type, String tokenId, EvalResult result) {
+                    Logger.e("录音停止");
+                }
+
+                @Override
+                public void onRecordCancel() {
+                    Logger.e("录音取消");
+                }
+            });
+        }
+
+        @Override
+        public void onServiceDisconnected(ComponentName componentName) {
+            mRecordServices = null;
+        }
+    };
 }

+ 34 - 193
app/src/main/java/com/edufound/reader/presenter/MainPresenter.java

@@ -1,196 +1,66 @@
 package com.edufound.reader.presenter;
 
-import android.content.ComponentName;
-import android.content.Context;
-import android.content.Intent;
-import android.content.ServiceConnection;
-import android.os.IBinder;
 import android.view.KeyEvent;
-import android.view.MotionEvent;
-import android.view.View;
+import android.widget.RadioGroup;
 
-import com.chivox.aiengine.EvalResult;
 import com.edufound.reader.R;
-import com.edufound.reader.adapter.SlideVideoAdapter;
 import com.edufound.reader.application.EApplication;
 import com.edufound.reader.base.BasePresenter;
-import com.edufound.reader.bean.SlideVideoBean;
 import com.edufound.reader.contract.MainContract;
-import com.edufound.reader.cusview.RvListJzvdStd;
+import com.edufound.reader.fragment.RecommendFragment;
 import com.edufound.reader.model.MainModel;
-import com.edufound.reader.services.RecordServices;
-import com.edufound.reader.util.CToast;
-import com.edufound.reader.videoutil.OnViewPagerListener;
-import com.edufound.reader.videoutil.ViewPagerLayoutManager;
 import com.orhanobut.logger.Logger;
 
-import java.util.ArrayList;
-import java.util.List;
-
-import androidx.recyclerview.widget.LinearLayoutManager;
-import androidx.recyclerview.widget.OrientationHelper;
-import androidx.recyclerview.widget.RecyclerView;
-import cn.jzvd.Jzvd;
+import androidx.fragment.app.Fragment;
+import androidx.fragment.app.FragmentManager;
+import androidx.fragment.app.FragmentTransaction;
 
 public class MainPresenter extends BasePresenter<MainContract.View> implements MainContract.Presenter {
     MainModel mModel;
-    private ViewPagerLayoutManager mViewPagerLayoutManager;
-    private int mCurrentPosition = -1;
-    RecordServices mRecordServices;
-
-    /*
-     * 测试数据
-     * */
-    List<SlideVideoBean> mDataList;
-    SlideVideoAdapter mAdapter;
+    RecommendFragment mRecommendFragment;
+    FragmentManager mFragmentManager;
 
-    public MainPresenter() {
+    public MainPresenter(FragmentManager fragmentManager) {
         mModel = new MainModel();
-    }
-
-    @Override
-    public void initVideoList(RecyclerView rv) {
-
-        /*
-         * 测试数据
-         * */
-        mDataList = new ArrayList<>();
-        for (int i = 0; i < 5; i++) {
-            SlideVideoBean bean = new SlideVideoBean();
-            if (i % 2 == 0) {
-                bean.videoUrl = "http://reader-wx.ai160.com/vs2m-m3u8/reader/053/05303004/05303004038/05303004038.m3u8";
-                bean.videoTitle = "m3u8视频";
-            } else {
-                bean.videoUrl = "https://reader-wx.ai160.com/reader/resource/video/1610961140479648.mp4";
-                bean.videoTitle = "https--MP4视频";
-            }
-            mDataList.add(bean);
-        }
-
-
-        rv.setLayoutManager(new LinearLayoutManager(mView.getActivity()));
-        rv.setNestedScrollingEnabled(false);
-        mViewPagerLayoutManager = new ViewPagerLayoutManager(mView.getActivity(), OrientationHelper.VERTICAL);
-        rv.setLayoutManager(mViewPagerLayoutManager);
-        mAdapter = new SlideVideoAdapter(mView.getActivity(), mDataList);
-        rv.setAdapter(mAdapter);
-        mViewPagerLayoutManager.setOnViewPagerListener(new OnViewPagerListener() {
-            @Override
-            public void onInitComplete() {
-                //自动播放第一条
-                autoPlayVideo(rv);
-            }
-
-            @Override
-            public void onPageRelease(boolean isNext, int position) {
-                if (mCurrentPosition == position) {
-                    Jzvd.releaseAllVideos();
-                }
-            }
-
-            @Override
-            public void onPageSelected(int position, boolean isBottom) {
-//                if (mCurrentPosition == position) {
-//                    Logger.e("mCurrentPosition == position..return了");
-//                    return;
-//                }
-                autoPlayVideo(rv);
-                mCurrentPosition = position;
-            }
-        });
-        rv.addOnChildAttachStateChangeListener(new RecyclerView.OnChildAttachStateChangeListener() {
-            @Override
-            public void onChildViewAttachedToWindow(View view) {
-                scrollToNextFunction(rv, false);
-            }
-
-            @Override
-            public void onChildViewDetachedFromWindow(View view) {
-                Jzvd jzvd = view.findViewById(R.id.slidevideo_video);
-                if (jzvd != null && Jzvd.CURRENT_JZVD != null && jzvd.jzDataSource != null &&
-                        jzvd.jzDataSource.containsTheUrl(Jzvd.CURRENT_JZVD.jzDataSource.getCurrentUrl())) {
-                    if (Jzvd.CURRENT_JZVD != null && Jzvd.CURRENT_JZVD.screen != Jzvd.SCREEN_FULLSCREEN) {
-                        Jzvd.releaseAllVideos();
-                    }
-                }
-            }
-        });
-    }
-
-    private void autoPlayVideo(RecyclerView rv) {
-        if (rv == null || rv.getChildAt(0) == null) {
-            return;
-        }
-        RvListJzvdStd player = rv.getChildAt(0).findViewById(R.id.slidevideo_video);
-        if (player != null) {
-            if (player.state == Jzvd.STATE_PLAYING) {
-                //正在播放
-            } else {
-                player.startVideoAfterPreloading();
-                player.setVideoCallBack(new RvListJzvdStd.VideoCallBack() {
-                    @Override
-                    public void onComplete() {
-                        scrollToNextFunction(rv, true);
-                    }
-                });
-            }
-
-        }
-    }
+        mFragmentManager = fragmentManager;
+        mRecommendFragment = new RecommendFragment();
 
-    private void scrollToNextFunction(RecyclerView rv, boolean needScroll) {
-        //获取当前显示的View 的数据
-        int childCount = rv.getChildCount();
-        //获取最后一具 Item 对应的View
-        View childAt = rv.getChildAt(childCount - 1);
-        //获取当前军舰中显示的最后一个 Item 的位置  Postion
-        int childLayoutPosition = rv.getChildLayoutPosition(childAt);
-        //如果不是最后一个就向下滑动
-
-        if (childLayoutPosition < rv.getAdapter().getItemCount() - 2) {
-            if (needScroll) {
-                rv.smoothScrollToPosition(childLayoutPosition + 1);
-            }
-        } else {
-//            Toast.makeText(this, "已滑动到底部了", Toast.LENGTH_LONG).show();
-//            CToast.makeText(mView.getActivity(), "滑动到最后一个啦", 3000).show();
-            Logger.e("倒数第二个,添加数据");
-            mAdapter.addMored(mDataList);
-
-        }
     }
 
 
     @Override
-    public void bindRecordServices() {
-        if (mRecordServices == null) {
-            Intent intent = new Intent();
-            intent.setClass(mView.getActivity(), RecordServices.class);
-            mView.getActivity().bindService(intent, recordServicesConn, Context.BIND_AUTO_CREATE);
+    public void onRadioChecked(RadioGroup radioGroup, int id) {
+        switch (id) {
+            case R.id.main_left_tab_layout_myinfo:
+                //我的
+                Logger.e("我的");
+                break;
+            case R.id.main_left_tab_layout_recommend:
+                //推荐
+                Logger.e("推荐");
+                changeFragmentLayout(mRecommendFragment);
+                break;
+            case R.id.main_left_tab_layout_follow:
+                //关注
+                Logger.e("关注");
+                break;
+            case R.id.main_left_tab_layout_character:
+                //任务
+                Logger.e("任务");
+                break;
         }
     }
 
-    @Override
-    public void startRecord(String name, String refText) {
-        mRecordServices.startRecord(mView.getActivity(), name, refText);
-    }
-
-    @Override
-    public void stopRecord() {
-        mRecordServices.stopRecord();
-    }
-
 
-    public void rePlayRecord() {
-        mRecordServices.replayRecord();
+    void changeFragmentLayout(Fragment fragment) {
+        FragmentTransaction transaction = mFragmentManager.beginTransaction();
+        transaction.addToBackStack(null);
+        transaction.replace(R.id.main_fragment_layout, fragment);
+        transaction.commit();
     }
 
     @Override
     public void activityDestroy() {
-        mRecordServices.unbindService(recordServicesConn);
-        if (mRecordServices != null) {
-            mView.getActivity().unbindService(recordServicesConn);
-        }
     }
 
     @Override
@@ -204,35 +74,6 @@ public class MainPresenter extends BasePresenter<MainContract.View> implements M
     }
 
 
-    private ServiceConnection recordServicesConn = new ServiceConnection() {
-        @Override
-        public void onServiceConnected(ComponentName componentName, IBinder iBinder) {
-            mRecordServices = ((RecordServices.RecordServicesBind) iBinder).getService();
-            mRecordServices.setRecordCallBack(new RecordServices.RecordCallBack() {
-                @Override
-                public void onRecordStart() {
-                    Logger.e("录音开始");
-                }
-
-                @Override
-                public void onRecordStop(int type, String tokenId, EvalResult result) {
-                    Logger.e("录音停止");
-                }
-
-                @Override
-                public void onRecordCancel() {
-                    Logger.e("录音取消");
-                }
-            });
-        }
-
-        @Override
-        public void onServiceDisconnected(ComponentName componentName) {
-            mRecordServices = null;
-        }
-    };
-
-
     public boolean onKeyDown(int keyCode, KeyEvent event) {
         switch (keyCode) {
             case KeyEvent.KEYCODE_BACK:

+ 183 - 0
app/src/main/java/com/edufound/reader/presenter/RecommendFragmentPresenter.java

@@ -0,0 +1,183 @@
+package com.edufound.reader.presenter;
+
+import android.content.Context;
+import android.graphics.Outline;
+import android.view.View;
+import android.view.ViewOutlineProvider;
+import android.widget.FrameLayout;
+
+import com.edufound.reader.R;
+import com.edufound.reader.adapter.SlideVideoAdapter;
+import com.edufound.reader.base.BasePresenter;
+import com.edufound.reader.bean.SlideVideoBean;
+import com.edufound.reader.contract.RecommendFragmentContract;
+import com.edufound.reader.cusview.RvListJzvdStd;
+import com.edufound.reader.model.RecommendFragmentModel;
+import com.edufound.reader.util.SizeUtils;
+import com.edufound.reader.videoutil.OnViewPagerListener;
+import com.edufound.reader.videoutil.ViewPagerLayoutManager;
+import com.orhanobut.logger.Logger;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import androidx.recyclerview.widget.LinearLayoutManager;
+import androidx.recyclerview.widget.OrientationHelper;
+import androidx.recyclerview.widget.RecyclerView;
+import cn.jzvd.Jzvd;
+
+public class RecommendFragmentPresenter extends BasePresenter implements RecommendFragmentContract.Presenter {
+
+    Context mContext;
+    RecommendFragmentModel mModel;
+    private ViewPagerLayoutManager mViewPagerLayoutManager;
+    private int mCurrentPosition = -1;
+
+    /*
+     * 测试数据
+     * */
+    List<SlideVideoBean> mDataList;
+    SlideVideoAdapter mAdapter;
+
+    public RecommendFragmentPresenter(Context context) {
+        mModel = new RecommendFragmentModel();
+        mContext = context;
+    }
+
+    @Override
+    public void initVideoList(RecyclerView rv) {
+        FrameLayout frameLayout = (FrameLayout) rv.getParent();
+        frameLayout.setOutlineProvider(new ViewOutlineProvider() {
+            @Override
+            public void getOutline(View view, Outline outline) {
+                outline.setRoundRect(0,
+                        0,
+                        view.getWidth(),
+                        view.getHeight(),
+                        SizeUtils.px2dp(mContext, 40));
+            }
+        });
+        frameLayout.setClipToOutline(true);
+        rv.setOutlineProvider(new ViewOutlineProvider() {
+            @Override
+            public void getOutline(View view, Outline outline) {
+                outline.setRoundRect(0,
+                        0,
+                        view.getWidth(),
+                        view.getHeight(),
+                        SizeUtils.px2dp(mContext, 40));
+            }
+        });
+        rv.setClipToOutline(true);
+
+        /*
+         * 测试数据
+         * */
+        mDataList = new ArrayList<>();
+        for (int i = 0; i < 5; i++) {
+            SlideVideoBean bean = new SlideVideoBean();
+            if (i % 2 == 0) {
+                bean.videoUrl = "http://reader-wx.ai160.com/vs2m-m3u8/reader/053/05303004/05303004038/05303004038.m3u8";
+                bean.videoTitle = "m3u8视频--如梦令";
+            } else {
+                bean.videoUrl = "https://reader-wx.ai160.com/reader/resource/video/1610961140479648.mp4";
+                bean.videoTitle = "https--MP4视频";
+            }
+            mDataList.add(bean);
+        }
+
+
+        rv.setLayoutManager(new LinearLayoutManager(mView.getActivity()));
+        rv.setNestedScrollingEnabled(false);
+        mViewPagerLayoutManager = new ViewPagerLayoutManager(mView.getActivity(), OrientationHelper.VERTICAL);
+        rv.setLayoutManager(mViewPagerLayoutManager);
+        mAdapter = new SlideVideoAdapter(mView.getActivity(), mDataList);
+        rv.setAdapter(mAdapter);
+        mViewPagerLayoutManager.setOnViewPagerListener(new OnViewPagerListener() {
+            @Override
+            public void onInitComplete() {
+                //自动播放第一条
+                autoPlayVideo(rv);
+            }
+
+            @Override
+            public void onPageRelease(boolean isNext, int position) {
+                if (mCurrentPosition == position) {
+                    Jzvd.releaseAllVideos();
+                }
+            }
+
+            @Override
+            public void onPageSelected(int position, boolean isBottom) {
+//                if (mCurrentPosition == position) {
+//                    Logger.e("mCurrentPosition == position..return了");
+//                    return;
+//                }
+                autoPlayVideo(rv);
+                mCurrentPosition = position;
+            }
+        });
+        rv.addOnChildAttachStateChangeListener(new RecyclerView.OnChildAttachStateChangeListener() {
+            @Override
+            public void onChildViewAttachedToWindow(View view) {
+                scrollToNextFunction(rv, false);
+            }
+
+            @Override
+            public void onChildViewDetachedFromWindow(View view) {
+                Jzvd jzvd = view.findViewById(R.id.slidevideo_video);
+                if (jzvd != null && Jzvd.CURRENT_JZVD != null && jzvd.jzDataSource != null &&
+                        jzvd.jzDataSource.containsTheUrl(Jzvd.CURRENT_JZVD.jzDataSource.getCurrentUrl())) {
+                    if (Jzvd.CURRENT_JZVD != null && Jzvd.CURRENT_JZVD.screen != Jzvd.SCREEN_FULLSCREEN) {
+                        Jzvd.releaseAllVideos();
+                    }
+                }
+            }
+        });
+    }
+
+    private void autoPlayVideo(RecyclerView rv) {
+        if (rv == null || rv.getChildAt(0) == null) {
+            return;
+        }
+        RvListJzvdStd player = rv.getChildAt(0).findViewById(R.id.slidevideo_video);
+        if (player != null) {
+            if (player.state == Jzvd.STATE_PLAYING) {
+                //正在播放
+
+            } else {
+                player.startVideoAfterPreloading();
+                player.setVideoCallBack(new RvListJzvdStd.VideoCallBack() {
+                    @Override
+                    public void onComplete() {
+                        scrollToNextFunction(rv, true);
+                    }
+                });
+            }
+
+        }
+    }
+
+    private void scrollToNextFunction(RecyclerView rv, boolean needScroll) {
+        //获取当前显示的View 的数据
+        int childCount = rv.getChildCount();
+        //获取最后一具 Item 对应的View
+        View childAt = rv.getChildAt(childCount - 1);
+        //获取当前军舰中显示的最后一个 Item 的位置  Postion
+        int childLayoutPosition = rv.getChildLayoutPosition(childAt);
+        //如果不是最后一个就向下滑动
+
+        if (childLayoutPosition < rv.getAdapter().getItemCount() - 2) {
+            if (needScroll) {
+                rv.smoothScrollToPosition(childLayoutPosition + 1);
+            }
+        } else {
+//            Toast.makeText(this, "已滑动到底部了", Toast.LENGTH_LONG).show();
+//            CToast.makeText(mView.getActivity(), "滑动到最后一个啦", 3000).show();
+            Logger.e("倒数第二个,添加数据");
+            mAdapter.addMored(mDataList);
+
+        }
+    }
+
+}

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

@@ -4,6 +4,8 @@ import android.app.Activity;
 import android.app.Application;
 import android.util.DisplayMetrics;
 
+import com.orhanobut.logger.Logger;
+
 import io.reactivex.rxjava3.annotations.NonNull;
 
 public class EfunboxUtil {
@@ -11,7 +13,7 @@ public class EfunboxUtil {
 
     public static void setCustomDensity(@NonNull Activity activity, @NonNull Application application) {
         final DisplayMetrics appDisplayMetrics = application.getResources().getDisplayMetrics();
-        final float targetDensity = appDisplayMetrics.heightPixels / 720;
+        final float targetDensity = appDisplayMetrics.heightPixels / (800 * 1f);
         final float targetSxaledDensity = targetDensity * (appDisplayMetrics.scaledDensity / appDisplayMetrics.density);
         final int targetDensityDpi = (int) (160 * targetDensity);
         appDisplayMetrics.density = appDisplayMetrics.scaledDensity = targetSxaledDensity;
@@ -19,6 +21,5 @@ public class EfunboxUtil {
         final DisplayMetrics activiyDisplayMetrics = activity.getResources().getDisplayMetrics();
         activiyDisplayMetrics.density = activiyDisplayMetrics.scaledDensity = targetSxaledDensity;
         activiyDisplayMetrics.densityDpi = targetDensityDpi;
-
     }
 }

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

@@ -9,7 +9,6 @@ import com.okhttplib.interceptor.ResultInterceptor;
  * 1、请求结果统一预处理拦截器
  * 2、请求链路异常信息拦截器
  *
- * @author zhousf
  */
 public class HttpInterceptor {
 

+ 2 - 0
app/src/main/java/com/edufound/reader/videoutil/ViewPagerLayoutManager.java

@@ -4,6 +4,8 @@ package com.edufound.reader.videoutil;
 import android.content.Context;
 import android.view.View;
 
+import com.orhanobut.logger.Logger;
+
 import androidx.recyclerview.widget.LinearLayoutManager;
 import androidx.recyclerview.widget.PagerSnapHelper;
 import androidx.recyclerview.widget.RecyclerView;

二進制
app/src/main/res/drawable/main_background.jpg


二進制
app/src/main/res/drawable/main_left_tab_bg.png


+ 7 - 0
app/src/main/res/drawable/main_left_tab_character_selector.xml

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

+ 8 - 0
app/src/main/res/drawable/main_left_tab_divider.xml

@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="utf-8"?>
+<shape xmlns:android="http://schemas.android.com/apk/res/android"
+        android:shape="rectangle">
+    <size
+            android:width="20dp"
+            android:height="30dp" />
+    <solid android:color="@android:color/transparent" />
+</shape>

+ 7 - 0
app/src/main/res/drawable/main_left_tab_follow_selector.xml

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

二進制
app/src/main/res/drawable/main_left_tab_layout_character.png


二進制
app/src/main/res/drawable/main_left_tab_layout_character_s.png


二進制
app/src/main/res/drawable/main_left_tab_layout_follow.png


二進制
app/src/main/res/drawable/main_left_tab_layout_follow_s.png


二進制
app/src/main/res/drawable/main_left_tab_layout_recommend.png


二進制
app/src/main/res/drawable/main_left_tab_layout_recommend_s.png


+ 7 - 0
app/src/main/res/drawable/main_left_tab_myinfo_selector.xml

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

+ 7 - 0
app/src/main/res/drawable/main_left_tab_recommend_selector.xml

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

二進制
app/src/main/res/drawable/main_tab_layout_myinfo.png


二進制
app/src/main/res/drawable/main_tab_layout_myinfo_s.png


+ 32 - 1
app/src/main/res/layout/activity_crash_dialog.xml

@@ -1,6 +1,37 @@
 <?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">
+        android:layout_height="match_parent"
+        android:background="@color/plum">
 
+    <LinearLayout
+            android:layout_width="match_parent"
+            android:layout_height="wrap_content"
+            android:layout_gravity="center|top"
+            android:divider="@drawable/main_left_tab_divider"
+            android:gravity="center|top"
+            android:showDividers="middle">
+
+        <Button
+                android:id="@+id/main_initrecord"
+                android:layout_width="wrap_content"
+                android:layout_height="wrap_content"
+                android:text="开始录音"
+                android:textSize="40dp"></Button>
+
+        <Button
+                android:id="@+id/main_stoprecord"
+                android:layout_width="200dp"
+                android:layout_height="200dp"
+                android:text="停止录音"
+                android:textSize="40dp"></Button>
+
+
+        <Button
+                android:id="@+id/main_playrecord"
+                android:layout_width="200dp"
+                android:layout_height="200dp"
+                android:text="播放录音"
+                android:textSize="40dp"></Button>
+    </LinearLayout>
 </FrameLayout>

+ 72 - 24
app/src/main/res/layout/activity_main.xml

@@ -4,36 +4,84 @@
         android:layout_height="match_parent">
 
 
-    <androidx.recyclerview.widget.RecyclerView
-            android:id="@+id/main_recyclerview"
+    <FrameLayout
+            android:id="@+id/background"
             android:layout_width="match_parent"
             android:layout_height="match_parent"
-            android:orientation="vertical"></androidx.recyclerview.widget.RecyclerView>
+            android:background="@drawable/main_background"></FrameLayout>
 
 
     <LinearLayout
             android:layout_width="match_parent"
             android:layout_height="match_parent"
-            android:layout_gravity="center"
-            android:gravity="center">
-
-        <Button
-                android:id="@+id/main_initrecord"
-                android:layout_width="wrap_content"
-                android:layout_height="100dp"
-                android:text="开始录音"></Button>
-
-        <Button
-                android:id="@+id/main_stoprecord"
-                android:layout_width="wrap_content"
-                android:layout_height="100dp"
-                android:text="停止录音"></Button>
-
-
-        <Button
-                android:id="@+id/main_playrecord"
-                android:layout_width="wrap_content"
-                android:layout_height="100dp"
-                android:text="播放录音"></Button>
+            android:orientation="horizontal">
+
+        <FrameLayout
+                android:layout_width="0dp"
+                android:layout_height="match_parent"
+                android:layout_weight="1.1">
+
+            <ImageView
+                    android:layout_width="wrap_content"
+                    android:layout_height="match_parent"
+                    android:layout_gravity="left|center"
+                    android:src="@drawable/main_left_tab_bg"></ImageView>
+
+            <RadioGroup
+                    android:id="@+id/main_left_tab_layout"
+                    android:layout_width="wrap_content"
+                    android:layout_height="match_parent"
+                    android:layout_gravity="left"
+                    android:divider="@drawable/main_left_tab_divider"
+                    android:gravity="center"
+                    android:orientation="vertical"
+                    android:showDividers="middle">
+
+                <RadioButton
+                        android:id="@+id/main_left_tab_layout_myinfo"
+                        android:layout_width="140dp"
+                        android:layout_height="140dp"
+                        android:background="@drawable/main_left_tab_myinfo_selector"
+                        android:button="@null"></RadioButton>
+
+                <RadioButton
+                        android:id="@+id/main_left_tab_layout_recommend"
+                        android:layout_width="140dp"
+                        android:layout_height="140dp"
+                        android:background="@drawable/main_left_tab_recommend_selector"
+
+                        android:button="@null"></RadioButton>
+
+                <RadioButton
+                        android:id="@+id/main_left_tab_layout_follow"
+                        android:layout_width="140dp"
+                        android:layout_height="140dp"
+                        android:background="@drawable/main_left_tab_follow_selector"
+                        android:button="@null"></RadioButton>
+
+                <RadioButton
+                        android:id="@+id/main_left_tab_layout_character"
+                        android:layout_width="140dp"
+                        android:layout_height="140dp"
+                        android:background="@drawable/main_left_tab_character_selector"
+                        android:button="@null"></RadioButton>
+
+            </RadioGroup>
+        </FrameLayout>
+
+
+        <FrameLayout
+                android:layout_width="0dp"
+                android:layout_height="match_parent"
+                android:layout_weight="9">
+
+            <FrameLayout
+                    android:id="@+id/main_fragment_layout"
+                    android:layout_width="match_parent"
+                    android:layout_height="match_parent"
+                    android:layout_gravity="center"></FrameLayout>
+
+        </FrameLayout>
     </LinearLayout>
+
 </FrameLayout>

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

@@ -57,7 +57,8 @@
                 android:paddingRight="12dp"
                 android:paddingBottom="8dp"
                 android:progressDrawable="@drawable/cusjzplayer_controller_seekbar"
-                android:thumb="@drawable/jz_bottom_seek_poster" />
+                android:thumb="@drawable/jz_bottom_seek_poster"
+                android:visibility="invisible" />
 
         <TextView
                 android:id="@+id/total"
@@ -96,7 +97,8 @@
             android:layout_height="3dp"
             android:layout_alignParentBottom="true"
             android:max="100"
-            android:progressDrawable="@drawable/cusjzplayer_controller_seekbar" />
+            android:progressDrawable="@drawable/cusjzplayer_controller_seekbar"
+            android:visibility="invisible" />
 
     <ImageView
             android:id="@+id/back_tiny"

+ 1 - 1
gradle.properties

@@ -12,4 +12,4 @@ org.gradle.jvmargs=-Xmx2048m -Dfile.encoding=UTF-8
 # When configured, Gradle will run in incubating parallel mode.
 # This option should only be used with decoupled projects. More details, visit
 # http://www.gradle.org/docs/current/userguide/multi_project_builds.html#sec:decoupled_projects
-# org.gradle.parallel=true
+# org.gradle.parallel=true