Browse Source

卖铺宝Mvp+RxJava+Retrofit第一次提交

dingchao 5 years ago
commit
ef24209704
100 changed files with 3112 additions and 0 deletions
  1. 10 0
      .gitignore
  2. BIN
      .idea/caches/build_file_checksums.ser
  3. 29 0
      .idea/codeStyles/Project.xml
  4. 3 0
      .idea/dictionaries/dingchao.xml
  5. 6 0
      .idea/encodings.xml
  6. 19 0
      .idea/gradle.xml
  7. 34 0
      .idea/misc.xml
  8. 12 0
      .idea/runConfigurations.xml
  9. 7 0
      .idea/vcs.xml
  10. 1 0
      app/.gitignore
  11. 68 0
      app/build.gradle
  12. 21 0
      app/proguard-rules.pro
  13. 26 0
      app/src/androidTest/java/com/youpu/ExampleInstrumentedTest.java
  14. 78 0
      app/src/main/AndroidManifest.xml
  15. 13 0
      app/src/main/java/com/youpu/MainActivity.java
  16. 97 0
      app/src/main/java/com/youpu/adapter/HomeBannerAdapter.java
  17. 210 0
      app/src/main/java/com/youpu/adapter/MultipleItemQuickAdapter.java
  18. 19 0
      app/src/main/java/com/youpu/api/Constants.java
  19. 37 0
      app/src/main/java/com/youpu/api/RetrofitService.java
  20. 103 0
      app/src/main/java/com/youpu/api/manager/FastJsonConverterFactory.java
  21. 41 0
      app/src/main/java/com/youpu/api/manager/FastJsonRequestBodyConverter.java
  22. 41 0
      app/src/main/java/com/youpu/api/manager/FastJsonResponseBodyConverter.java
  23. 55 0
      app/src/main/java/com/youpu/api/manager/RetrofitHelper.java
  24. 91 0
      app/src/main/java/com/youpu/base/BaseActivity.java
  25. 32 0
      app/src/main/java/com/youpu/base/BaseApplication.java
  26. 127 0
      app/src/main/java/com/youpu/base/BaseFragment.java
  27. 244 0
      app/src/main/java/com/youpu/bean/HomeTopDataEntity.java
  28. 85 0
      app/src/main/java/com/youpu/bean/UserEntity.java
  29. 7 0
      app/src/main/java/com/youpu/model/impl/HomeFModelImpl.java
  30. 7 0
      app/src/main/java/com/youpu/model/impl/MainAModelImpl.java
  31. 4 0
      app/src/main/java/com/youpu/model/inter/IHomeFModel.java
  32. 4 0
      app/src/main/java/com/youpu/model/inter/IMainAModel.java
  33. 7 0
      app/src/main/java/com/youpu/presenter/callback/CallBack.java
  34. 55 0
      app/src/main/java/com/youpu/presenter/impl/HomeFPresenterImpl.java
  35. 16 0
      app/src/main/java/com/youpu/presenter/impl/MainAPresenterImpl.java
  36. 13 0
      app/src/main/java/com/youpu/presenter/inter/IHomeFPresenter.java
  37. 4 0
      app/src/main/java/com/youpu/presenter/inter/IMainAPresenter.java
  38. 59 0
      app/src/main/java/com/youpu/util/DialogUtil.java
  39. 10 0
      app/src/main/java/com/youpu/util/sss.java
  40. 281 0
      app/src/main/java/com/youpu/view/activity/MainActivity.java
  41. 85 0
      app/src/main/java/com/youpu/view/diy/home/MultipleItem.java
  42. 32 0
      app/src/main/java/com/youpu/view/diy/sss.java
  43. 72 0
      app/src/main/java/com/youpu/view/diy/viewpager/MyViewPager.java
  44. 41 0
      app/src/main/java/com/youpu/view/diy/viewpager/ViewPagerSlide.java
  45. 155 0
      app/src/main/java/com/youpu/view/fragment/HomeFragment.java
  46. 52 0
      app/src/main/java/com/youpu/view/fragment/PuFragment.java
  47. 16 0
      app/src/main/java/com/youpu/view/inter/IHomeFView.java
  48. 16 0
      app/src/main/java/com/youpu/view/inter/IMainAView.java
  49. 11 0
      app/src/main/res/anim/anim_bottom_in.xml
  50. 11 0
      app/src/main/res/anim/anim_bottom_out.xml
  51. 11 0
      app/src/main/res/anim/anim_left_in.xml
  52. 11 0
      app/src/main/res/anim/anim_left_out.xml
  53. 11 0
      app/src/main/res/anim/anim_right_in.xml
  54. 11 0
      app/src/main/res/anim/anim_right_out.xml
  55. 11 0
      app/src/main/res/anim/anim_top_in.xml
  56. 11 0
      app/src/main/res/anim/anim_top_out.xml
  57. 5 0
      app/src/main/res/anim/dialog_enter.xml
  58. 5 0
      app/src/main/res/anim/dialog_exit.xml
  59. 11 0
      app/src/main/res/anim/photo_dialog_in_anim.xml
  60. 11 0
      app/src/main/res/anim/photo_dialog_out_anim.xml
  61. 34 0
      app/src/main/res/drawable-v24/ic_launcher_foreground.xml
  62. 15 0
      app/src/main/res/drawable/dialog_item_bg_only.xml
  63. 16 0
      app/src/main/res/drawable/dialog_loading.xml
  64. BIN
      app/src/main/res/drawable/home_sel.png
  65. BIN
      app/src/main/res/drawable/home_unsel.png
  66. 170 0
      app/src/main/res/drawable/ic_launcher_background.xml
  67. BIN
      app/src/main/res/drawable/loading_bg.9.png
  68. BIN
      app/src/main/res/drawable/me_sel.png
  69. BIN
      app/src/main/res/drawable/me_unsel.png
  70. BIN
      app/src/main/res/drawable/pu_sel.png
  71. BIN
      app/src/main/res/drawable/pu_unsel.png
  72. 23 0
      app/src/main/res/layout/activity_main.xml
  73. 39 0
      app/src/main/res/layout/dialog_loading.xml
  74. 21 0
      app/src/main/res/layout/fragment_home.xml
  75. 63 0
      app/src/main/res/layout/fragment_pu.xml
  76. 19 0
      app/src/main/res/layout/head_rv_av.xml
  77. 34 0
      app/src/main/res/layout/head_rv_banner.xml
  78. 14 0
      app/src/main/res/layout/head_rv_marqueeview.xml
  79. 14 0
      app/src/main/res/layout/head_rv_number.xml
  80. 15 0
      app/src/main/res/layout/head_rv_pulist.xml
  81. 11 0
      app/src/main/res/layout/home_indicator_image.xml
  82. 5 0
      app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml
  83. 5 0
      app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml
  84. BIN
      app/src/main/res/mipmap-hdpi/hong_indicator.png
  85. BIN
      app/src/main/res/mipmap-hdpi/hui_indicator.png
  86. BIN
      app/src/main/res/mipmap-hdpi/ic_launcher.png
  87. BIN
      app/src/main/res/mipmap-hdpi/ic_launcher_round.png
  88. BIN
      app/src/main/res/mipmap-mdpi/ic_launcher.png
  89. BIN
      app/src/main/res/mipmap-mdpi/ic_launcher_round.png
  90. BIN
      app/src/main/res/mipmap-xhdpi/ic_launcher.png
  91. BIN
      app/src/main/res/mipmap-xhdpi/ic_launcher_round.png
  92. BIN
      app/src/main/res/mipmap-xxhdpi/dialog_loading_img.png
  93. BIN
      app/src/main/res/mipmap-xxhdpi/ic_launcher.png
  94. BIN
      app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png
  95. BIN
      app/src/main/res/mipmap-xxxhdpi/ic_launcher.png
  96. BIN
      app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png
  97. 6 0
      app/src/main/res/values/colors.xml
  98. 3 0
      app/src/main/res/values/strings.xml
  99. 40 0
      app/src/main/res/values/styles.xml
  100. 0 0
      app/src/test/java/com/youpu/ExampleUnitTest.java

+ 10 - 0
.gitignore

@@ -0,0 +1,10 @@
+*.iml
+.gradle
+/local.properties
+/.idea/libraries
+/.idea/modules.xml
+/.idea/workspace.xml
+.DS_Store
+/build
+/captures
+.externalNativeBuild

BIN
.idea/caches/build_file_checksums.ser


+ 29 - 0
.idea/codeStyles/Project.xml

@@ -0,0 +1,29 @@
+<component name="ProjectCodeStyleConfiguration">
+  <code_scheme name="Project" version="173">
+    <Objective-C-extensions>
+      <file>
+        <option name="com.jetbrains.cidr.lang.util.OCDeclarationKind" value="Import" />
+        <option name="com.jetbrains.cidr.lang.util.OCDeclarationKind" value="Macro" />
+        <option name="com.jetbrains.cidr.lang.util.OCDeclarationKind" value="Typedef" />
+        <option name="com.jetbrains.cidr.lang.util.OCDeclarationKind" value="Enum" />
+        <option name="com.jetbrains.cidr.lang.util.OCDeclarationKind" value="Constant" />
+        <option name="com.jetbrains.cidr.lang.util.OCDeclarationKind" value="Global" />
+        <option name="com.jetbrains.cidr.lang.util.OCDeclarationKind" value="Struct" />
+        <option name="com.jetbrains.cidr.lang.util.OCDeclarationKind" value="FunctionPredecl" />
+        <option name="com.jetbrains.cidr.lang.util.OCDeclarationKind" value="Function" />
+      </file>
+      <class>
+        <option name="com.jetbrains.cidr.lang.util.OCDeclarationKind" value="Property" />
+        <option name="com.jetbrains.cidr.lang.util.OCDeclarationKind" value="Synthesize" />
+        <option name="com.jetbrains.cidr.lang.util.OCDeclarationKind" value="InitMethod" />
+        <option name="com.jetbrains.cidr.lang.util.OCDeclarationKind" value="StaticMethod" />
+        <option name="com.jetbrains.cidr.lang.util.OCDeclarationKind" value="InstanceMethod" />
+        <option name="com.jetbrains.cidr.lang.util.OCDeclarationKind" value="DeallocMethod" />
+      </class>
+      <extensions>
+        <pair source="cpp" header="h" fileNamingConvention="NONE" />
+        <pair source="c" header="h" fileNamingConvention="NONE" />
+      </extensions>
+    </Objective-C-extensions>
+  </code_scheme>
+</component>

+ 3 - 0
.idea/dictionaries/dingchao.xml

@@ -0,0 +1,3 @@
+<component name="ProjectDictionaryState">
+  <dictionary name="dingchao" />
+</component>

+ 6 - 0
.idea/encodings.xml

@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project version="4">
+  <component name="Encoding" defaultCharsetForPropertiesFiles="UTF-8">
+    <file url="PROJECT" charset="UTF-8" />
+  </component>
+</project>

+ 19 - 0
.idea/gradle.xml

@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project version="4">
+  <component name="GradleSettings">
+    <option name="linkedExternalProjectsSettings">
+      <GradleProjectSettings>
+        <option name="distributionType" value="DEFAULT_WRAPPED" />
+        <option name="externalProjectPath" value="$PROJECT_DIR$" />
+        <option name="modules">
+          <set>
+            <option value="$PROJECT_DIR$" />
+            <option value="$PROJECT_DIR$/app" />
+            <option value="$PROJECT_DIR$/dcscreenadaptation" />
+          </set>
+        </option>
+        <option name="resolveModulePerSourceSet" value="false" />
+      </GradleProjectSettings>
+    </option>
+  </component>
+</project>

+ 34 - 0
.idea/misc.xml

@@ -0,0 +1,34 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project version="4">
+  <component name="NullableNotNullManager">
+    <option name="myDefaultNullable" value="android.support.annotation.Nullable" />
+    <option name="myDefaultNotNull" value="android.support.annotation.NonNull" />
+    <option name="myNullables">
+      <value>
+        <list size="5">
+          <item index="0" class="java.lang.String" itemvalue="org.jetbrains.annotations.Nullable" />
+          <item index="1" class="java.lang.String" itemvalue="javax.annotation.Nullable" />
+          <item index="2" class="java.lang.String" itemvalue="javax.annotation.CheckForNull" />
+          <item index="3" class="java.lang.String" itemvalue="edu.umd.cs.findbugs.annotations.Nullable" />
+          <item index="4" class="java.lang.String" itemvalue="android.support.annotation.Nullable" />
+        </list>
+      </value>
+    </option>
+    <option name="myNotNulls">
+      <value>
+        <list size="4">
+          <item index="0" class="java.lang.String" itemvalue="org.jetbrains.annotations.NotNull" />
+          <item index="1" class="java.lang.String" itemvalue="javax.annotation.Nonnull" />
+          <item index="2" class="java.lang.String" itemvalue="edu.umd.cs.findbugs.annotations.NonNull" />
+          <item index="3" class="java.lang.String" itemvalue="android.support.annotation.NonNull" />
+        </list>
+      </value>
+    </option>
+  </component>
+  <component name="ProjectRootManager" version="2" languageLevel="JDK_1_8" project-jdk-name="1.8" project-jdk-type="JavaSDK">
+    <output url="file://$PROJECT_DIR$/build/classes" />
+  </component>
+  <component name="ProjectType">
+    <option name="id" value="Android" />
+  </component>
+</project>

+ 12 - 0
.idea/runConfigurations.xml

@@ -0,0 +1,12 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project version="4">
+  <component name="RunConfigurationProducerService">
+    <option name="ignoredProducers">
+      <set>
+        <option value="org.jetbrains.plugins.gradle.execution.test.runner.AllInPackageGradleConfigurationProducer" />
+        <option value="org.jetbrains.plugins.gradle.execution.test.runner.TestClassGradleConfigurationProducer" />
+        <option value="org.jetbrains.plugins.gradle.execution.test.runner.TestMethodGradleConfigurationProducer" />
+      </set>
+    </option>
+  </component>
+</project>

+ 7 - 0
.idea/vcs.xml

@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project version="4">
+  <component name="VcsDirectoryMappings">
+    <mapping directory="$PROJECT_DIR$" vcs="Git" />
+    <mapping directory="D:\youpu\maipubao\project\youpu\up-android" vcs="Git" />
+  </component>
+</project>

+ 1 - 0
app/.gitignore

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

+ 68 - 0
app/build.gradle

@@ -0,0 +1,68 @@
+apply plugin: 'com.android.application'
+
+android {
+    compileSdkVersion 27
+    defaultConfig {
+        applicationId "com.youpu"
+        minSdkVersion 21
+        targetSdkVersion 27
+        versionCode 1
+        versionName "1.0"
+        testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
+    }
+    buildTypes {
+        release {
+            minifyEnabled false
+            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
+        }
+    }
+    compileOptions {
+        sourceCompatibility JavaVersion.VERSION_1_8
+        targetCompatibility JavaVersion.VERSION_1_8
+    }
+}
+
+dependencies {
+    implementation fileTree(include: ['*.jar'], dir: 'libs')
+    implementation 'com.android.support:appcompat-v7:27.1.1'
+    implementation 'com.android.support.constraint:constraint-layout:1.1.2'
+    testImplementation 'junit:junit:4.12'
+    androidTestImplementation 'com.android.support.test:runner:1.0.2'
+    androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2'
+    /*app适配*/
+    implementation project(':dcscreenadaptation')
+
+    //卡片布局
+    implementation 'com.android.support:cardview-v7:27.1.1'
+    //Rx系列
+    implementation 'io.reactivex.rxjava2:rxjava:2.1.3'
+    implementation 'com.squareup.retrofit2:retrofit:2.3.0'
+    implementation 'com.squareup.retrofit2:converter-gson:2.3.0'
+    implementation 'com.squareup.retrofit2:adapter-rxjava2:2.3.0'
+    implementation 'io.reactivex.rxjava2:rxandroid:2.0.1'
+    //OkHttp
+    implementation 'com.squareup.okhttp3:okhttp:3.9.0'
+    implementation 'com.squareup.okhttp3:logging-interceptor:3.9.0'
+    //Retrofit
+    implementation 'com.squareup.retrofit2:converter-scalars:2.3.0'
+    implementation 'com.trello.rxlifecycle2:rxlifecycle-components:2.1.0'
+    //FastJson
+    implementation 'com.alibaba:fastjson:1.2.47'
+    androidTestImplementation 'com.android.support.test:runner:1.0.2'
+    androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2'
+
+    //    底部切换
+    implementation 'com.ashokvarma.android:bottom-navigation-bar:2.0.4'
+    //    注解
+    //解决Android3.0以后不能butterknife问题
+    //http://blog.csdn.net/jianggujin/article/details/78507524
+    implementation 'com.jakewharton:butterknife:8.4.0'
+    annotationProcessor 'com.jakewharton:butterknife-compiler:8.4.0'
+    implementation 'com.android.support:design:27.1.1'
+    //首页复杂布局BaseRecyclerViewAdapterHelper
+    implementation 'com.github.CymChad:BaseRecyclerViewAdapterHelper:2.8.1'
+
+
+    //图片加载框架Glide
+    implementation 'com.github.bumptech.glide:glide:4.7.1'
+}

+ 21 - 0
app/proguard-rules.pro

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

+ 26 - 0
app/src/androidTest/java/com/youpu/ExampleInstrumentedTest.java

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

+ 78 - 0
app/src/main/AndroidManifest.xml

@@ -0,0 +1,78 @@
+<?xml version="1.0" encoding="utf-8"?>
+<manifest xmlns:android="http://schemas.android.com/apk/res/android"
+    package="com.youpu">
+
+    <!--所需权限-->
+    <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
+    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
+    <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
+    <uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />
+    <uses-permission android:name="android.permission.READ_PHONE_STATE" />
+    <uses-permission android:name="android.permission.INTERNET" />
+    <uses-permission android:name="android.permission.READ_LOGS" />
+    <uses-permission android:name="android.permission.VIBRATE" />
+    <uses-permission android:name="android.permission.WAKE_LOCK" />
+    <uses-permission android:name="android.permission.WRITE_SETTINGS" />
+
+    <!--直接拨打电话权限-->
+    <uses-permission android:name="android.permission.CALL_PHONE" />
+
+    <!--广播跳转-->
+    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
+
+    <!--百度地图-->
+    <!--百度地图权限-->
+    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
+    <uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS" />
+
+    <!--Mob分享-->
+    <uses-permission android:name="android.permission.GET_TASKS" />
+    <!-- 短信验证登陆功能需要添加次权限来自动填充验证码,用不到可以去掉 -->
+    <uses-permission android:name="android.permission.RECEIVE_SMS" />
+    <uses-permission android:name="android.permission.READ_SMS" />
+
+
+    <!--微信支付权限-->
+    <uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS" />
+
+    <!--支付宝支付权限-->
+    <!-- 安卓读写sd权限 -->
+    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
+
+    <application
+        android:name=".base.BaseApplication"
+        android:allowBackup="true"
+        android:icon="@mipmap/ic_launcher"
+        android:label="@string/app_name"
+        android:roundIcon="@mipmap/ic_launcher_round"
+        android:supportsRtl="true"
+        android:theme="@style/AppTheme">
+        <activity android:name=".view.activity.MainActivity">
+            <intent-filter>
+                <action android:name="android.intent.action.MAIN" />
+
+                <category android:name="android.intent.category.LAUNCHER" />
+            </intent-filter>
+        </activity>
+
+
+
+        <!--自定义适配方法尺寸信息,注意标签-->
+        <!--注意这里要记得设置,否则会在util中报空指针错误-->
+        <!--屏幕宽度-->
+        <meta-data
+            android:name="designwidth"
+            android:value="1080" />
+        <meta-data
+            android:name="designdpi"
+            android:value="480" />
+        <meta-data
+            android:name="fontsize"
+            android:value="1.0" />
+        <meta-data
+            android:name="unit"
+            android:value="px" />
+
+    </application>
+
+</manifest>

+ 13 - 0
app/src/main/java/com/youpu/MainActivity.java

@@ -0,0 +1,13 @@
+package com.youpu;
+
+import android.support.v7.app.AppCompatActivity;
+import android.os.Bundle;
+
+public class MainActivity extends AppCompatActivity {
+
+    @Override
+    protected void onCreate(Bundle savedInstanceState) {
+        super.onCreate(savedInstanceState);
+        setContentView(R.layout.activity_main);
+    }
+}

+ 97 - 0
app/src/main/java/com/youpu/adapter/HomeBannerAdapter.java

@@ -0,0 +1,97 @@
+package com.youpu.adapter;
+
+import android.content.Context;
+import android.support.annotation.NonNull;
+import android.support.v4.view.PagerAdapter;
+import android.view.View;
+import android.view.ViewGroup;
+import android.widget.ImageView;
+import android.widget.LinearLayout;
+
+import com.bumptech.glide.Glide;
+import com.bumptech.glide.load.engine.DiskCacheStrategy;
+import com.bumptech.glide.request.RequestOptions;
+import com.youpu.R;
+import com.youpu.bean.HomeTopDataEntity;
+
+import java.util.List;
+
+/**
+ * @ClassName: HomeBannerAdapter
+ * @Description: 首页轮播图适配器
+ * @Author: dingchao
+ * @Date: 2018/8/13 17:04
+ */
+public class HomeBannerAdapter extends PagerAdapter {
+    private Context context;
+    private List<HomeTopDataEntity.DataBean.ImgUrlBean> imgUrlBeanList;
+
+    public HomeBannerAdapter(Context context, List<HomeTopDataEntity.DataBean.ImgUrlBean> imgUrlBeanList) {
+        this.context = context;
+        this.imgUrlBeanList = imgUrlBeanList;
+    }
+
+    @Override
+    public int getCount() {
+        //因为要是实现无限循环功能,所以这里不规定Count
+        return Integer.MAX_VALUE;
+    }
+
+    @Override
+    public boolean isViewFromObject(@NonNull View view, @NonNull Object object) {
+        return view == object;
+    }
+
+    @NonNull
+    @Override
+    public Object instantiateItem(@NonNull ViewGroup container, int position) {
+
+        ImageView imageView = new ImageView(context);
+        LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT);
+        imageView.setLayoutParams(params);
+        imageView.setScaleType(ImageView.ScaleType.FIT_XY);
+        position %= imgUrlBeanList.size();
+        if (position < 0) {
+            position = imgUrlBeanList.size() + position;
+        }
+        //判断非空
+        if (imgUrlBeanList.get(position % imgUrlBeanList.size()).getUrl() != null && !("").equals(imgUrlBeanList.get(position % imgUrlBeanList.size()).getUrl())) {
+            //图片加载使用Glide4.7设置方法不同
+            //override(400,400);//指定图片的尺寸
+            //.circleCrop();//圆形图片
+
+            RequestOptions options = new RequestOptions()
+                    .placeholder(R.mipmap.dialog_loading_img)//加载成功之前的占位图
+                    .error(R.mipmap.ic_launcher)//加载错误之后的错误图
+                    .diskCacheStrategy(DiskCacheStrategy.RESOURCE);
+            Glide.with(context)
+                    .load(imgUrlBeanList.get(position % imgUrlBeanList.size()).getUrl())//加载的地址
+                    .apply(options).into(imageView);
+
+        }
+        container.addView(imageView);
+        return imageView;
+    }
+
+    @Override
+    public void destroyItem(@NonNull ViewGroup container, int position, @NonNull Object object) {
+        container.removeView((View) object);
+    }
+
+
+    public Context getContext() {
+        return context;
+    }
+
+    public void setContext(Context context) {
+        this.context = context;
+    }
+
+    public List<HomeTopDataEntity.DataBean.ImgUrlBean> getImgUrlBeanList() {
+        return imgUrlBeanList;
+    }
+
+    public void setImgUrlBeanList(List<HomeTopDataEntity.DataBean.ImgUrlBean> imgUrlBeanList) {
+        this.imgUrlBeanList = imgUrlBeanList;
+    }
+}

+ 210 - 0
app/src/main/java/com/youpu/adapter/MultipleItemQuickAdapter.java

@@ -0,0 +1,210 @@
+package com.youpu.adapter;
+
+import android.annotation.SuppressLint;
+import android.content.Context;
+import android.os.Handler;
+import android.os.Message;
+import android.support.v4.view.ViewPager;
+import android.util.Log;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.ViewGroup;
+import android.widget.ImageView;
+import android.widget.LinearLayout;
+import android.widget.TextView;
+
+import com.chad.library.adapter.base.BaseMultiItemQuickAdapter;
+import com.chad.library.adapter.base.BaseViewHolder;
+import com.youpu.R;
+import com.youpu.bean.HomeTopDataEntity;
+import com.youpu.view.diy.home.MultipleItem;
+import com.youpu.view.diy.viewpager.MyViewPager;
+
+import java.util.List;
+
+/**
+ * @ClassName: MultipleItemQuickAdapter
+ * @Description: 总的适配器
+ * @Author: dingchao
+ * @Date: 2018/8/10 16:06
+ */
+public class MultipleItemQuickAdapter extends BaseMultiItemQuickAdapter<MultipleItem, BaseViewHolder> {
+    private Context context;
+
+    /**
+     * Same as QuickAdapter#QuickAdapter(Context,int) but with
+     * some initialization data.
+     *
+     * @param data A new list is created out of this one to avoid mutable list
+     */
+    public MultipleItemQuickAdapter(List<MultipleItem> data, Context context) {
+        super(data);
+        this.context = context;
+
+//        添加Type对应的布局
+        addItemType(MultipleItem.TYPE_0, R.layout.head_rv_banner);//轮播图
+        addItemType(MultipleItem.TYPE_1, R.layout.head_rv_av);//按钮
+        addItemType(MultipleItem.TYPE_2, R.layout.head_rv_number);//数字
+        addItemType(MultipleItem.TYPE_3, R.layout.head_rv_marqueeview);//资讯
+        addItemType(MultipleItem.TYPE_4, R.layout.head_rv_pulist);//列表
+    }
+
+
+    /*轮播图自动滑动*/
+    @SuppressLint("HandlerLeak")
+    private Handler handler = new Handler() {
+        @Override
+        public void handleMessage(Message msg) {
+            super.handleMessage(msg);
+            if (msg.what == 0) {
+                if (head_viewPager != null) {
+                    head_viewPager.setCurrentItem(head_viewPager.getCurrentItem() + 1);
+                }
+//                handler.sendEmptyMessageDelayed(0, 5000);
+            }
+        }
+    };
+
+
+    @Override
+    protected void convert(BaseViewHolder helper, MultipleItem item) {
+//        根据不同的type值处理不同的数据绑定
+        switch (helper.getItemViewType()) {
+            case MultipleItem.TYPE_0:
+                initViewPager(helper, item.getImgUrlBeanList());
+//                initViewPager(helper,item.getDataText());
+                break;
+            case MultipleItem.TYPE_1:
+                initAn(helper, item.getDataText());
+                break;
+            case MultipleItem.TYPE_2:
+                initNum(helper, item.getDataText());
+                break;
+            case MultipleItem.TYPE_3:
+                initZx(helper, item.getDataText());
+                break;
+            case MultipleItem.TYPE_4:
+                initList(helper, item.getDataText());
+                break;
+        }
+    }
+
+    private TextView tv_banner, tv_an, tv_num, tv_zx, tv_list;
+
+
+    /*banner相关*/
+    private MyViewPager head_viewPager;
+    private LinearLayout mIndicator;
+    private ImageView[] mImageView;
+    private HomeBannerAdapter homeBannerAdapter;//首页轮播图适配器
+
+    //初始化轮播图
+    private void initViewPager(BaseViewHolder helper, List<HomeTopDataEntity.DataBean.ImgUrlBean> imgUrlBean) {
+        Log.e("HomeFragment", "initViewPager-------74-->imgUrlBean.size():" + imgUrlBean.size());
+//    private void initViewPager(BaseViewHolder helper, String dataText) {
+        head_viewPager = helper.getView(R.id.head_viewPager);
+        mIndicator = helper.getView(R.id.indicator);
+
+        homeBannerAdapter = new HomeBannerAdapter(context, imgUrlBean);
+        head_viewPager.setAdapter(homeBannerAdapter);
+
+        int i = head_viewPager.getCurrentItem();
+
+        head_viewPager.setCurrentItem(6000 * (i % imgUrlBean.size() + 1));
+
+        if (imgUrlBean != null) {
+            initIndicator(imgUrlBean);
+        }
+
+        head_viewPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() {
+            @Override
+            public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
+
+            }
+
+            @Override
+            public void onPageSelected(int position) {
+                setIndicator(position, imgUrlBean);
+            }
+
+            @Override
+            public void onPageScrollStateChanged(int state) {
+                /**
+                 * state==1:正在滑动状态
+                 * state==2:滑动完毕状态
+                 * state==0:什么都没操作
+                 */
+                switch (state) {
+                    case 0:
+                        break;
+                    case 1:
+                        handler.removeCallbacksAndMessages(null);
+                        break;
+                    case 2:
+                        handler.sendEmptyMessageDelayed(0, 5000);
+                        break;
+                }
+            }
+        });
+        if (!handler.hasMessages(0)) {
+            handler.sendEmptyMessage(0);
+        }
+
+    }
+
+    //初始化按钮
+    private void initAn(BaseViewHolder helper, String dataText) {
+        tv_an = helper.getView(R.id.tv_av);
+        tv_an.setText(dataText);
+    }
+
+    //初始化数字
+    private void initNum(BaseViewHolder helper, String dataText) {
+        tv_num = helper.getView(R.id.tv_num);
+        tv_num.setText(dataText);
+    }
+
+    //初始化资讯
+    private void initZx(BaseViewHolder helper, String dataText) {
+        tv_zx = helper.getView(R.id.tv_zx);
+        tv_zx.setText(dataText);
+    }
+
+    //初始化列表
+    private void initList(BaseViewHolder helper, String dataText) {
+        tv_list = helper.getView(R.id.tv_list);
+        tv_list.setText(dataText);
+    }
+
+
+    /*设置轮播图的点*/
+    private void initIndicator(List<HomeTopDataEntity.DataBean.ImgUrlBean> url) {
+        mImageView = new ImageView[url.size()];
+        for (int i = 0; i < url.size(); i++) {
+            View view = LayoutInflater.from(context).inflate(R.layout.home_indicator_image, null);
+            view.findViewById(R.id.indicator_iamge).setBackgroundResource(R.mipmap.hong_indicator);
+            view.findViewById(R.id.indicator_iamge).setBackgroundResource(R.mipmap.hong_indicator);
+            mImageView[i] = new ImageView(context);
+            if (i == 0) {
+                mImageView[i].setBackgroundResource(R.mipmap.hong_indicator);
+            } else {
+                mImageView[i].setBackgroundResource(R.mipmap.hui_indicator);
+                LinearLayout.LayoutParams layoutParams = new LinearLayout.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT);
+                layoutParams.setMargins(20, 0, 0, 0);
+                mImageView[i].setLayoutParams(layoutParams);
+            }
+            mIndicator.addView(mImageView[i]);
+        }
+    }
+
+    /*设置几个banner图动态生成*/
+    private void setIndicator(int position, List<HomeTopDataEntity.DataBean.ImgUrlBean> url) {
+        position %= url.size();
+        for (int i = 0; i < url.size(); i++) {
+            mImageView[i].setBackgroundResource(R.mipmap.hong_indicator);
+            if (position != i) {
+                mImageView[i].setBackgroundResource(R.mipmap.hui_indicator);
+            }
+        }
+    }
+}

+ 19 - 0
app/src/main/java/com/youpu/api/Constants.java

@@ -0,0 +1,19 @@
+package com.youpu.api;
+
+/**
+ * @ClassName: Constants
+ * @Description: 跟地址
+ * @Author: dingchao
+ * @Date: 2018/8/10 14:00
+ */
+public class Constants {
+    //    网络请求根地址路径
+
+    //    测试地址
+//    public static final String BASE_URL = "http://api.zpb.yingshangchina.com/";
+
+    //    正式地址
+    public static final String BASE_URL = "http://api.zpb.youpuchina.com/";
+
+
+}

+ 37 - 0
app/src/main/java/com/youpu/api/RetrofitService.java

@@ -0,0 +1,37 @@
+package com.youpu.api;
+
+
+
+import com.youpu.bean.HomeTopDataEntity;
+import com.youpu.bean.UserEntity;
+
+import io.reactivex.Observable;
+import retrofit2.http.Field;
+import retrofit2.http.FormUrlEncoded;
+import retrofit2.http.GET;
+import retrofit2.http.POST;
+
+/**
+ * Retrofit请求参数接口
+ */
+public interface RetrofitService {
+
+
+    @POST("user/sendsms")
+    @FormUrlEncoded
+    Observable<String> getYzmCode(@Field("phoneNumber") String phone);
+
+
+    @POST("login")
+    @FormUrlEncoded
+    Observable<UserEntity> login(@Field("account") String phone, @Field("password") String yzm, @Field("channel") String channel);
+
+//    @POST()
+//    @FormUrlEncoded
+//    Observable<UserEntity> getUserInfoRx(@Field(""));
+
+
+    @GET("show/showInfo")
+//    @GET("show/showInfo")
+    Observable<HomeTopDataEntity> getHomeTopData();
+}

+ 103 - 0
app/src/main/java/com/youpu/api/manager/FastJsonConverterFactory.java

@@ -0,0 +1,103 @@
+package com.youpu.api.manager;
+
+import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.parser.Feature;
+import com.alibaba.fastjson.parser.ParserConfig;
+import com.alibaba.fastjson.serializer.SerializeConfig;
+import com.alibaba.fastjson.serializer.SerializerFeature;
+
+import java.lang.annotation.Annotation;
+import java.lang.reflect.Type;
+
+import okhttp3.RequestBody;
+import okhttp3.ResponseBody;
+import retrofit2.Converter;
+import retrofit2.Retrofit;
+
+
+/**
+ * A {@linkplain Converter.Factory converter} which uses FastJson for JSON.
+ * <p>
+ * Because FastJson is so flexible in the types it supports, this converter assumes that it can
+ * handle all types. If you are mixing JSON serialization with something else (such as protocol
+ * buffers), you must {@linkplain Retrofit.Builder#addConverterFactory(Converter.Factory) add
+ * this instance} last to allow the other converters a chance to see their types.
+ */
+public class FastJsonConverterFactory extends Converter.Factory {
+
+    private ParserConfig mParserConfig = ParserConfig.getGlobalInstance();
+    private int featureValues = JSON.DEFAULT_PARSER_FEATURE;
+    private Feature[] features;
+
+    private SerializeConfig serializeConfig;
+    private SerializerFeature[] serializerFeatures;
+
+    /**
+     * Create an default instance for conversion. Encoding to JSON and
+     * decoding from JSON (when no charset is specified by a header) will use UTF-8.
+     * @return The instance of FastJsonConverterFactory
+     */
+    public static FastJsonConverterFactory create() {
+        return new FastJsonConverterFactory();
+    }
+
+    private FastJsonConverterFactory() {
+    }
+
+    @Override
+    public Converter<ResponseBody, ?> responseBodyConverter(Type type, Annotation[] annotations,
+                                                            Retrofit retrofit) {
+        return new FastJsonResponseBodyConverter<>(type, mParserConfig, featureValues, features);
+    }
+
+    @Override
+    public Converter<?, RequestBody> requestBodyConverter(Type type,
+                                                          Annotation[] parameterAnnotations, Annotation[] methodAnnotations, Retrofit retrofit) {
+        return new FastJsonRequestBodyConverter<>(serializeConfig, serializerFeatures);
+    }
+
+    public ParserConfig getParserConfig() {
+        return mParserConfig;
+    }
+
+    public FastJsonConverterFactory setParserConfig(ParserConfig config) {
+        this.mParserConfig = config;
+        return this;
+    }
+
+    public int getParserFeatureValues() {
+        return featureValues;
+    }
+
+    public FastJsonConverterFactory setParserFeatureValues(int featureValues) {
+        this.featureValues = featureValues;
+        return this;
+    }
+
+    public Feature[] getParserFeatures() {
+        return features;
+    }
+
+    public FastJsonConverterFactory setParserFeatures(Feature[] features) {
+        this.features = features;
+        return this;
+    }
+
+    public SerializeConfig getSerializeConfig() {
+        return serializeConfig;
+    }
+
+    public FastJsonConverterFactory setSerializeConfig(SerializeConfig serializeConfig) {
+        this.serializeConfig = serializeConfig;
+        return this;
+    }
+
+    public SerializerFeature[] getSerializerFeatures() {
+        return serializerFeatures;
+    }
+
+    public FastJsonConverterFactory setSerializerFeatures(SerializerFeature[] features) {
+        this.serializerFeatures = features;
+        return this;
+    }
+}

+ 41 - 0
app/src/main/java/com/youpu/api/manager/FastJsonRequestBodyConverter.java

@@ -0,0 +1,41 @@
+package com.youpu.api.manager;
+
+import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.serializer.SerializeConfig;
+import com.alibaba.fastjson.serializer.SerializerFeature;
+
+import java.io.IOException;
+
+import okhttp3.MediaType;
+import okhttp3.RequestBody;
+import retrofit2.Converter;
+
+final class FastJsonRequestBodyConverter<T> implements Converter<T, RequestBody> {
+    private static final MediaType MEDIA_TYPE = MediaType.parse("application/json; charset=UTF-8");
+    private SerializeConfig serializeConfig;
+    private SerializerFeature[] serializerFeatures;
+
+    FastJsonRequestBodyConverter(SerializeConfig config, SerializerFeature... features) {
+        serializeConfig = config;
+        serializerFeatures = features;
+    }
+
+    @Override
+    public RequestBody convert(T value) throws IOException {
+        byte[] content;
+        if (serializeConfig != null) {
+            if (serializerFeatures != null) {
+                content = JSON.toJSONBytes(value, serializeConfig, serializerFeatures);
+            } else {
+                content = JSON.toJSONBytes(value, serializeConfig);
+            }
+        } else {
+            if (serializerFeatures != null) {
+                content = JSON.toJSONBytes(value, serializerFeatures);
+            } else {
+                content = JSON.toJSONBytes(value);
+            }
+        }
+        return RequestBody.create(MEDIA_TYPE, content);
+    }
+}

+ 41 - 0
app/src/main/java/com/youpu/api/manager/FastJsonResponseBodyConverter.java

@@ -0,0 +1,41 @@
+package com.youpu.api.manager;
+
+
+import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.parser.Feature;
+import com.alibaba.fastjson.parser.ParserConfig;
+
+import java.io.IOException;
+import java.lang.reflect.Type;
+
+import okhttp3.ResponseBody;
+import retrofit2.Converter;
+
+final class FastJsonResponseBodyConverter<T> implements Converter<ResponseBody, T> {
+
+    private static final Feature[] EMPTY_SERIALIZER_FEATURES = new Feature[0];
+
+    private Type mType;
+
+    private ParserConfig config;
+    private int featureValues;
+    private Feature[] features;
+
+    FastJsonResponseBodyConverter(Type type, ParserConfig config, int featureValues,
+                                  Feature... features) {
+        mType = type;
+        this.config = config;
+        this.featureValues = featureValues;
+        this.features = features;
+    }
+
+    @Override
+    public T convert(ResponseBody value) throws IOException {
+        try {
+            return JSON.parseObject(value.string(), mType, config, featureValues,
+                    features != null ? features : EMPTY_SERIALIZER_FEATURES);
+        } finally {
+            value.close();
+        }
+    }
+}

+ 55 - 0
app/src/main/java/com/youpu/api/manager/RetrofitHelper.java

@@ -0,0 +1,55 @@
+package com.youpu.api.manager;
+
+
+import android.content.Context;
+
+
+import com.youpu.api.Constants;
+import com.youpu.api.RetrofitService;
+
+import retrofit2.Retrofit;
+import retrofit2.adapter.rxjava2.RxJava2CallAdapterFactory;
+
+/**
+ * 获取RetrofitService实例
+ * Created by dingchao on 2017/6/27.
+ */
+
+public class RetrofitHelper {
+
+    public static RetrofitHelper retrofitHelper;
+    private RetrofitService retrofitService;
+    private static Context mContext;
+
+    /*public static RetrofitHelper getInstance() {
+        return retrofitHelper == null ? retrofitHelper = new RetrofitHelper(mContext) : retrofitHelper;
+    }*/
+
+    public RetrofitHelper() {
+        // 初始化Retrofit
+        Retrofit retrofit = new Retrofit.Builder()
+                .baseUrl(Constants.BASE_URL)
+                .addConverterFactory(FastJsonConverterFactory.create()) // json解析,使用的FastJson,如果想使用Gson替换括号中的内容即可
+                .addCallAdapterFactory(RxJava2CallAdapterFactory.create()) // 支持RxJava
+                .build();
+        retrofitService = retrofit.create(RetrofitService.class);
+    }
+
+    public RetrofitService getRetrofitService() {
+        return retrofitService;
+    }
+
+
+    /**
+     * 单例模式,得到requestbusiness的实例
+     *
+     * @return
+     */
+    public static synchronized RetrofitHelper getInstance() {
+        if (retrofitHelper == null) {
+            retrofitHelper = new RetrofitHelper();
+        }
+        return retrofitHelper;
+    }
+
+}

+ 91 - 0
app/src/main/java/com/youpu/base/BaseActivity.java

@@ -0,0 +1,91 @@
+package com.youpu.base;
+
+import android.app.Activity;
+import android.app.Application;
+import android.content.Context;
+import android.os.Bundle;
+import android.support.annotation.Nullable;
+import android.support.v7.app.AppCompatActivity;
+import android.widget.Toast;
+
+import com.dc.dcscreenadaptation.ScreenAdapterTools;
+
+import butterknife.ButterKnife;
+import butterknife.Unbinder;
+
+
+/**
+ * @ClassName: BaseActivity
+ * @Description: Activity基类
+ * @Author: dingchao
+ * @Date: 2018/8/8 13:50
+ */
+public abstract class BaseActivity extends AppCompatActivity {
+
+    protected Context mContext;
+    protected Activity mActivity;
+    protected Context appContext;
+    protected Application mApplication;
+
+    protected static Toast toast;
+    protected Unbinder mUnbinder;
+    @Override
+    protected void onCreate(@Nullable Bundle savedInstanceState) {
+        super.onCreate(savedInstanceState);
+        mContext = this;
+        mActivity = this;
+        appContext = getApplicationContext();
+        mApplication = getApplication();
+
+
+
+
+        setContentView(getLayout());
+//        注意绑定要在绑定试图之后写
+        mUnbinder = ButterKnife.bind(this);
+
+
+        setOrientation();
+       /* if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {//5.0 全透明状态栏
+            View decorView = getWindow().getDecorView();
+            int option = View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
+                    | View.SYSTEM_UI_FLAG_LAYOUT_STABLE;
+            decorView.setSystemUiVisibility(option);
+            getWindow().setStatusBarColor(Color.TRANSPARENT);
+        } else if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {//4.4 全透明状态栏
+            WindowManager.LayoutParams localLayoutParams = getWindow().getAttributes();
+            localLayoutParams.flags = (WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS | localLayoutParams.flags);
+        }*/
+
+        initEvent();
+    }
+
+    @Override
+    protected void onDestroy() {
+        mUnbinder.unbind();
+        super.onDestroy();
+    }
+
+    public void showMsg(String msg) {
+        toast = Toast.makeText(appContext, "", Toast.LENGTH_SHORT);
+        toast.setText(msg);
+        toast.show();
+    }
+
+
+    /**
+     * 最新屏幕适配测试
+     */
+
+    public void setOrientation() {
+//        Density.setDefault(mActivity);
+        ScreenAdapterTools.getInstance().reset(this);//如果希望android7.0分屏也适配的话,加上这句
+        ScreenAdapterTools.getInstance().loadView(getWindow().getDecorView());
+
+    }
+
+    protected abstract int getLayout();
+
+    protected abstract void initEvent();
+}
+

+ 32 - 0
app/src/main/java/com/youpu/base/BaseApplication.java

@@ -0,0 +1,32 @@
+package com.youpu.base;
+
+import android.app.Application;
+import android.content.res.Configuration;
+
+import com.dc.dcscreenadaptation.ScreenAdapterTools;
+
+/**
+ * 项目启动配置Application
+ */
+public class BaseApplication extends Application {
+
+    @Override
+    public void onCreate() {
+        super.onCreate();
+//        if (LeakCanary.isInAnalyzerProcess(this)) {
+//            // This process is dedicated to LeakCanary for heap analysis.
+//            // You should not init your app in this process.
+//            return;
+//        }
+//        LeakCanary.install(this);
+        ScreenAdapterTools.init(this);
+
+    }
+
+    @Override
+    public void onConfigurationChanged(Configuration newConfig) {
+        super.onConfigurationChanged(newConfig);
+        ScreenAdapterTools.getInstance().reset(this);
+
+    }
+}

+ 127 - 0
app/src/main/java/com/youpu/base/BaseFragment.java

@@ -0,0 +1,127 @@
+package com.youpu.base;
+
+import android.app.Activity;
+import android.app.Application;
+import android.content.Context;
+import android.os.Bundle;
+import android.support.annotation.NonNull;
+import android.support.annotation.Nullable;
+import android.support.v4.app.Fragment;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.ViewGroup;
+import android.widget.Toast;
+
+import com.dc.dcscreenadaptation.ScreenAdapterTools;
+
+import butterknife.ButterKnife;
+import butterknife.Unbinder;
+
+
+/**
+ * Created by Raul_lsj on 2018/3/9.
+ */
+
+public abstract class BaseFragment extends Fragment {
+
+    protected View view;
+    protected LayoutInflater inflater;
+    private Unbinder unBinder;
+
+    protected Activity mActivity;
+    protected Context mContext;
+    protected Context appContext;
+    protected Application mApplication;
+
+    private static Toast toast;
+
+
+
+    /*懒加载相关*/
+
+    protected boolean mIsViewInitiated;
+    protected boolean mIsVisibleToUser;
+    protected boolean mIsDataInitiated;
+
+    @Override
+    public void onAttach(Context context) {
+        mActivity = (Activity) context;
+        mContext = context;
+        appContext = mActivity.getApplicationContext();
+        mApplication = mActivity.getApplication();
+        super.onAttach(context);
+    }
+
+    @Nullable
+    @Override
+    public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
+        view = inflater.inflate(getLayout(), container, false);
+        //指出fragment愿意添加item到选项菜单
+        //Fragment适配
+        ScreenAdapterTools.getInstance().loadView(view);
+//        setHasOptionsMenu(true);
+        /**/
+        unBinder = ButterKnife.bind(this, view);
+        initView();
+        return view;
+    }
+
+    @Override
+    public void onCreate(@Nullable Bundle savedInstanceState) {
+        super.onCreate(savedInstanceState);
+        initEvent();
+    }
+
+    @Override
+    public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
+        super.onViewCreated(view, savedInstanceState);
+        inflater = onGetLayoutInflater(savedInstanceState);
+    }
+
+    @Override
+    public void onDestroyView() {
+        unBinder.unbind();
+        super.onDestroyView();
+    }
+
+    public void showMsg(String msg) {
+        toast = Toast.makeText(appContext, "", Toast.LENGTH_SHORT);
+        toast.setText(msg);
+        toast.show();
+    }
+
+
+    protected abstract int getLayout();
+
+    protected abstract void initEvent();
+
+    protected abstract void initView();
+
+    /*懒加载相关*/
+    /*数据加载*/
+    protected abstract void fetchData();
+
+    @Override
+    public void setUserVisibleHint(boolean isVisibleToUser) {
+        super.setUserVisibleHint(isVisibleToUser);
+        mIsVisibleToUser = isVisibleToUser;
+        initFetchData();
+    }
+
+    @Override
+    public void onActivityCreated(Bundle savedInstanceState) {
+        super.onActivityCreated(savedInstanceState);
+
+        mIsViewInitiated = true;
+        initFetchData();
+    }
+
+    protected void initFetchData() {
+        if (mIsVisibleToUser && mIsViewInitiated && !mIsDataInitiated) {
+            fetchData();
+            mIsDataInitiated = true;
+        }
+    }
+
+
+}

File diff suppressed because it is too large
+ 244 - 0
app/src/main/java/com/youpu/bean/HomeTopDataEntity.java


+ 85 - 0
app/src/main/java/com/youpu/bean/UserEntity.java

@@ -0,0 +1,85 @@
+package com.youpu.bean;
+
+import java.io.Serializable;
+
+/**
+ * Created by dingchao on 2018/4/9.
+ */
+
+public class UserEntity implements Serializable {
+
+    /**
+     * code : 200
+     * pvCount : 0
+     * phone : 18519149146
+     * message : success
+     * token : Bearer eyJhbGciOiJIUzI1NiJ9.eyJleHAiOjE1MjMyMzczNTQsImlhdCI6MTUyMzIzNzI5NH0.HYJcdJMA24RlyIwMMyrXf3DF_K4UIVa_cqVzww0O6_Q
+     */
+
+    private String code;
+    private int pvCount;
+    private String phone;
+    private String message;
+    private String token;
+    private String memberType;//0优铺会员1VIP会员2普通用户
+
+    public String getMemberType() {
+        return memberType;
+    }
+
+    public void setMemberType(String memberType) {
+        this.memberType = memberType;
+    }
+
+    public String getCode() {
+        return code;
+    }
+
+    public void setCode(String code) {
+        this.code = code;
+    }
+
+    public int getPvCount() {
+        return pvCount;
+    }
+
+    public void setPvCount(int pvCount) {
+        this.pvCount = pvCount;
+    }
+
+    public String getPhone() {
+        return phone;
+    }
+
+    public void setPhone(String phone) {
+        this.phone = phone;
+    }
+
+    public String getMessage() {
+        return message;
+    }
+
+    public void setMessage(String message) {
+        this.message = message;
+    }
+
+    public String getToken() {
+        return token;
+    }
+
+    public void setToken(String token) {
+        this.token = token;
+    }
+
+    public UserEntity(String code, int pvCount, String phone, String message, String token, String memberType) {
+        this.code = code;
+        this.pvCount = pvCount;
+        this.phone = phone;
+        this.message = message;
+        this.token = token;
+        this.memberType = memberType;
+    }
+
+    public UserEntity() {
+    }
+}

+ 7 - 0
app/src/main/java/com/youpu/model/impl/HomeFModelImpl.java

@@ -0,0 +1,7 @@
+package com.youpu.model.impl;
+
+
+import com.youpu.model.inter.IHomeFModel;
+
+public class HomeFModelImpl implements IHomeFModel {
+}

+ 7 - 0
app/src/main/java/com/youpu/model/impl/MainAModelImpl.java

@@ -0,0 +1,7 @@
+package com.youpu.model.impl;
+
+
+import com.youpu.model.inter.IMainAModel;
+
+public class MainAModelImpl implements IMainAModel {
+}

+ 4 - 0
app/src/main/java/com/youpu/model/inter/IHomeFModel.java

@@ -0,0 +1,4 @@
+package com.youpu.model.inter;
+
+public interface IHomeFModel {
+}

+ 4 - 0
app/src/main/java/com/youpu/model/inter/IMainAModel.java

@@ -0,0 +1,4 @@
+package com.youpu.model.inter;
+
+public interface IMainAModel {
+}

+ 7 - 0
app/src/main/java/com/youpu/presenter/callback/CallBack.java

@@ -0,0 +1,7 @@
+package com.youpu.presenter.callback;
+
+public interface CallBack<T> {
+    void onSuccess(T response);
+
+    void onError(Throwable t);
+}

+ 55 - 0
app/src/main/java/com/youpu/presenter/impl/HomeFPresenterImpl.java

@@ -0,0 +1,55 @@
+package com.youpu.presenter.impl;
+
+import android.util.Log;
+
+
+import com.youpu.api.manager.RetrofitHelper;
+import com.youpu.bean.HomeTopDataEntity;
+import com.youpu.model.impl.HomeFModelImpl;
+import com.youpu.model.inter.IHomeFModel;
+import com.youpu.presenter.inter.IHomeFPresenter;
+import com.youpu.view.inter.IHomeFView;
+
+import io.reactivex.android.schedulers.AndroidSchedulers;
+import io.reactivex.observers.DefaultObserver;
+import io.reactivex.schedulers.Schedulers;
+
+public class HomeFPresenterImpl implements IHomeFPresenter {
+    private IHomeFView mIHomeFView;
+    private IHomeFModel mIHomeFModel;
+
+    public HomeFPresenterImpl(IHomeFView fIHomeFView) {
+        mIHomeFView = fIHomeFView;
+        mIHomeFModel = new HomeFModelImpl();
+    }
+
+    /**
+     * 首页上半部分数据请求
+     */
+    @Override
+    public void getHomeTopData() {
+        Log.e("HomeFragment", "HomeFPresenterImpl-----40-->首页上半部分数据请求");
+        //进行网络请求
+        RetrofitHelper.getInstance().getRetrofitService().getHomeTopData()
+                .subscribeOn(Schedulers.io())//在子线程中进行HTTP请求
+                .observeOn(AndroidSchedulers.mainThread())//UI线程处理返回接口
+                .subscribe(new DefaultObserver<HomeTopDataEntity>() {
+                    @Override
+                    public void onNext(HomeTopDataEntity homeTopDataEntity) {
+                        //请求成功之后所做的处理
+                        mIHomeFView.response(homeTopDataEntity, 1);
+                        Log.e("HomeFragment", "HomeFPresenterImpl--onNext---41-->homeTopDataEntity" + homeTopDataEntity.toString());
+                    }
+
+                    @Override
+                    public void onError(Throwable e) {
+                        Log.e("HomeFragment", "HomeFPresenterImpl--onError---46-->homeTopDataEntity" + e);
+                    }
+
+                    @Override
+                    public void onComplete() {
+                        Log.e("HomeFragment", "HomeFPresenterImpl--onComplete---41-->homeTopDataEntity");
+                    }
+                });//订阅
+    }
+}

+ 16 - 0
app/src/main/java/com/youpu/presenter/impl/MainAPresenterImpl.java

@@ -0,0 +1,16 @@
+package com.youpu.presenter.impl;
+
+import com.youpu.model.impl.MainAModelImpl;
+import com.youpu.model.inter.IMainAModel;
+import com.youpu.presenter.inter.IMainAPresenter;
+import com.youpu.view.inter.IMainAView;
+
+public class MainAPresenterImpl implements IMainAPresenter {
+    private IMainAView mIMainAView;
+    private IMainAModel mIMainAModel;
+
+    public MainAPresenterImpl(IMainAView aIMainAView) {
+        mIMainAView = aIMainAView;
+        mIMainAModel = new MainAModelImpl();
+    }
+}

+ 13 - 0
app/src/main/java/com/youpu/presenter/inter/IHomeFPresenter.java

@@ -0,0 +1,13 @@
+package com.youpu.presenter.inter;
+
+/**
+ * HomeFragment P层
+ */
+public interface IHomeFPresenter {
+
+
+    /**
+     * 首页接口,上半部分数据
+     */
+    void getHomeTopData();
+}

+ 4 - 0
app/src/main/java/com/youpu/presenter/inter/IMainAPresenter.java

@@ -0,0 +1,4 @@
+package com.youpu.presenter.inter;
+
+public interface IMainAPresenter {
+}

+ 59 - 0
app/src/main/java/com/youpu/util/DialogUtil.java

@@ -0,0 +1,59 @@
+package com.youpu.util;
+
+import android.app.Dialog;
+import android.content.Context;
+import android.view.Gravity;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.Window;
+import android.view.WindowManager;
+import android.widget.LinearLayout;
+import android.widget.TextView;
+
+import com.youpu.R;
+
+/**
+ * Created by dingchao on 2018/4/3.
+ */
+
+public class DialogUtil {
+    /*加载*/
+    public static Dialog createLoadingDialog(Context context, String msg) {
+        LayoutInflater inflater = LayoutInflater.from(context);
+        View v = inflater.inflate(R.layout.dialog_loading, null);// 得到加载view
+        LinearLayout layout = (LinearLayout) v.findViewById(R.id.dialog_loading_view);// 加载布局
+        TextView tipTextView = (TextView) v.findViewById(R.id.tipTextView);// 提示文字
+        tipTextView.setText(msg);// 设置加载信息
+
+        Dialog loadingDialog = new Dialog(context, R.style.MyDialogStyle);// 创建自定义样式dialog
+        loadingDialog.setCancelable(true); // 是否可以按“返回键”消失
+        loadingDialog.setCanceledOnTouchOutside(false); // 点击加载框以外的区域
+        loadingDialog.setContentView(layout, new LinearLayout.LayoutParams(
+                LinearLayout.LayoutParams.MATCH_PARENT,
+                LinearLayout.LayoutParams.MATCH_PARENT));// 设置布局
+        /**
+         *将显示Dialog的方法封装在这里面
+         */
+        Window window = loadingDialog.getWindow();
+        WindowManager.LayoutParams lp = window.getAttributes();
+        lp.width = WindowManager.LayoutParams.MATCH_PARENT;
+        lp.height = WindowManager.LayoutParams.WRAP_CONTENT;
+        window.setGravity(Gravity.CENTER);
+        window.setAttributes(lp);
+        window.setWindowAnimations(R.style.PopWindowAnimStyle);
+        loadingDialog.show();
+
+        return loadingDialog;
+    }
+
+    /**
+     * 关闭dialog
+     *
+     * @param mDialogUtils
+     */
+    public static void closeDialog(Dialog mDialogUtils) {
+        if (mDialogUtils != null && mDialogUtils.isShowing()) {
+            mDialogUtils.dismiss();
+        }
+    }
+}

+ 10 - 0
app/src/main/java/com/youpu/util/sss.java

@@ -0,0 +1,10 @@
+package com.youpu.util;
+
+/**
+ * @ClassName: sss
+ * @Description:
+ * @Author: dingchao
+ * @Date: 2018/8/8 11:27
+ */
+public class sss {
+}

+ 281 - 0
app/src/main/java/com/youpu/view/activity/MainActivity.java

@@ -0,0 +1,281 @@
+package com.youpu.view.activity;
+
+import android.os.Bundle;
+import android.support.v4.app.Fragment;
+import android.support.v4.app.FragmentManager;
+import android.support.v4.app.FragmentPagerAdapter;
+import android.support.v4.view.ViewPager;
+import android.util.TypedValue;
+import android.view.Gravity;
+import android.view.View;
+import android.view.ViewGroup;
+import android.widget.FrameLayout;
+import android.widget.ImageView;
+import android.widget.LinearLayout;
+import android.widget.TextView;
+
+import com.ashokvarma.bottomnavigation.BottomNavigationBar;
+import com.ashokvarma.bottomnavigation.BottomNavigationItem;
+import com.youpu.R;
+import com.youpu.base.BaseActivity;
+import com.youpu.presenter.impl.MainAPresenterImpl;
+import com.youpu.presenter.inter.IMainAPresenter;
+import com.youpu.view.diy.viewpager.ViewPagerSlide;
+import com.youpu.view.fragment.HomeFragment;
+import com.youpu.view.fragment.PuFragment;
+import com.youpu.view.inter.IMainAView;
+
+import java.lang.reflect.Field;
+
+import butterknife.BindView;
+
+/**
+ * 项目为基本项目搭建框架
+ * 总体Mvp+RxJava+Retrofit
+ * 使用自定义适配方案
+ * 首页,使用系统切换ViewPager+Fragment
+ */
+public class MainActivity extends BaseActivity implements BottomNavigationBar.OnTabSelectedListener, ViewPager.OnPageChangeListener, IMainAView {
+
+    @BindView(R.id.view_pager)
+    ViewPagerSlide viewPager;
+    @BindView(R.id.bottom_navigation_bar)
+    BottomNavigationBar bottomNavigationBar;
+    //存放fragment的集合
+    private Fragment[] fragments;
+
+    //切换不同fragment用的下标
+    private int index;
+    private IMainAPresenter mIMainAPresenter;
+
+
+    @Override
+    protected void onCreate(Bundle savedInstanceState) {
+        super.onCreate(savedInstanceState);
+        mIMainAPresenter = new MainAPresenterImpl(this);
+    }
+
+    @Override
+    protected int getLayout() {
+        return R.layout.activity_main;
+    }
+
+    //    public boolean flag = true;
+//    这里要实现的是根据不同的用户展示不同数量的tab
+    public boolean flag = false;
+
+    @Override
+    protected void initEvent() {
+        if (flag) {
+            initBottomNavigationBar();
+            initViewPager();
+        } else {
+            initBottomNavigationBar2();
+            initViewPager2();
+        }
+
+
+    }
+
+
+    /*此后三个为ViewPager所重写*/
+    @Override
+    public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
+
+    }
+
+    @Override
+    public void onPageSelected(int i) {
+        bottomNavigationBar.selectTab(i);
+        this.index = i;
+
+
+    }
+
+    @Override
+    public void onPageScrollStateChanged(int state) {
+
+    }
+
+
+    /*此后三个为BottomNavigationBar所重写*/
+    @Override
+    public void onTabSelected(int position) {
+        viewPager.setCurrentItem(position);
+    }
+
+    @Override
+    public void onTabUnselected(int position) {
+
+    }
+
+    @Override
+    public void onTabReselected(int position) {
+
+    }
+
+    @Override
+    public <T> T request(int requestFlag) {
+        return null;
+    }
+
+    @Override
+    public <T> void response(T response, int responseFlag) {
+
+    }
+
+
+    //初始化viewpager
+    private void initViewPager() {
+//        viewPager = (ViewPagerSlide) findViewById(R.id.view_pager);
+        fragments = new Fragment[5];
+        fragments[0] = HomeFragment.newInstance();
+        fragments[1] = PuFragment.newInstance();
+        fragments[2] = HomeFragment.newInstance();
+        fragments[3] = PuFragment.newInstance();
+        fragments[4] = HomeFragment.newInstance();
+//        fragments[0] = new HomeFragment();
+//        fragments[1] = new PuFragment();
+//        fragments[2] = new MeFragment();
+//        fragments[3] = new HomeFragment();
+//        fragments[4] = new PuFragment();
+
+        /*ViewPager关闭左右滑动*/
+        viewPager.setSlide(false);
+
+
+        viewPager.setOffscreenPageLimit(4);
+        viewPager.setAdapter(new SectionsPagerAdapter(getSupportFragmentManager(), fragments));
+        viewPager.addOnPageChangeListener(this);
+        viewPager.setCurrentItem(0);
+
+    }
+
+    private void initViewPager2() {
+//        viewPager = (ViewPagerSlide) findViewById(R.id.view_pager);
+        fragments = new Fragment[3];
+        fragments[0] = HomeFragment.newInstance();
+        fragments[1] = PuFragment.newInstance();
+        fragments[2] = HomeFragment.newInstance();
+//        fragments[0] = new HomeFragment();
+//        fragments[1] = new PuFragment();
+//        fragments[2] = new MeFragment();
+//        fragments[3] = new HomeFragment();
+//        fragments[4] = new PuFragment();
+
+        /*ViewPager关闭左右滑动*/
+        viewPager.setSlide(false);
+
+
+        viewPager.setOffscreenPageLimit(2);
+        viewPager.setAdapter(new SectionsPagerAdapter(getSupportFragmentManager(), fragments));
+        viewPager.addOnPageChangeListener(this);
+        viewPager.setCurrentItem(0);
+
+    }
+
+    //初始化底部导航菜单
+    private void initBottomNavigationBar() {
+//        bottomNavigationBar = (BottomNavigationBar) findViewById(R.id.bottom_navigation_bar);
+        bottomNavigationBar.setTabSelectedListener(this);
+        bottomNavigationBar.clearAll();
+        bottomNavigationBar.setMode(BottomNavigationBar.MODE_FIXED);
+        bottomNavigationBar.setBackgroundStyle(BottomNavigationBar.BACKGROUND_STYLE_STATIC);
+        bottomNavigationBar.addItem(new BottomNavigationItem(R.drawable.home_sel, "主页").setInactiveIconResource(R.drawable.home_unsel).setActiveColorResource(R.color.colorPrimaryDark))
+                .addItem(new BottomNavigationItem(R.drawable.pu_sel, "单据").setInactiveIconResource(R.drawable.pu_unsel).setActiveColorResource(R.color.colorPrimaryDark))
+                .addItem(new BottomNavigationItem(R.drawable.me_sel, "审核").setInactiveIconResource(R.drawable.me_unsel).setActiveColorResource(R.color.colorPrimaryDark))
+                .addItem(new BottomNavigationItem(R.drawable.home_sel, "报表").setInactiveIconResource(R.drawable.home_unsel).setActiveColorResource(R.color.colorPrimaryDark))
+                .addItem(new BottomNavigationItem(R.drawable.me_sel, "设置").setInactiveIconResource(R.drawable.me_unsel).setActiveColorResource(R.color.colorPrimaryDark))
+                .initialise();
+        setBottomNavigationItem(bottomNavigationBar, 5, 20, 12);
+    }
+
+    private void initBottomNavigationBar2() {
+//        bottomNavigationBar = (BottomNavigationBar) findViewById(R.id.bottom_navigation_bar);
+        bottomNavigationBar.setTabSelectedListener(this);
+        bottomNavigationBar.clearAll();
+        bottomNavigationBar.setMode(BottomNavigationBar.MODE_FIXED);
+        bottomNavigationBar.setBackgroundStyle(BottomNavigationBar.BACKGROUND_STYLE_STATIC);
+        bottomNavigationBar.addItem(new BottomNavigationItem(R.drawable.home_sel, "主页").setInactiveIconResource(R.drawable.home_unsel).setActiveColorResource(R.color.colorPrimaryDark))
+                .addItem(new BottomNavigationItem(R.drawable.pu_sel, "单据").setInactiveIconResource(R.drawable.pu_unsel).setActiveColorResource(R.color.colorPrimaryDark))
+                .addItem(new BottomNavigationItem(R.drawable.me_sel, "设置").setInactiveIconResource(R.drawable.me_unsel).setActiveColorResource(R.color.colorPrimaryDark))
+                .initialise();
+        setBottomNavigationItem(bottomNavigationBar, 5, 20, 12);
+    }
+
+    //修改底部文字图片大小,间距
+
+    /**
+     * @param bottomNavigationBar,需要修改的 BottomNavigationBar
+     * @param space                     图片与文字之间的间距
+     * @param imgLen                    单位:dp,图片大小,应 <= 36dp
+     * @param textSize                  单位:dp,文字大小,应 <= 20dp
+     *                                  <p>
+     *                                  使用方法:直接调用setBottomNavigationItem(bottomNavigationBar, 6, 26, 10);
+     *                                  代表将bottomNavigationBar的文字大小设置为10dp,图片大小为26dp,二者间间距为6dp
+     **/
+    private void setBottomNavigationItem(BottomNavigationBar bottomNavigationBar, int space, int imgLen, int textSize) {
+        Class barClass = bottomNavigationBar.getClass();
+        Field[] fields = barClass.getDeclaredFields();
+        for (int i = 0; i < fields.length; i++) {
+            Field field = fields[i];
+            field.setAccessible(true);
+            if (field.getName().equals("mTabContainer")) {
+                try {
+                    //反射得到 mTabContainer
+                    LinearLayout mTabContainer = (LinearLayout) field.get(bottomNavigationBar);
+                    for (int j = 0; j < mTabContainer.getChildCount(); j++) {
+                        //获取到容器内的各个Tab
+                        View view = mTabContainer.getChildAt(j);
+                        //获取到Tab内的各个显示控件
+                        FrameLayout.LayoutParams params = new FrameLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, dip2px(56));
+                        FrameLayout container = (FrameLayout) view.findViewById(R.id.fixed_bottom_navigation_container);
+                        container.setLayoutParams(params);
+                        container.setPadding(dip2px(12), dip2px(0), dip2px(12), dip2px(0));
+
+                        //获取到Tab内的文字控件
+                        TextView labelView = (TextView) view.findViewById(com.ashokvarma.bottomnavigation.R.id.fixed_bottom_navigation_title);
+                        //计算文字的高度DP值并设置,setTextSize为设置文字正方形的对角线长度,所以:文字高度(总内容高度减去间距和图片高度)*根号2即为对角线长度,此处用DP值,设置该值即可。
+                        labelView.setTextSize(TypedValue.COMPLEX_UNIT_DIP, textSize);
+                        labelView.setIncludeFontPadding(false);
+                        labelView.setPadding(0, 0, 0, dip2px(20 - textSize - space / 2));
+
+                        //获取到Tab内的图像控件
+                        ImageView iconView = (ImageView) view.findViewById(com.ashokvarma.bottomnavigation.R.id.fixed_bottom_navigation_icon);
+                        //设置图片参数,其中,MethodUtils.dip2px():换算dp值
+                        params = new FrameLayout.LayoutParams(dip2px(imgLen), dip2px(imgLen));
+                        params.setMargins(0, 0, 0, space / 2);
+                        params.gravity = Gravity.BOTTOM | Gravity.CENTER_HORIZONTAL;
+                        iconView.setLayoutParams(params);
+                    }
+                } catch (IllegalAccessException e) {
+                    e.printStackTrace();
+                }
+            }
+        }
+    }
+
+    public int dip2px(float dpValue) {
+        final float scale = getApplication().getResources().getDisplayMetrics().density;
+        return (int) (dpValue * scale + 0.5f);
+    }
+
+    class SectionsPagerAdapter extends FragmentPagerAdapter {
+        Fragment fragments[] = new Fragment[4];
+
+        public SectionsPagerAdapter(FragmentManager fm, Fragment fragments[]) {
+            super(fm);
+            this.fragments = fragments;
+        }
+
+        @Override
+        public Fragment getItem(int position) {
+            return fragments[position];
+        }
+
+        @Override
+        public int getCount() {
+            return fragments.length;
+        }
+    }
+}

+ 85 - 0
app/src/main/java/com/youpu/view/diy/home/MultipleItem.java

@@ -0,0 +1,85 @@
+package com.youpu.view.diy.home;
+
+import com.chad.library.adapter.base.entity.MultiItemEntity;
+import com.youpu.bean.HomeTopDataEntity;
+
+import java.util.List;
+
+/**
+ * @ClassName: MultipleItem
+ * @Description: 首页多布局单项
+ * @Author: dingchao
+ * @Date: 2018/8/10 15:56
+ */
+public class MultipleItem implements MultiItemEntity {
+
+    //添加type
+    private int itemType;//判断是那种布局类型
+
+
+    //暂时使用的数据
+    private String dataText;
+
+    //定义类型
+    public static final int TYPE_0 = 0;//banner
+    public static final int TYPE_1 = 1;//三个按钮区域
+    public static final int TYPE_2 = 2;//数字区域
+    public static final int TYPE_3 = 3;//咨询区域
+    public static final int TYPE_4 = 4;//列表区域
+
+
+    //    权重
+    public static final int TYPE_SPAN_SIZE_1 = 1;
+    public int spanSize;
+
+    private List<HomeTopDataEntity.DataBean.ImgUrlBean> imgUrlBeanList;
+
+
+    @Override
+    public int getItemType() {
+        return itemType;
+    }
+
+    public void setItemType(int itemType) {
+        this.itemType = itemType;
+    }
+
+    public String getDataText() {
+        return dataText;
+    }
+
+    public void setDataText(String dataText) {
+        this.dataText = dataText;
+    }
+
+
+    /*创建构造函数*/
+
+    public MultipleItem(int itemType, int spanSize, String dataText) {
+        this.itemType = itemType;
+        this.dataText = dataText;
+        this.spanSize = spanSize;
+    }
+
+    public MultipleItem(int itemType, int spanSize, List<HomeTopDataEntity.DataBean.ImgUrlBean> imgUrlBean) {
+        this.itemType = itemType;
+        this.spanSize = spanSize;
+        this.imgUrlBeanList = imgUrlBean;
+    }
+
+    public int getSpanSize() {
+        return spanSize;
+    }
+
+    public void setSpanSize(int spanSize) {
+        this.spanSize = spanSize;
+    }
+
+    public List<HomeTopDataEntity.DataBean.ImgUrlBean> getImgUrlBeanList() {
+        return imgUrlBeanList;
+    }
+
+    public void setImgUrlBeanList(List<HomeTopDataEntity.DataBean.ImgUrlBean> imgUrlBeanList) {
+        this.imgUrlBeanList = imgUrlBeanList;
+    }
+}

+ 32 - 0
app/src/main/java/com/youpu/view/diy/sss.java

@@ -0,0 +1,32 @@
+package com.youpu.view.diy;
+
+import android.content.Context;
+import android.support.v4.view.ViewPager;
+import android.util.AttributeSet;
+import android.view.MotionEvent;
+
+/**
+ * @ClassName: ViewPagerSlide
+ * @Description: 控制ViewPager是否开启左右滑动,Fragment切换
+ * @Author: dingchao
+ * @Date: 2018/7/23 10:43
+ */
+public class sss extends ViewPager {
+    //是否可以进行滑动
+    private boolean isSlide = false;
+
+    public void setSlide(boolean slide) {
+        isSlide = slide;
+    }
+    public sss(Context context) {
+        super(context);
+    }
+
+    public sss(Context context, AttributeSet attrs) {
+        super(context, attrs);
+    }
+    @Override
+    public boolean onInterceptTouchEvent(MotionEvent ev) {
+        return isSlide;
+    }
+}

+ 72 - 0
app/src/main/java/com/youpu/view/diy/viewpager/MyViewPager.java

@@ -0,0 +1,72 @@
+package com.youpu.view.diy.viewpager;
+
+import android.content.Context;
+import android.support.v4.view.ViewPager;
+import android.util.AttributeSet;
+import android.view.MotionEvent;
+import android.view.ViewGroup;
+
+/**
+ * Author:dingchao
+ * TIme:2018/5/30:17:44
+ * Description:MyViewPager
+ * 描述:首页轮播图
+ */
+
+public class MyViewPager extends ViewPager {
+    private ViewGroup parent;
+    private int downX;
+    private int downY;
+
+    public MyViewPager(Context context) {
+        super(context);
+    }
+
+    public MyViewPager(Context context, AttributeSet attrs) {
+        super(context, attrs);
+    }
+
+    public void setNestedpParent(ViewGroup parent) {
+        this.parent = parent;
+    }
+
+    @Override
+    public boolean dispatchTouchEvent(MotionEvent ev) {
+        switch (ev.getAction()) {
+            case MotionEvent.ACTION_DOWN:
+                // 让当前viewpager的父控件不去拦截touch事件
+                downX = (int) ev.getX();
+                downY = (int) ev.getY();
+                break;
+            case MotionEvent.ACTION_MOVE:
+                int moveX = (int) ev.getX();
+                int moveY = (int) ev.getY();
+                if (Math.abs(moveX - downX) >= Math.abs(moveY - downY)) {
+                    // 滑动轮播图
+                    getParent().getParent().getParent().getParent().requestDisallowInterceptTouchEvent(true);
+                } else {
+                    // 刷新listview
+                    getParent().getParent().getParent().getParent().requestDisallowInterceptTouchEvent(false);
+                }
+                break;
+        }
+        return super.dispatchTouchEvent(ev);
+    }
+
+
+    @Override
+    public boolean onInterceptTouchEvent(MotionEvent ev) {
+        if (parent != null) {
+            parent.requestDisallowInterceptTouchEvent(true);
+        }
+        return super.onInterceptTouchEvent(ev);
+    }
+
+    @Override
+    public boolean onTouchEvent(MotionEvent ev) {
+        if (parent != null) {
+            parent.requestDisallowInterceptTouchEvent(true);
+        }
+        return super.onTouchEvent(ev);
+    }
+}

+ 41 - 0
app/src/main/java/com/youpu/view/diy/viewpager/ViewPagerSlide.java

@@ -0,0 +1,41 @@
+package com.youpu.view.diy.viewpager;
+
+import android.content.Context;
+import android.support.v4.view.ViewPager;
+import android.util.AttributeSet;
+import android.view.MotionEvent;
+
+/**
+ * @ClassName: ViewPagerSlide
+ * @Description: 控制ViewPager是否开启左右滑动, Fragment切换
+ * @Author: dingchao
+ * @Date: 2018/7/23 10:43
+ */
+public class ViewPagerSlide extends ViewPager {
+    //是否可以进行滑动
+    private boolean isSlide = false;
+
+    public void setSlide(boolean slide) {
+        isSlide = slide;
+    }
+
+    public ViewPagerSlide(Context context) {
+        super(context);
+    }
+
+    public ViewPagerSlide(Context context, AttributeSet attrs) {
+        super(context, attrs);
+    }
+
+    @Override
+    public boolean onInterceptTouchEvent(MotionEvent ev) {
+        return isSlide;
+    }
+
+
+    /*如果不重写这个方法,还是有些可以滑动,加上这个方法之后解决*/
+    @Override
+    public boolean onTouchEvent(MotionEvent ev) {
+        return isSlide;
+    }
+}

+ 155 - 0
app/src/main/java/com/youpu/view/fragment/HomeFragment.java

@@ -0,0 +1,155 @@
+package com.youpu.view.fragment;
+
+import android.content.Context;
+import android.os.Bundle;
+import android.support.annotation.Nullable;
+import android.support.v4.widget.SwipeRefreshLayout;
+import android.support.v7.widget.GridLayoutManager;
+import android.support.v7.widget.RecyclerView;
+import android.support.v7.widget.StaggeredGridLayoutManager;
+import android.util.Log;
+import android.view.View;
+import android.widget.Toast;
+
+import com.alibaba.fastjson.JSON;
+import com.chad.library.adapter.base.BaseQuickAdapter;
+import com.youpu.R;
+import com.youpu.adapter.MultipleItemQuickAdapter;
+import com.youpu.base.BaseFragment;
+import com.youpu.bean.HomeTopDataEntity;
+import com.youpu.presenter.impl.HomeFPresenterImpl;
+import com.youpu.presenter.inter.IHomeFPresenter;
+import com.youpu.view.diy.home.MultipleItem;
+import com.youpu.view.inter.IHomeFView;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import butterknife.BindView;
+
+/**
+ * @ClassName: PuFragment
+ * @Description: 商铺Fragment
+ * @Author: dingchao
+ * @Date: 2018/7/20 11:46
+ */
+public class HomeFragment extends BaseFragment implements SwipeRefreshLayout.OnRefreshListener, IHomeFView {
+    private View parent;
+    private Context context;
+
+
+    //    数据实体
+    HomeTopDataEntity homeTopDataEntity;
+    HomeTopDataEntity.DataBean.ImgUrlBean imgUrlBean = null;
+
+
+    @BindView(R.id.type_item_recyclerview)
+    RecyclerView mRecyclerView;
+
+    @BindView(R.id.type_item_swipfreshlayout)
+    SwipeRefreshLayout mSwipeRefreshLayout;
+    private IHomeFPresenter mIHomeFPresenter;
+
+    @Override
+    public void onCreate(@Nullable Bundle savedInstanceState) {
+        super.onCreate(savedInstanceState);
+        mIHomeFPresenter = new HomeFPresenterImpl(this);
+    }
+
+    @Override
+    protected int getLayout() {
+        return R.layout.fragment_home;
+    }
+
+    @Override
+    protected void initEvent() {
+        context = getContext();
+    }
+
+    @Override
+    protected void initView() {
+        mSwipeRefreshLayout.setColorSchemeResources(R.color.colorPrimary, R.color.colorAccent, R.color.colorPrimaryDark);
+        mSwipeRefreshLayout.setOnRefreshListener(this);
+        //实现首次自动显示加载提示
+        mSwipeRefreshLayout.post(new Runnable() {
+            @Override
+            public void run() {
+                mSwipeRefreshLayout.setRefreshing(true);
+            }
+        });
+
+        final StaggeredGridLayoutManager layoutManager = new StaggeredGridLayoutManager(2, StaggeredGridLayoutManager.VERTICAL);
+        layoutManager.setGapStrategy(StaggeredGridLayoutManager.GAP_HANDLING_NONE);//可防止Item切换
+        mRecyclerView.setLayoutManager(layoutManager);
+    }
+
+    //    首页获取数据
+    private List<MultipleItem> getMultipleItemData() {
+        Log.e("HomeFragment", "HomeFragment-----87-->getMultipleItemData");
+        List<MultipleItem> data = new ArrayList<>();
+        String sss = null;
+        data.add(new MultipleItem(MultipleItem.TYPE_0, MultipleItem.TYPE_SPAN_SIZE_1, homeTopDataEntity.getData().getImgUrl()));
+//        data.add(new MultipleItem(MultipleItem.TYPE_1, MultipleItem.TYPE_SPAN_SIZE_1, "anniu"));
+        data.add(new MultipleItem(MultipleItem.TYPE_1, MultipleItem.TYPE_SPAN_SIZE_1, sss));
+        data.add(new MultipleItem(MultipleItem.TYPE_2, MultipleItem.TYPE_SPAN_SIZE_1, "number"));
+        data.add(new MultipleItem(MultipleItem.TYPE_3, MultipleItem.TYPE_SPAN_SIZE_1, "zixun"));
+        data.add(new MultipleItem(MultipleItem.TYPE_4, MultipleItem.TYPE_SPAN_SIZE_1, "list"));
+        return data;
+    }
+
+
+    /*数据加载*/
+    @Override
+    protected void fetchData() {
+        Toast.makeText(mActivity, "数据加载中。。。", Toast.LENGTH_SHORT).show();
+        mSwipeRefreshLayout.post(new Runnable() {
+            @Override
+            public void run() {
+                mSwipeRefreshLayout.setRefreshing(false);
+            }
+        });
+        /*网络请求首页数据*/
+        mIHomeFPresenter.getHomeTopData();
+
+    }
+
+    public static HomeFragment newInstance() {
+        HomeFragment fragment = new HomeFragment();
+        return fragment;
+    }
+
+    @Override
+    public void onRefresh() {
+        fetchData();
+    }
+
+    @Override
+    public <T> T request(int requestFlag) {
+        return null;
+    }
+
+    @Override
+    public <T> void response(T response, int responseFlag) {
+        switch (responseFlag) {
+            case 1://首页头部数据请求返回处理
+                homeTopDataEntity = (HomeTopDataEntity) response;
+                //        首页RecyclerView赋值操作
+                if (homeTopDataEntity != null) {
+                    String json = JSON.toJSONString(homeTopDataEntity);
+                    Log.e("HomeFragment", "HomeFragment-----145-->!= null" + json);
+                    MultipleItemQuickAdapter multipleItemQuickAdapter = new MultipleItemQuickAdapter(getMultipleItemData(), context);
+                    GridLayoutManager manager = new GridLayoutManager(context, MultipleItem.TYPE_SPAN_SIZE_1);
+                    mRecyclerView.setLayoutManager(manager);
+                    multipleItemQuickAdapter.setSpanSizeLookup(new BaseQuickAdapter.SpanSizeLookup() {
+                        @Override
+                        public int getSpanSize(GridLayoutManager gridLayoutManager, int position) {
+                            return getMultipleItemData().get(position).getSpanSize();
+                        }
+                    });
+                    mRecyclerView.setAdapter(multipleItemQuickAdapter);
+                    Log.e("HomeFragment", "HomeFragment-----145-->homeTopDataEntity" + homeTopDataEntity.toString());
+                }
+                break;
+        }
+    }
+}

+ 52 - 0
app/src/main/java/com/youpu/view/fragment/PuFragment.java

@@ -0,0 +1,52 @@
+package com.youpu.view.fragment;
+
+import android.app.Dialog;
+import android.content.Context;
+import android.view.View;
+import android.widget.Toast;
+
+import com.youpu.R;
+import com.youpu.base.BaseFragment;
+import com.youpu.util.DialogUtil;
+
+
+/**
+ * @ClassName: PuFragment
+ * @Description: 商铺Fragment
+ * @Author: dingchao
+ * @Date: 2018/7/20 11:46
+ */
+public class PuFragment extends BaseFragment {
+    private View parent;
+    private Context context;
+
+    @Override
+    protected int getLayout() {
+        return R.layout.fragment_pu;
+    }
+
+    @Override
+    protected void initEvent() {
+        context=getContext();
+        Toast.makeText(mActivity, "加载中。。。", Toast.LENGTH_SHORT).show();
+    }
+
+    @Override
+    protected void initView() {
+
+    }
+
+
+    /*数据加载*/
+    @Override
+    protected void fetchData() {
+        Toast.makeText(mActivity, "数据加载中。。。", Toast.LENGTH_SHORT).show();
+
+        Dialog dialog = DialogUtil.createLoadingDialog(context, "数据加载中...");
+    }
+
+    public static PuFragment newInstance() {
+        PuFragment fragment = new PuFragment();
+        return fragment;
+    }
+}

+ 16 - 0
app/src/main/java/com/youpu/view/inter/IHomeFView.java

@@ -0,0 +1,16 @@
+package com.youpu.view.inter;
+
+public interface IHomeFView {
+    //请求标记
+    int REQUEST_ONE = 0;
+    int REQUEST_TWO = 1;
+    int REQUEST_THREE = 2;
+    //响应标记
+    int RESPONSE_ONE = 0;
+    int RESPONSE_TWO = 1;
+    int RESPONSE_THREE = 2;
+
+    <T> T request(int requestFlag);
+
+    <T> void response(T response, int responseFlag);
+}

+ 16 - 0
app/src/main/java/com/youpu/view/inter/IMainAView.java

@@ -0,0 +1,16 @@
+package com.youpu.view.inter;
+
+public interface IMainAView {
+    //请求标记
+    int REQUEST_ONE = 0;
+    int REQUEST_TWO = 1;
+    int REQUEST_THREE = 2;
+    //响应标记
+    int RESPONSE_ONE = 0;
+    int RESPONSE_TWO = 1;
+    int RESPONSE_THREE = 2;
+
+    <T> T request(int requestFlag);
+
+    <T> void response(T response, int responseFlag);
+}

+ 11 - 0
app/src/main/res/anim/anim_bottom_in.xml

@@ -0,0 +1,11 @@
+<?xml version="1.0" encoding="utf-8"?>
+<set xmlns:android="http://schemas.android.com/apk/res/android">
+    <translate
+        android:duration="500"
+        android:fromYDelta="100%p"
+        android:toYDelta="0"/>
+    <alpha
+        android:duration="500"
+        android:fromAlpha="0.0"
+        android:toAlpha="1.0"/>
+</set>

+ 11 - 0
app/src/main/res/anim/anim_bottom_out.xml

@@ -0,0 +1,11 @@
+<?xml version="1.0" encoding="utf-8"?>
+<set xmlns:android="http://schemas.android.com/apk/res/android">
+    <translate
+        android:duration="500"
+        android:fromYDelta="0"
+        android:toYDelta="100%p"/>
+    <alpha
+        android:duration="500"
+        android:fromAlpha="1.0"
+        android:toAlpha="0.0"/>
+</set>

+ 11 - 0
app/src/main/res/anim/anim_left_in.xml

@@ -0,0 +1,11 @@
+<?xml version="1.0" encoding="utf-8"?>
+<set xmlns:android="http://schemas.android.com/apk/res/android">
+    <translate
+        android:duration="500"
+        android:fromXDelta="-100%p"
+        android:toXDelta="0.0"/>
+    <alpha
+        android:duration="500"
+        android:fromAlpha="0.0"
+        android:toAlpha="1.0"/>
+</set>

+ 11 - 0
app/src/main/res/anim/anim_left_out.xml

@@ -0,0 +1,11 @@
+<?xml version="1.0" encoding="utf-8"?>
+<set xmlns:android="http://schemas.android.com/apk/res/android">
+    <translate
+        android:duration="500"
+        android:fromXDelta="0"
+        android:toXDelta="-100%p"/>
+    <alpha
+        android:duration="500"
+        android:fromAlpha="1.0"
+        android:toAlpha="0.0"/>
+</set>

+ 11 - 0
app/src/main/res/anim/anim_right_in.xml

@@ -0,0 +1,11 @@
+<?xml version="1.0" encoding="utf-8"?>
+<set xmlns:android="http://schemas.android.com/apk/res/android">
+    <translate
+        android:duration="500"
+        android:fromXDelta="100%p"
+        android:toXDelta="0"/>
+    <alpha
+        android:duration="500"
+        android:fromAlpha="0.0"
+        android:toAlpha="1.0"/>
+</set>

+ 11 - 0
app/src/main/res/anim/anim_right_out.xml

@@ -0,0 +1,11 @@
+<?xml version="1.0" encoding="utf-8"?>
+<set xmlns:android="http://schemas.android.com/apk/res/android">
+    <translate
+        android:duration="500"
+        android:fromXDelta="0"
+        android:toXDelta="100%p"/>
+    <alpha
+        android:duration="500"
+        android:fromAlpha="1.0"
+        android:toAlpha="0.0"/>
+</set>

+ 11 - 0
app/src/main/res/anim/anim_top_in.xml

@@ -0,0 +1,11 @@
+<?xml version="1.0" encoding="utf-8"?>
+<set xmlns:android="http://schemas.android.com/apk/res/android">
+    <translate
+        android:duration="500"
+        android:fromYDelta="-100%p"
+        android:toYDelta="0.0"/>
+    <alpha
+        android:duration="500"
+        android:fromAlpha="0.0"
+        android:toAlpha="1.0"/>
+</set>

+ 11 - 0
app/src/main/res/anim/anim_top_out.xml

@@ -0,0 +1,11 @@
+<?xml version="1.0" encoding="utf-8"?>
+<set xmlns:android="http://schemas.android.com/apk/res/android">
+    <translate
+        android:duration="500"
+        android:fromYDelta="0"
+        android:toYDelta="-100%p"/>
+    <alpha
+        android:duration="500"
+        android:fromAlpha="1.0"
+        android:toAlpha="0.0"/>
+</set>

+ 5 - 0
app/src/main/res/anim/dialog_enter.xml

@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="utf-8"?>
+<set xmlns:android="http://schemas.android.com/apk/res/android">
+    <alpha android:fromAlpha="0.2"
+        android:toAlpha="1.0"/>
+</set>

+ 5 - 0
app/src/main/res/anim/dialog_exit.xml

@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="utf-8"?>
+<set xmlns:android="http://schemas.android.com/apk/res/android">
+    <alpha android:fromAlpha="1.0"
+        android:toAlpha="0"/>
+</set>

+ 11 - 0
app/src/main/res/anim/photo_dialog_in_anim.xml

@@ -0,0 +1,11 @@
+<?xml version="1.0" encoding="utf-8"?>
+<set xmlns:android="http://schemas.android.com/apk/res/android" >
+
+    <translate
+        android:duration="200"
+        android:fromXDelta="0"
+        android:fromYDelta="1000"
+        android:toXDelta="0"
+        android:toYDelta="0" />
+
+</set>

+ 11 - 0
app/src/main/res/anim/photo_dialog_out_anim.xml

@@ -0,0 +1,11 @@
+<?xml version="1.0" encoding="utf-8"?>
+<set xmlns:android="http://schemas.android.com/apk/res/android" >
+
+    <translate
+        android:duration="300"
+        android:fromXDelta="0"
+        android:fromYDelta="0"
+        android:toXDelta="0"
+        android:toYDelta="1000" />
+
+</set>

File diff suppressed because it is too large
+ 34 - 0
app/src/main/res/drawable-v24/ic_launcher_foreground.xml


+ 15 - 0
app/src/main/res/drawable/dialog_item_bg_only.xml

@@ -0,0 +1,15 @@
+<?xml version="1.0" encoding="utf-8"?>
+<selector xmlns:android="http://schemas.android.com/apk/res/android">
+
+    <item android:state_pressed="true"><shape>
+            <solid android:color="#CACACB" />
+
+            <corners android:bottomLeftRadius="5dp" android:bottomRightRadius="5dp" android:topLeftRadius="5dp" android:topRightRadius="5dp" />
+        </shape></item>
+    <item><shape>
+            <solid android:color="#EBEBEB" />
+
+            <corners android:bottomLeftRadius="5dp" android:bottomRightRadius="5dp" android:topLeftRadius="5dp" android:topRightRadius="5dp" />
+        </shape></item>
+
+</selector>

+ 16 - 0
app/src/main/res/drawable/dialog_loading.xml

@@ -0,0 +1,16 @@
+<?xml version="1.0" encoding="utf-8"?>
+<animated-rotate xmlns:android="http://schemas.android.com/apk/res/android"
+    android:drawable="@mipmap/dialog_loading_img"
+    android:pivotX="50%"
+    android:pivotY="50%" />
+
+
+    <!-- 下面是转圈的
+    <?xml version="1.0" encoding="utf-8"?>
+    <rotate xmlns:android="http://schemas.android.com/apk/res/android"
+        android:drawable="@drawable/dialog_loading_img2"
+        android:fromDegrees="0"
+        android:pivotX="50%"
+        android:pivotY="50%"
+        android:toDegrees="360" />
+    -->

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


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


+ 170 - 0
app/src/main/res/drawable/ic_launcher_background.xml

@@ -0,0 +1,170 @@
+<?xml version="1.0" encoding="utf-8"?>
+<vector xmlns:android="http://schemas.android.com/apk/res/android"
+    android:width="108dp"
+    android:height="108dp"
+    android:viewportHeight="108"
+    android:viewportWidth="108">
+    <path
+        android:fillColor="#26A69A"
+        android:pathData="M0,0h108v108h-108z" />
+    <path
+        android:fillColor="#00000000"
+        android:pathData="M9,0L9,108"
+        android:strokeColor="#33FFFFFF"
+        android:strokeWidth="0.8" />
+    <path
+        android:fillColor="#00000000"
+        android:pathData="M19,0L19,108"
+        android:strokeColor="#33FFFFFF"
+        android:strokeWidth="0.8" />
+    <path
+        android:fillColor="#00000000"
+        android:pathData="M29,0L29,108"
+        android:strokeColor="#33FFFFFF"
+        android:strokeWidth="0.8" />
+    <path
+        android:fillColor="#00000000"
+        android:pathData="M39,0L39,108"
+        android:strokeColor="#33FFFFFF"
+        android:strokeWidth="0.8" />
+    <path
+        android:fillColor="#00000000"
+        android:pathData="M49,0L49,108"
+        android:strokeColor="#33FFFFFF"
+        android:strokeWidth="0.8" />
+    <path
+        android:fillColor="#00000000"
+        android:pathData="M59,0L59,108"
+        android:strokeColor="#33FFFFFF"
+        android:strokeWidth="0.8" />
+    <path
+        android:fillColor="#00000000"
+        android:pathData="M69,0L69,108"
+        android:strokeColor="#33FFFFFF"
+        android:strokeWidth="0.8" />
+    <path
+        android:fillColor="#00000000"
+        android:pathData="M79,0L79,108"
+        android:strokeColor="#33FFFFFF"
+        android:strokeWidth="0.8" />
+    <path
+        android:fillColor="#00000000"
+        android:pathData="M89,0L89,108"
+        android:strokeColor="#33FFFFFF"
+        android:strokeWidth="0.8" />
+    <path
+        android:fillColor="#00000000"
+        android:pathData="M99,0L99,108"
+        android:strokeColor="#33FFFFFF"
+        android:strokeWidth="0.8" />
+    <path
+        android:fillColor="#00000000"
+        android:pathData="M0,9L108,9"
+        android:strokeColor="#33FFFFFF"
+        android:strokeWidth="0.8" />
+    <path
+        android:fillColor="#00000000"
+        android:pathData="M0,19L108,19"
+        android:strokeColor="#33FFFFFF"
+        android:strokeWidth="0.8" />
+    <path
+        android:fillColor="#00000000"
+        android:pathData="M0,29L108,29"
+        android:strokeColor="#33FFFFFF"
+        android:strokeWidth="0.8" />
+    <path
+        android:fillColor="#00000000"
+        android:pathData="M0,39L108,39"
+        android:strokeColor="#33FFFFFF"
+        android:strokeWidth="0.8" />
+    <path
+        android:fillColor="#00000000"
+        android:pathData="M0,49L108,49"
+        android:strokeColor="#33FFFFFF"
+        android:strokeWidth="0.8" />
+    <path
+        android:fillColor="#00000000"
+        android:pathData="M0,59L108,59"
+        android:strokeColor="#33FFFFFF"
+        android:strokeWidth="0.8" />
+    <path
+        android:fillColor="#00000000"
+        android:pathData="M0,69L108,69"
+        android:strokeColor="#33FFFFFF"
+        android:strokeWidth="0.8" />
+    <path
+        android:fillColor="#00000000"
+        android:pathData="M0,79L108,79"
+        android:strokeColor="#33FFFFFF"
+        android:strokeWidth="0.8" />
+    <path
+        android:fillColor="#00000000"
+        android:pathData="M0,89L108,89"
+        android:strokeColor="#33FFFFFF"
+        android:strokeWidth="0.8" />
+    <path
+        android:fillColor="#00000000"
+        android:pathData="M0,99L108,99"
+        android:strokeColor="#33FFFFFF"
+        android:strokeWidth="0.8" />
+    <path
+        android:fillColor="#00000000"
+        android:pathData="M19,29L89,29"
+        android:strokeColor="#33FFFFFF"
+        android:strokeWidth="0.8" />
+    <path
+        android:fillColor="#00000000"
+        android:pathData="M19,39L89,39"
+        android:strokeColor="#33FFFFFF"
+        android:strokeWidth="0.8" />
+    <path
+        android:fillColor="#00000000"
+        android:pathData="M19,49L89,49"
+        android:strokeColor="#33FFFFFF"
+        android:strokeWidth="0.8" />
+    <path
+        android:fillColor="#00000000"
+        android:pathData="M19,59L89,59"
+        android:strokeColor="#33FFFFFF"
+        android:strokeWidth="0.8" />
+    <path
+        android:fillColor="#00000000"
+        android:pathData="M19,69L89,69"
+        android:strokeColor="#33FFFFFF"
+        android:strokeWidth="0.8" />
+    <path
+        android:fillColor="#00000000"
+        android:pathData="M19,79L89,79"
+        android:strokeColor="#33FFFFFF"
+        android:strokeWidth="0.8" />
+    <path
+        android:fillColor="#00000000"
+        android:pathData="M29,19L29,89"
+        android:strokeColor="#33FFFFFF"
+        android:strokeWidth="0.8" />
+    <path
+        android:fillColor="#00000000"
+        android:pathData="M39,19L39,89"
+        android:strokeColor="#33FFFFFF"
+        android:strokeWidth="0.8" />
+    <path
+        android:fillColor="#00000000"
+        android:pathData="M49,19L49,89"
+        android:strokeColor="#33FFFFFF"
+        android:strokeWidth="0.8" />
+    <path
+        android:fillColor="#00000000"
+        android:pathData="M59,19L59,89"
+        android:strokeColor="#33FFFFFF"
+        android:strokeWidth="0.8" />
+    <path
+        android:fillColor="#00000000"
+        android:pathData="M69,19L69,89"
+        android:strokeColor="#33FFFFFF"
+        android:strokeWidth="0.8" />
+    <path
+        android:fillColor="#00000000"
+        android:pathData="M79,19L79,89"
+        android:strokeColor="#33FFFFFF"
+        android:strokeWidth="0.8" />
+</vector>

BIN
app/src/main/res/drawable/loading_bg.9.png


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


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


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


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


+ 23 - 0
app/src/main/res/layout/activity_main.xml

@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="utf-8"?>
+<LinearLayout 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"
+    android:orientation="vertical">
+
+
+    <!--适配测试-->
+    <com.youpu.view.diy.viewpager.ViewPagerSlide
+        android:id="@+id/view_pager"
+        android:layout_width="match_parent"
+        android:layout_height="0dp"
+        android:layout_weight="1" />
+
+    <com.ashokvarma.bottomnavigation.BottomNavigationBar
+        android:id="@+id/bottom_navigation_bar"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:layout_gravity="bottom" />
+
+</LinearLayout>

+ 39 - 0
app/src/main/res/layout/dialog_loading.xml

@@ -0,0 +1,39 @@
+<?xml version="1.0" encoding="utf-8"?>
+<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+    android:id="@+id/dialog_loading_view"
+    android:layout_width="match_parent"
+    android:layout_height="match_parent"
+    android:gravity="center"
+    android:orientation="vertical">
+
+    <LinearLayout
+        android:layout_width="150dp"
+        android:layout_height="110dp"
+        android:background="@drawable/loading_bg"
+        android:gravity="center"
+        android:orientation="vertical"
+        android:paddingBottom="10dp"
+        android:paddingLeft="21dp"
+        android:paddingRight="21dp"
+        android:paddingTop="10dp">
+
+        <ProgressBar
+            android:id="@+id/progressBar1"
+            android:layout_width="35dp"
+            android:layout_height="35dp"
+            android:layout_gravity="center_horizontal"
+            android:indeterminateBehavior="repeat"
+            android:indeterminateDrawable="@drawable/dialog_loading"
+            android:indeterminateOnly="true" />
+
+        <TextView
+            android:id="@+id/tipTextView"
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:layout_marginTop="15dp"
+            android:text="加载中..."
+            android:textColor="#f0f0f0"
+            android:textSize="15sp" />
+    </LinearLayout>
+
+</LinearLayout>

+ 21 - 0
app/src/main/res/layout/fragment_home.xml

@@ -0,0 +1,21 @@
+<?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:orientation="vertical">
+
+    <android.support.v4.widget.SwipeRefreshLayout
+        android:id="@+id/type_item_swipfreshlayout"
+        android:layout_width="match_parent"
+        android:layout_height="match_parent">
+
+        <android.support.v7.widget.RecyclerView
+            android:id="@+id/type_item_recyclerview"
+            android:layout_width="match_parent"
+            android:layout_height="match_parent"
+            android:overScrollMode="never"
+            android:scrollbars="vertical" />
+
+    </android.support.v4.widget.SwipeRefreshLayout>
+</LinearLayout>

+ 63 - 0
app/src/main/res/layout/fragment_pu.xml

@@ -0,0 +1,63 @@
+<?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:orientation="vertical">
+
+    <TextView
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content"
+        android:text="Pu" />
+
+
+    <TextView
+        android:layout_width="389dp"
+        android:layout_height="95dp"
+        android:layout_marginLeft="10dp"
+        android:background="#e63030"
+        android:text="文字适配"
+        android:textColor="#fff"
+
+        android:textSize="15sp" />
+
+    <TextView
+        android:layout_width="355dp"
+        android:layout_height="58dp"
+        android:layout_marginLeft="20px"
+        android:layout_marginTop="20px"
+        android:background="#e63030"
+        android:text="文字适配"
+        android:textColor="#fff"
+        android:textSize="9sp" />
+
+    <TextView
+        android:layout_width="260px"
+        android:layout_height="194px"
+        android:layout_marginTop="20px"
+        android:background="#e63030" />
+
+    <TextView
+        android:layout_width="1022px"
+        android:layout_height="323px"
+        android:layout_marginLeft="29px"
+        android:layout_marginRight="29px"
+        android:layout_marginTop="20px"
+        android:background="#e63030"
+        android:text="文字适配"
+        android:textColor="#fff"
+        android:textSize="49px" />
+
+    <TextView
+        android:layout_width="match_parent"
+        android:layout_height="100px"
+        android:background="#fff"
+        android:drawableLeft="@drawable/ic_launcher_background"
+        android:drawablePadding="20px"
+        android:drawableRight="@drawable/home_sel"
+        android:gravity="center_vertical"
+        android:paddingLeft="20px"
+        android:paddingRight="20px"
+        android:text="我的卡券"
+        android:textSize="16sp" />
+
+</LinearLayout>

+ 19 - 0
app/src/main/res/layout/head_rv_av.xml

@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="utf-8"?>
+<android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:tools="http://schemas.android.com/tools"
+    android:layout_width="match_parent"
+    android:layout_height="wrap_content">
+
+    <!--按钮区域-->
+    <TextView
+        android:id="@+id/tv_av"
+        android:layout_width="match_parent"
+        android:layout_height="300px"
+        android:background="#67c92e"
+        android:gravity="center"
+        android:text="按钮展示区域"
+        tools:ignore="MissingConstraints"
+        tools:layout_editor_absoluteX="0dp"
+        tools:layout_editor_absoluteY="0dp" />
+
+</android.support.constraint.ConstraintLayout>

+ 34 - 0
app/src/main/res/layout/head_rv_banner.xml

@@ -0,0 +1,34 @@
+<?xml version="1.0" encoding="utf-8"?>
+<android.support.constraint.ConstraintLayout 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="590px">
+    <!--按钮区域-->
+    <!-- <TextView
+         android:id="@+id/tv_banner"
+         android:layout_width="match_parent"
+         android:layout_height="300px"
+         android:background="#d1371c"
+         android:gravity="center"
+         android:text="按钮展示区域"
+         tools:ignore="MissingConstraints"
+         tools:layout_editor_absoluteX="0dp"
+         tools:layout_editor_absoluteY="0dp" />-->
+    <!--首页布局banner-->
+    <com.youpu.view.diy.viewpager.MyViewPager
+        android:id="@+id/head_viewPager"
+        android:layout_width="match_parent"
+        android:layout_height="match_parent"
+        android:layout_alignParentStart="true"
+        android:layout_alignParentTop="true" />
+
+    <LinearLayout
+        android:id="@+id/indicator"
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content"
+        android:layout_marginBottom="20px"
+        android:orientation="horizontal"
+        android:gravity="center_horizontal"
+        app:layout_constraintBottom_toBottomOf="parent" />
+</android.support.constraint.ConstraintLayout>

+ 14 - 0
app/src/main/res/layout/head_rv_marqueeview.xml

@@ -0,0 +1,14 @@
+<?xml version="1.0" encoding="utf-8"?>
+<android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
+    android:layout_width="match_parent"
+    android:layout_height="wrap_content">
+
+    <!--首页资讯区域-->
+    <TextView
+        android:id="@+id/tv_zx"
+        android:layout_width="match_parent"
+        android:layout_height="300px"
+        android:gravity="center"
+        android:background="#d119be"
+        android:text="资讯展示区域" />
+</android.support.constraint.ConstraintLayout>

+ 14 - 0
app/src/main/res/layout/head_rv_number.xml

@@ -0,0 +1,14 @@
+<?xml version="1.0" encoding="utf-8"?>
+<android.support.constraint.ConstraintLayout
+    xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent"
+    android:layout_height="wrap_content">
+
+    <!--数字展示区域-->
+    <TextView
+        android:id="@+id/tv_num"
+        android:layout_width="match_parent"
+        android:layout_height="300px"
+        android:gravity="center"
+        android:background="#1986df"
+        android:text="数字展示区域" />
+</android.support.constraint.ConstraintLayout>

+ 15 - 0
app/src/main/res/layout/head_rv_pulist.xml

@@ -0,0 +1,15 @@
+<?xml version="1.0" encoding="utf-8"?>
+<android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
+    android:layout_width="match_parent"
+    android:layout_height="wrap_content">
+
+    <!--首页商铺列表布局-->
+    <TextView
+        android:id="@+id/tv_list"
+        android:layout_width="match_parent"
+        android:layout_height="300px"
+        android:gravity="center"
+        android:background="#ecbf43"
+
+        android:text="列表展示区域" />
+</android.support.constraint.ConstraintLayout>

+ 11 - 0
app/src/main/res/layout/home_indicator_image.xml

@@ -0,0 +1,11 @@
+<?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:orientation="vertical">
+
+    <ImageView
+        android:id="@+id/indicator_iamge"
+        android:layout_width="match_parent"
+        android:layout_height="match_parent" />
+</LinearLayout>

+ 5 - 0
app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml

@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="utf-8"?>
+<adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android">
+    <background android:drawable="@drawable/ic_launcher_background" />
+    <foreground android:drawable="@drawable/ic_launcher_foreground" />
+</adaptive-icon>

+ 5 - 0
app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml

@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="utf-8"?>
+<adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android">
+    <background android:drawable="@drawable/ic_launcher_background" />
+    <foreground android:drawable="@drawable/ic_launcher_foreground" />
+</adaptive-icon>

BIN
app/src/main/res/mipmap-hdpi/hong_indicator.png


BIN
app/src/main/res/mipmap-hdpi/hui_indicator.png


BIN
app/src/main/res/mipmap-hdpi/ic_launcher.png


BIN
app/src/main/res/mipmap-hdpi/ic_launcher_round.png


BIN
app/src/main/res/mipmap-mdpi/ic_launcher.png


BIN
app/src/main/res/mipmap-mdpi/ic_launcher_round.png


BIN
app/src/main/res/mipmap-xhdpi/ic_launcher.png


BIN
app/src/main/res/mipmap-xhdpi/ic_launcher_round.png


BIN
app/src/main/res/mipmap-xxhdpi/dialog_loading_img.png


BIN
app/src/main/res/mipmap-xxhdpi/ic_launcher.png


BIN
app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png


BIN
app/src/main/res/mipmap-xxxhdpi/ic_launcher.png


BIN
app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png


+ 6 - 0
app/src/main/res/values/colors.xml

@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8"?>
+<resources>
+    <color name="colorPrimary">#3F51B5</color>
+    <color name="colorPrimaryDark">#303F9F</color>
+    <color name="colorAccent">#FF4081</color>
+</resources>

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

@@ -0,0 +1,3 @@
+<resources>
+    <string name="app_name">YouPu</string>
+</resources>

+ 40 - 0
app/src/main/res/values/styles.xml

@@ -0,0 +1,40 @@
+<resources>
+
+    <!-- Base application theme. -->
+    <style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
+        <!-- Customize your theme here. -->
+        <item name="colorPrimary">@color/colorPrimary</item>
+        <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
+        <item name="colorAccent">@color/colorAccent</item>
+        <!--设置无标题-->
+        <item name="windowNoTitle">true</item>
+        <item name="android:windowActionBar">false</item>
+        <!--<item name="android:windowFullscreen">true</item>-->
+    </style>
+
+    <style name="Theme.AppCompat.Light.NoActionBar" parent="@style/Theme.AppCompat.Light">
+        <item name="android:windowNoTitle">true</item>
+        <item name="windowActionBar">false</item>
+    </style>
+
+
+    <!-- my loading dialog -->
+    <style name="MyDialogStyle">
+        <item name="android:windowBackground">@android:color/transparent</item>
+        <item name="android:windowFrame">@null</item>
+        <item name="android:windowNoTitle">true</item>
+        <item name="android:windowIsFloating">true</item>
+        <item name="android:windowIsTranslucent">true</item>
+        <item name="android:windowContentOverlay">@null</item>
+        <item name="android:windowAnimationStyle">@android:style/Animation.Dialog</item>
+        <item name="android:backgroundDimEnabled">true</item>
+    </style>
+    <!-- popup window 显示消失动画-->
+    <style name="PopWindowAnimStyle">
+        <item name="android:windowShowAnimation">@anim/dialog_enter</item>
+        <!-- 指定显示的动画xml  -->
+        <item name="android:windowHideAnimation">@anim/dialog_exit</item>
+        <!-- 指定消失的动画xml  -->
+    </style>
+
+</resources>

+ 0 - 0
app/src/test/java/com/youpu/ExampleUnitTest.java


Some files were not shown because too many files changed in this diff