[
  {
    "path": ".gitignore",
    "content": ".gradle\n/local.properties\n/.idea/workspace.xml\n/.idea/libraries\n.DS_Store\n/build\n/captures\n"
  },
  {
    "path": ".idea/.name",
    "content": "AndroidNewWidgetsDemo"
  },
  {
    "path": ".idea/compiler.xml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<project version=\"4\">\n  <component name=\"CompilerConfiguration\">\n    <resourceExtensions />\n    <wildcardResourcePatterns>\n      <entry name=\"!?*.java\" />\n      <entry name=\"!?*.form\" />\n      <entry name=\"!?*.class\" />\n      <entry name=\"!?*.groovy\" />\n      <entry name=\"!?*.scala\" />\n      <entry name=\"!?*.flex\" />\n      <entry name=\"!?*.kt\" />\n      <entry name=\"!?*.clj\" />\n      <entry name=\"!?*.aj\" />\n    </wildcardResourcePatterns>\n    <annotationProcessing>\n      <profile default=\"true\" name=\"Default\" enabled=\"false\">\n        <processorPath useClasspath=\"true\" />\n      </profile>\n    </annotationProcessing>\n  </component>\n</project>"
  },
  {
    "path": ".idea/copyright/monkey.xml",
    "content": "<component name=\"CopyrightManager\">\n  <copyright>\n    <option name=\"myName\" value=\"monkey\" />\n    <option name=\"notice\" value=\"/*&#10; *&#10; *  *&#10; *  *  * ===================================&#10; *  *  * Copyright (c) 2016.&#10; *  *  * 作者：安卓猴&#10; *  *  * 微博：@安卓猴&#10; *  *  * 博客：http://sunjiajia.com&#10; *  *  * Github：https://github.com/opengit&#10; *  *  *&#10; *  *  * 注意**：如果您使用或者修改该代码，请务必保留此版权信息。&#10; *  *  * ===================================&#10; *  *&#10; *  *&#10; *&#10; */\" />\n  </copyright>\n</component>"
  },
  {
    "path": ".idea/copyright/profiles_settings.xml",
    "content": "<component name=\"CopyrightManager\">\n  <settings default=\"monkey\">\n    <module2copyright>\n      <element module=\"All\" copyright=\"monkey\" />\n    </module2copyright>\n  </settings>\n</component>"
  },
  {
    "path": ".idea/encodings.xml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<project version=\"4\">\n  <component name=\"Encoding\" defaultCharsetForPropertiesFiles=\"UTF-8\">\n    <file url=\"PROJECT\" charset=\"UTF-8\" />\n  </component>\n</project>"
  },
  {
    "path": ".idea/gradle.xml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<project version=\"4\">\n  <component name=\"GradleSettings\">\n    <option name=\"linkedExternalProjectsSettings\">\n      <GradleProjectSettings>\n        <option name=\"distributionType\" value=\"LOCAL\" />\n        <option name=\"externalProjectPath\" value=\"$PROJECT_DIR$\" />\n        <option name=\"gradleHome\" value=\"$APPLICATION_HOME_DIR$/gradle/gradle-2.10\" />\n        <option name=\"modules\">\n          <set>\n            <option value=\"$PROJECT_DIR$\" />\n            <option value=\"$PROJECT_DIR$/app\" />\n          </set>\n        </option>\n        <option name=\"myModules\">\n          <set>\n            <option value=\"$PROJECT_DIR$\" />\n            <option value=\"$PROJECT_DIR$/app\" />\n          </set>\n        </option>\n      </GradleProjectSettings>\n    </option>\n  </component>\n</project>"
  },
  {
    "path": ".idea/misc.xml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<project version=\"4\">\n  <component name=\"EntryPointsManager\">\n    <entry_points version=\"2.0\" />\n  </component>\n  <component name=\"NullableNotNullManager\">\n    <option name=\"myDefaultNullable\" value=\"android.support.annotation.Nullable\" />\n    <option name=\"myDefaultNotNull\" value=\"android.support.annotation.NonNull\" />\n    <option name=\"myNullables\">\n      <value>\n        <list size=\"4\">\n          <item index=\"0\" class=\"java.lang.String\" itemvalue=\"org.jetbrains.annotations.Nullable\" />\n          <item index=\"1\" class=\"java.lang.String\" itemvalue=\"javax.annotation.Nullable\" />\n          <item index=\"2\" class=\"java.lang.String\" itemvalue=\"edu.umd.cs.findbugs.annotations.Nullable\" />\n          <item index=\"3\" class=\"java.lang.String\" itemvalue=\"android.support.annotation.Nullable\" />\n        </list>\n      </value>\n    </option>\n    <option name=\"myNotNulls\">\n      <value>\n        <list size=\"4\">\n          <item index=\"0\" class=\"java.lang.String\" itemvalue=\"org.jetbrains.annotations.NotNull\" />\n          <item index=\"1\" class=\"java.lang.String\" itemvalue=\"javax.annotation.Nonnull\" />\n          <item index=\"2\" class=\"java.lang.String\" itemvalue=\"edu.umd.cs.findbugs.annotations.NonNull\" />\n          <item index=\"3\" class=\"java.lang.String\" itemvalue=\"android.support.annotation.NonNull\" />\n        </list>\n      </value>\n    </option>\n  </component>\n  <component name=\"ProjectLevelVcsManager\" settingsEditedManually=\"false\">\n    <OptionsSetting value=\"true\" id=\"Add\" />\n    <OptionsSetting value=\"true\" id=\"Remove\" />\n    <OptionsSetting value=\"true\" id=\"Checkout\" />\n    <OptionsSetting value=\"true\" id=\"Update\" />\n    <OptionsSetting value=\"true\" id=\"Status\" />\n    <OptionsSetting value=\"true\" id=\"Edit\" />\n    <ConfirmationsSetting value=\"0\" id=\"Add\" />\n    <ConfirmationsSetting value=\"0\" id=\"Remove\" />\n  </component>\n  <component name=\"ProjectRootManager\" version=\"2\" languageLevel=\"JDK_1_7\" default=\"true\" assert-keyword=\"true\" jdk-15=\"true\" project-jdk-name=\"1.8\" project-jdk-type=\"JavaSDK\">\n    <output url=\"file://$PROJECT_DIR$/build/classes\" />\n  </component>\n  <component name=\"ProjectType\">\n    <option name=\"id\" value=\"Android\" />\n  </component>\n  <component name=\"masterDetails\">\n    <states>\n      <state key=\"Copyright.UI\">\n        <settings>\n          <last-edited>monkey</last-edited>\n          <splitter-proportions>\n            <option name=\"proportions\">\n              <list>\n                <option value=\"0.2\" />\n              </list>\n            </option>\n          </splitter-proportions>\n        </settings>\n      </state>\n    </states>\n  </component>\n</project>"
  },
  {
    "path": ".idea/modules.xml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<project version=\"4\">\n  <component name=\"ProjectModuleManager\">\n    <modules>\n      <module fileurl=\"file://$PROJECT_DIR$/AndroidNewWidgetsDemo.iml\" filepath=\"$PROJECT_DIR$/AndroidNewWidgetsDemo.iml\" />\n      <module fileurl=\"file://$PROJECT_DIR$/app/app.iml\" filepath=\"$PROJECT_DIR$/app/app.iml\" />\n    </modules>\n  </component>\n</project>"
  },
  {
    "path": ".idea/runConfigurations.xml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<project version=\"4\">\n  <component name=\"RunConfigurationProducerService\">\n    <option name=\"ignoredProducers\">\n      <set>\n        <option value=\"org.jetbrains.plugins.gradle.execution.test.runner.AllInPackageGradleConfigurationProducer\" />\n        <option value=\"org.jetbrains.plugins.gradle.execution.test.runner.TestClassGradleConfigurationProducer\" />\n        <option value=\"org.jetbrains.plugins.gradle.execution.test.runner.TestMethodGradleConfigurationProducer\" />\n      </set>\n    </option>\n  </component>\n</project>"
  },
  {
    "path": ".idea/vcs.xml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<project version=\"4\">\n  <component name=\"VcsDirectoryMappings\">\n    <mapping directory=\"$PROJECT_DIR$\" vcs=\"Git\" />\n  </component>\n</project>"
  },
  {
    "path": "AndroidNewWidgetsDemo.iml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<module external.linked.project.id=\"AndroidNewWidgetsDemo\" external.linked.project.path=\"$MODULE_DIR$\" external.root.project.path=\"$MODULE_DIR$\" external.system.id=\"GRADLE\" external.system.module.group=\"\" external.system.module.version=\"unspecified\" type=\"JAVA_MODULE\" version=\"4\">\n  <component name=\"FacetManager\">\n    <facet type=\"java-gradle\" name=\"Java-Gradle\">\n      <configuration>\n        <option name=\"BUILD_FOLDER_PATH\" value=\"$MODULE_DIR$/build\" />\n        <option name=\"BUILDABLE\" value=\"false\" />\n      </configuration>\n    </facet>\n  </component>\n  <component name=\"NewModuleRootManager\" LANGUAGE_LEVEL=\"JDK_1_7\" inherit-compiler-output=\"true\">\n    <exclude-output />\n    <content url=\"file://$MODULE_DIR$\">\n      <excludeFolder url=\"file://$MODULE_DIR$/.gradle\" />\n    </content>\n    <orderEntry type=\"inheritedJdk\" />\n    <orderEntry type=\"sourceFolder\" forTests=\"false\" />\n  </component>\n</module>"
  },
  {
    "path": "README.md",
    "content": "# 一个Demo学会用Android兼容包新控件\n\n伟大的Google为Android推出了一系列的兼容包，最新的就是Design Support Library了，这里我们结合v7和v4中的几个控件，来主要学习Design Support Library中的几个新控件！一个Demo学会用它们！\n\n####效果动图GIF：\n![Design Support Library Demo](https://blog.sunjiajia.com/img/201507/android-new-widgets-demo.gif)\n\n\n**通过本实例可以学习到以下内容：**\n\n* Drawerlayout和NavigationView实现优雅的Google范儿侧边栏；\n* 新控件CoordinatorLayout、AppBarLayout、Toolbar、FloatingActionButton的用法，以及Toolbar的渐变隐藏动画效果；\n* 官方Tabs组件TabLayout和ViewPager结合实现主界面内容区域；\n* SwipeRefreshLayout和RecyclerView结合实现下拉刷新，以及RecyclerView的数据适配器RecyclerView.Adapter<ViewHolder>的用法，还有RecyclerView中item的点击事件的实现方法；\n* 卡片式CardView的用法；\n* 类似Toast的新控件Snackbar的用法。\n\n\n> 在源码中学习Android，是有种身临其境的感觉的。\n\n> 整个Demo的源码我放在了GitHub上，谢谢star一下~\n> 在看源码过程中如果发现什么问题，请在博客留言，看到一定回复。\n\n> 源码地址：\n> [AndroidNewWidgetsDemo](https://github.com/git0pen/AndroidNewWidgetsDemo)\n\n> 博文地址：\n> [AndroidNewWidgetsDemo](https://blog.sunjiajia.com/2015/07/02/android-new-widgets-demo/)\n\n\n**2016.04.29**\n\n* 更新所有兼容包到23.3.0\n* RecyclerView中的Item水平居中并match_parent\n* Fab添加了margin值，并更换了颜色\n\n**2016.07.14**\n\n* 更新所有依赖包到最新版本\n\n## 微信公众号：Android奇想录（android_amazing）\n\n![Android奇想录](https://blog.sunjiajia.com/img/qrcode_for_android_amazing.jpg)\n"
  },
  {
    "path": "app/.gitignore",
    "content": "/build\n"
  },
  {
    "path": "app/app.iml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<module external.linked.project.id=\":app\" external.linked.project.path=\"$MODULE_DIR$\" external.root.project.path=\"$MODULE_DIR$/..\" external.system.id=\"GRADLE\" external.system.module.group=\"AndroidNewWidgetsDemo\" external.system.module.version=\"unspecified\" type=\"JAVA_MODULE\" version=\"4\">\n  <component name=\"FacetManager\">\n    <facet type=\"android-gradle\" name=\"Android-Gradle\">\n      <configuration>\n        <option name=\"GRADLE_PROJECT_PATH\" value=\":app\" />\n      </configuration>\n    </facet>\n    <facet type=\"android\" name=\"Android\">\n      <configuration>\n        <option name=\"SELECTED_BUILD_VARIANT\" value=\"debug\" />\n        <option name=\"SELECTED_TEST_ARTIFACT\" value=\"_android_test_\" />\n        <option name=\"ASSEMBLE_TASK_NAME\" value=\"assembleDebug\" />\n        <option name=\"COMPILE_JAVA_TASK_NAME\" value=\"compileDebugSources\" />\n        <afterSyncTasks>\n          <task>generateDebugSources</task>\n        </afterSyncTasks>\n        <option name=\"ALLOW_USER_CONFIGURATION\" value=\"false\" />\n        <option name=\"MANIFEST_FILE_RELATIVE_PATH\" value=\"/src/main/AndroidManifest.xml\" />\n        <option name=\"RES_FOLDER_RELATIVE_PATH\" value=\"/src/main/res\" />\n        <option name=\"RES_FOLDERS_RELATIVE_PATH\" value=\"file://$MODULE_DIR$/src/main/res\" />\n        <option name=\"ASSETS_FOLDER_RELATIVE_PATH\" value=\"/src/main/assets\" />\n      </configuration>\n    </facet>\n  </component>\n  <component name=\"NewModuleRootManager\" LANGUAGE_LEVEL=\"JDK_1_7\" inherit-compiler-output=\"false\">\n    <output url=\"file://$MODULE_DIR$/build/intermediates/classes/debug\" />\n    <output-test url=\"file://$MODULE_DIR$/build/intermediates/classes/test/debug\" />\n    <exclude-output />\n    <content url=\"file://$MODULE_DIR$\">\n      <sourceFolder url=\"file://$MODULE_DIR$/build/generated/source/r/debug\" isTestSource=\"false\" generated=\"true\" />\n      <sourceFolder url=\"file://$MODULE_DIR$/build/generated/source/aidl/debug\" isTestSource=\"false\" generated=\"true\" />\n      <sourceFolder url=\"file://$MODULE_DIR$/build/generated/source/buildConfig/debug\" isTestSource=\"false\" generated=\"true\" />\n      <sourceFolder url=\"file://$MODULE_DIR$/build/generated/source/rs/debug\" isTestSource=\"false\" generated=\"true\" />\n      <sourceFolder url=\"file://$MODULE_DIR$/build/generated/res/rs/debug\" type=\"java-resource\" />\n      <sourceFolder url=\"file://$MODULE_DIR$/build/generated/res/resValues/debug\" type=\"java-resource\" />\n      <sourceFolder url=\"file://$MODULE_DIR$/build/generated/source/r/androidTest/debug\" isTestSource=\"true\" generated=\"true\" />\n      <sourceFolder url=\"file://$MODULE_DIR$/build/generated/source/aidl/androidTest/debug\" isTestSource=\"true\" generated=\"true\" />\n      <sourceFolder url=\"file://$MODULE_DIR$/build/generated/source/buildConfig/androidTest/debug\" isTestSource=\"true\" generated=\"true\" />\n      <sourceFolder url=\"file://$MODULE_DIR$/build/generated/source/rs/androidTest/debug\" isTestSource=\"true\" generated=\"true\" />\n      <sourceFolder url=\"file://$MODULE_DIR$/build/generated/res/rs/androidTest/debug\" type=\"java-test-resource\" />\n      <sourceFolder url=\"file://$MODULE_DIR$/build/generated/res/resValues/androidTest/debug\" type=\"java-test-resource\" />\n      <sourceFolder url=\"file://$MODULE_DIR$/src/debug/res\" type=\"java-resource\" />\n      <sourceFolder url=\"file://$MODULE_DIR$/src/debug/resources\" type=\"java-resource\" />\n      <sourceFolder url=\"file://$MODULE_DIR$/src/debug/assets\" type=\"java-resource\" />\n      <sourceFolder url=\"file://$MODULE_DIR$/src/debug/aidl\" isTestSource=\"false\" />\n      <sourceFolder url=\"file://$MODULE_DIR$/src/debug/java\" isTestSource=\"false\" />\n      <sourceFolder url=\"file://$MODULE_DIR$/src/debug/jni\" isTestSource=\"false\" />\n      <sourceFolder url=\"file://$MODULE_DIR$/src/debug/rs\" isTestSource=\"false\" />\n      <sourceFolder url=\"file://$MODULE_DIR$/src/debug/shaders\" isTestSource=\"false\" />\n      <sourceFolder url=\"file://$MODULE_DIR$/src/testDebug/res\" type=\"java-test-resource\" />\n      <sourceFolder url=\"file://$MODULE_DIR$/src/testDebug/resources\" type=\"java-test-resource\" />\n      <sourceFolder url=\"file://$MODULE_DIR$/src/testDebug/assets\" type=\"java-test-resource\" />\n      <sourceFolder url=\"file://$MODULE_DIR$/src/testDebug/aidl\" isTestSource=\"true\" />\n      <sourceFolder url=\"file://$MODULE_DIR$/src/testDebug/java\" isTestSource=\"true\" />\n      <sourceFolder url=\"file://$MODULE_DIR$/src/testDebug/jni\" isTestSource=\"true\" />\n      <sourceFolder url=\"file://$MODULE_DIR$/src/testDebug/rs\" isTestSource=\"true\" />\n      <sourceFolder url=\"file://$MODULE_DIR$/src/testDebug/shaders\" isTestSource=\"true\" />\n      <sourceFolder url=\"file://$MODULE_DIR$/src/main/res\" type=\"java-resource\" />\n      <sourceFolder url=\"file://$MODULE_DIR$/src/main/resources\" type=\"java-resource\" />\n      <sourceFolder url=\"file://$MODULE_DIR$/src/main/assets\" type=\"java-resource\" />\n      <sourceFolder url=\"file://$MODULE_DIR$/src/main/aidl\" isTestSource=\"false\" />\n      <sourceFolder url=\"file://$MODULE_DIR$/src/main/java\" isTestSource=\"false\" />\n      <sourceFolder url=\"file://$MODULE_DIR$/src/main/jni\" isTestSource=\"false\" />\n      <sourceFolder url=\"file://$MODULE_DIR$/src/main/rs\" isTestSource=\"false\" />\n      <sourceFolder url=\"file://$MODULE_DIR$/src/main/shaders\" isTestSource=\"false\" />\n      <sourceFolder url=\"file://$MODULE_DIR$/src/test/res\" type=\"java-test-resource\" />\n      <sourceFolder url=\"file://$MODULE_DIR$/src/test/resources\" type=\"java-test-resource\" />\n      <sourceFolder url=\"file://$MODULE_DIR$/src/test/assets\" type=\"java-test-resource\" />\n      <sourceFolder url=\"file://$MODULE_DIR$/src/test/aidl\" isTestSource=\"true\" />\n      <sourceFolder url=\"file://$MODULE_DIR$/src/test/java\" isTestSource=\"true\" />\n      <sourceFolder url=\"file://$MODULE_DIR$/src/test/jni\" isTestSource=\"true\" />\n      <sourceFolder url=\"file://$MODULE_DIR$/src/test/rs\" isTestSource=\"true\" />\n      <sourceFolder url=\"file://$MODULE_DIR$/src/test/shaders\" isTestSource=\"true\" />\n      <sourceFolder url=\"file://$MODULE_DIR$/src/androidTest/res\" type=\"java-test-resource\" />\n      <sourceFolder url=\"file://$MODULE_DIR$/src/androidTest/resources\" type=\"java-test-resource\" />\n      <sourceFolder url=\"file://$MODULE_DIR$/src/androidTest/assets\" type=\"java-test-resource\" />\n      <sourceFolder url=\"file://$MODULE_DIR$/src/androidTest/aidl\" isTestSource=\"true\" />\n      <sourceFolder url=\"file://$MODULE_DIR$/src/androidTest/java\" isTestSource=\"true\" />\n      <sourceFolder url=\"file://$MODULE_DIR$/src/androidTest/jni\" isTestSource=\"true\" />\n      <sourceFolder url=\"file://$MODULE_DIR$/src/androidTest/rs\" isTestSource=\"true\" />\n      <sourceFolder url=\"file://$MODULE_DIR$/src/androidTest/shaders\" isTestSource=\"true\" />\n      <excludeFolder url=\"file://$MODULE_DIR$/build/intermediates/assets\" />\n      <excludeFolder url=\"file://$MODULE_DIR$/build/intermediates/blame\" />\n      <excludeFolder url=\"file://$MODULE_DIR$/build/intermediates/bundles\" />\n      <excludeFolder url=\"file://$MODULE_DIR$/build/intermediates/classes\" />\n      <excludeFolder url=\"file://$MODULE_DIR$/build/intermediates/dependency-cache\" />\n      <excludeFolder url=\"file://$MODULE_DIR$/build/intermediates/exploded-aar/com.android.support/animated-vector-drawable/24.0.0/jars\" />\n      <excludeFolder url=\"file://$MODULE_DIR$/build/intermediates/exploded-aar/com.android.support/appcompat-v7/24.0.0/jars\" />\n      <excludeFolder url=\"file://$MODULE_DIR$/build/intermediates/exploded-aar/com.android.support/cardview-v7/24.0.0/jars\" />\n      <excludeFolder url=\"file://$MODULE_DIR$/build/intermediates/exploded-aar/com.android.support/design/24.0.0/jars\" />\n      <excludeFolder url=\"file://$MODULE_DIR$/build/intermediates/exploded-aar/com.android.support/recyclerview-v7/24.0.0/jars\" />\n      <excludeFolder url=\"file://$MODULE_DIR$/build/intermediates/exploded-aar/com.android.support/support-v4/24.0.0/jars\" />\n      <excludeFolder url=\"file://$MODULE_DIR$/build/intermediates/exploded-aar/com.android.support/support-vector-drawable/24.0.0/jars\" />\n      <excludeFolder url=\"file://$MODULE_DIR$/build/intermediates/incremental\" />\n      <excludeFolder url=\"file://$MODULE_DIR$/build/intermediates/incremental-classes\" />\n      <excludeFolder url=\"file://$MODULE_DIR$/build/intermediates/incremental-runtime-classes\" />\n      <excludeFolder url=\"file://$MODULE_DIR$/build/intermediates/incremental-safeguard\" />\n      <excludeFolder url=\"file://$MODULE_DIR$/build/intermediates/incremental-verifier\" />\n      <excludeFolder url=\"file://$MODULE_DIR$/build/intermediates/instant-run-resources\" />\n      <excludeFolder url=\"file://$MODULE_DIR$/build/intermediates/instant-run-support\" />\n      <excludeFolder url=\"file://$MODULE_DIR$/build/intermediates/jniLibs\" />\n      <excludeFolder url=\"file://$MODULE_DIR$/build/intermediates/manifests\" />\n      <excludeFolder url=\"file://$MODULE_DIR$/build/intermediates/reload-dex\" />\n      <excludeFolder url=\"file://$MODULE_DIR$/build/intermediates/res\" />\n      <excludeFolder url=\"file://$MODULE_DIR$/build/intermediates/restart-dex\" />\n      <excludeFolder url=\"file://$MODULE_DIR$/build/intermediates/rs\" />\n      <excludeFolder url=\"file://$MODULE_DIR$/build/intermediates/shaders\" />\n      <excludeFolder url=\"file://$MODULE_DIR$/build/intermediates/symbols\" />\n      <excludeFolder url=\"file://$MODULE_DIR$/build/intermediates/transforms\" />\n      <excludeFolder url=\"file://$MODULE_DIR$/build/outputs\" />\n      <excludeFolder url=\"file://$MODULE_DIR$/build/tmp\" />\n    </content>\n    <orderEntry type=\"jdk\" jdkName=\"Android API 24 Platform\" jdkType=\"Android SDK\" />\n    <orderEntry type=\"sourceFolder\" forTests=\"false\" />\n    <orderEntry type=\"library\" exported=\"\" name=\"recyclerview-v7-24.0.0\" level=\"project\" />\n    <orderEntry type=\"library\" exported=\"\" name=\"design-24.0.0\" level=\"project\" />\n    <orderEntry type=\"library\" exported=\"\" name=\"appcompat-v7-24.0.0\" level=\"project\" />\n    <orderEntry type=\"library\" exported=\"\" name=\"cardview-v7-24.0.0\" level=\"project\" />\n    <orderEntry type=\"library\" exported=\"\" name=\"support-annotations-24.0.0\" level=\"project\" />\n    <orderEntry type=\"library\" exported=\"\" name=\"support-v4-24.0.0\" level=\"project\" />\n    <orderEntry type=\"library\" exported=\"\" name=\"support-vector-drawable-24.0.0\" level=\"project\" />\n    <orderEntry type=\"library\" exported=\"\" name=\"animated-vector-drawable-24.0.0\" level=\"project\" />\n  </component>\n</module>"
  },
  {
    "path": "app/build.gradle",
    "content": "/*\n *\n *  *\n *  *  *\n *  *  *  * ===================================\n *  *  *  * Copyright (c) 2016.\n *  *  *  * 作者：安卓猴\n *  *  *  * 微博：@安卓猴\n *  *  *  * 博客：http://sunjiajia.com\n *  *  *  * Github：https://github.com/opengit\n *  *  *  *\n *  *  *  * 注意**：如果您使用或者修改该代码，请务必保留此版权信息。\n *  *  *  * ===================================\n *  *  *\n *  *  *\n *  *\n *\n */\n\napply plugin: 'com.android.application'\n\nandroid {\n  compileSdkVersion 24\n  buildToolsVersion '24.0.0'\n\n  defaultConfig {\n    applicationId \"com.sunjiajia.androidnewwidgetsdemo\"\n    minSdkVersion 14\n    targetSdkVersion 24\n    versionCode 1\n    versionName \"1.0\"\n  }\n  buildTypes {\n    release {\n      minifyEnabled false\n      proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'\n    }\n  }\n}\n\ndependencies {\n  compile fileTree(dir: 'libs', include: ['*.jar'])\n  compile 'com.android.support:appcompat-v7:24.0.0'\n  compile 'com.android.support:design:24.0.0'\n  compile 'com.android.support:cardview-v7:24.0.0'\n  compile 'com.android.support:recyclerview-v7:24.0.0'\n}\n"
  },
  {
    "path": "app/proguard-rules.pro",
    "content": "# Add project specific ProGuard rules here.\n# By default, the flags in this file are appended to flags specified\n# in D:\\android\\android-sdk-windows\\sdk/tools/proguard/proguard-android.txt\n# You can edit the include path and order by changing the proguardFiles\n# directive in build.gradle.\n#\n# For more details, see\n#   http://developer.android.com/guide/developing/tools/proguard.html\n\n# Add any project specific keep options here:\n\n# If your project uses WebView with JS, uncomment the following\n# and specify the fully qualified class name to the JavaScript interface\n# class:\n#-keepclassmembers class fqcn.of.javascript.interface.for.webview {\n#   public *;\n#}\n"
  },
  {
    "path": "app/src/androidTest/java/com/sunjiajia/androidnewwidgetsdemo/ApplicationTest.java",
    "content": "package com.sunjiajia.androidnewwidgetsdemo;\n\nimport android.app.Application;\nimport android.test.ApplicationTestCase;\n\n/**\n * <a href=\"http://d.android.com/tools/testing/testing_android.html\">Testing Fundamentals</a>\n */\npublic class ApplicationTest extends ApplicationTestCase<Application> {\n    public ApplicationTest() {\n        super(Application.class);\n    }\n}"
  },
  {
    "path": "app/src/main/AndroidManifest.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!--\n  ~ /*\n  ~  *\n  ~  *  *\n  ~  *  *  * ===================================\n  ~  *  *  * Copyright (c) 2016.\n  ~  *  *  * 作者：安卓猴\n  ~  *  *  * 微博：@安卓猴\n  ~  *  *  * 博客：http://sunjiajia.com\n  ~  *  *  * Github：https://github.com/opengit\n  ~  *  *  *\n  ~  *  *  * 注意**：如果您使用或者修改该代码，请务必保留此版权信息。\n  ~  *  *  * ===================================\n  ~  *  *\n  ~  *  *\n  ~  *\n  ~  */\n  -->\n\n<manifest xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    package=\"com.sunjiajia.androidnewwidgetsdemo\">\n\n  <application\n      android:allowBackup=\"true\"\n      android:icon=\"@mipmap/ic_launcher\"\n      android:label=\"@string/app_name\"\n      android:theme=\"@style/AppTheme\">\n    <activity\n        android:name=\".MyActivity\"\n        android:label=\"@string/app_name\">\n      <intent-filter>\n        <action android:name=\"android.intent.action.MAIN\"/>\n\n        <category android:name=\"android.intent.category.LAUNCHER\"/>\n      </intent-filter>\n    </activity>\n  </application>\n\n</manifest>\n"
  },
  {
    "path": "app/src/main/java/com/sunjiajia/androidnewwidgetsdemo/MyActivity.java",
    "content": "/*\n *\n *  *\n *  *  *\n *  *  *  * ===================================\n *  *  *  * Copyright (c) 2016.\n *  *  *  * 作者：安卓猴\n *  *  *  * 微博：@安卓猴\n *  *  *  * 博客：http://sunjiajia.com\n *  *  *  * Github：https://github.com/opengit\n *  *  *  *\n *  *  *  * 注意**：如果您使用或者修改该代码，请务必保留此版权信息。\n *  *  *  * ===================================\n *  *  *\n *  *  *\n *  *\n *\n */\n\npackage com.sunjiajia.androidnewwidgetsdemo;\n\nimport android.os.Bundle;\nimport android.support.design.widget.AppBarLayout;\nimport android.support.design.widget.CoordinatorLayout;\nimport android.support.design.widget.FloatingActionButton;\nimport android.support.design.widget.NavigationView;\nimport android.support.design.widget.Snackbar;\nimport android.support.design.widget.TabLayout;\nimport android.support.design.widget.TabLayout.TabLayoutOnPageChangeListener;\nimport android.support.v4.app.Fragment;\nimport android.support.v4.view.ViewPager;\nimport android.support.v4.widget.DrawerLayout;\nimport android.support.v7.app.ActionBarDrawerToggle;\nimport android.support.v7.app.AppCompatActivity;\nimport android.support.v7.widget.Toolbar;\nimport android.view.Menu;\nimport android.view.MenuItem;\nimport android.view.View;\nimport android.view.animation.RotateAnimation;\n\nimport com.sunjiajia.androidnewwidgetsdemo.adapter.MyViewPagerAdapter;\nimport com.sunjiajia.androidnewwidgetsdemo.utils.SnackbarUtil;\n\nimport java.util.ArrayList;\nimport java.util.List;\n\nimport static android.support.design.widget.TabLayout.*;\n\npublic class MyActivity extends AppCompatActivity\n    implements ViewPager.OnPageChangeListener, OnClickListener {\n\n  //初始化各种控件，照着xml中的顺序写\n  private DrawerLayout mDrawerLayout;\n  private CoordinatorLayout mCoordinatorLayout;\n  private AppBarLayout mAppBarLayout;\n  private Toolbar mToolbar;\n  private TabLayout mTabLayout;\n  private ViewPager mViewPager;\n  private FloatingActionButton mFloatingActionButton;\n  private NavigationView mNavigationView;\n\n  // TabLayout中的tab标题\n  private String[] mTitles;\n  // 填充到ViewPager中的Fragment\n  private List<Fragment> mFragments;\n  // ViewPager的数据适配器\n  private MyViewPagerAdapter mViewPagerAdapter;\n\n  @Override protected void onCreate(Bundle savedInstanceState) {\n    super.onCreate(savedInstanceState);\n    setContentView(R.layout.activity_my);\n\n    // 初始化各种控件\n    initViews();\n\n    // 初始化mTitles、mFragments等ViewPager需要的数据\n    //这里的数据都是模拟出来了，自己手动生成的，在项目中需要从网络获取数据\n    initData();\n\n    // 对各种控件进行设置、适配、填充数据\n    configViews();\n  }\n\n  private void initData() {\n\n    // Tab的标题采用string-array的方法保存，在res/values/arrays.xml中写\n    mTitles = getResources().getStringArray(R.array.tab_titles);\n\n    //初始化填充到ViewPager中的Fragment集合\n    mFragments = new ArrayList<>();\n    for (int i = 0; i < mTitles.length; i++) {\n      Bundle mBundle = new Bundle();\n      mBundle.putInt(\"flag\", i);\n      MyFragment mFragment = new MyFragment();\n      mFragment.setArguments(mBundle);\n      mFragments.add(i, mFragment);\n    }\n  }\n\n  private void configViews() {\n\n    // 设置显示Toolbar\n    setSupportActionBar(mToolbar);\n\n    // 设置Drawerlayout开关指示器，即Toolbar最左边的那个icon\n    ActionBarDrawerToggle mActionBarDrawerToggle =\n        new ActionBarDrawerToggle(this, mDrawerLayout, mToolbar, R.string.open, R.string.close);\n    mActionBarDrawerToggle.syncState();\n    mDrawerLayout.setDrawerListener(mActionBarDrawerToggle);\n\n    //给NavigationView填充顶部区域，也可在xml中使用app:headerLayout=\"@layout/header_nav\"来设置\n    mNavigationView.inflateHeaderView(R.layout.header_nav);\n    //给NavigationView填充Menu菜单，也可在xml中使用app:menu=\"@menu/menu_nav\"来设置\n    mNavigationView.inflateMenu(R.menu.menu_nav);\n\n    // 自己写的方法，设置NavigationView中menu的item被选中后要执行的操作\n    onNavgationViewMenuItemSelected(mNavigationView);\n\n    // 初始化ViewPager的适配器，并设置给它\n    mViewPagerAdapter = new MyViewPagerAdapter(getSupportFragmentManager(), mTitles, mFragments);\n    mViewPager.setAdapter(mViewPagerAdapter);\n    // 设置ViewPager最大缓存的页面个数\n    mViewPager.setOffscreenPageLimit(5);\n    // 给ViewPager添加页面动态监听器（为了让Toolbar中的Title可以变化相应的Tab的标题）\n    mViewPager.addOnPageChangeListener(this);\n\n    mTabLayout.setTabMode(MODE_SCROLLABLE);\n    // 将TabLayout和ViewPager进行关联，让两者联动起来\n    mTabLayout.setupWithViewPager(mViewPager);\n    // 设置Tablayout的Tab显示ViewPager的适配器中的getPageTitle函数获取到的标题\n    mTabLayout.setTabsFromPagerAdapter(mViewPagerAdapter);\n\n    // 设置FloatingActionButton的点击事件\n    mFloatingActionButton.setOnClickListener(this);\n  }\n\n  /**\n   * 设置NavigationView中menu的item被选中后要执行的操作\n   *\n   * @param mNav\n   */\n  private void onNavgationViewMenuItemSelected(NavigationView mNav) {\n    mNav.setNavigationItemSelectedListener(new NavigationView.OnNavigationItemSelectedListener() {\n      @Override public boolean onNavigationItemSelected(MenuItem menuItem) {\n\n        String msgString = \"\";\n\n        switch (menuItem.getItemId()) {\n          case R.id.nav_menu_home:\n            msgString = (String) menuItem.getTitle();\n            break;\n          case R.id.nav_menu_categories:\n            msgString = (String) menuItem.getTitle();\n            break;\n          case R.id.nav_menu_feedback:\n            msgString = (String) menuItem.getTitle();\n            break;\n          case R.id.nav_menu_setting:\n            msgString = (String) menuItem.getTitle();\n            break;\n        }\n\n        // Menu item点击后选中，并关闭Drawerlayout\n        menuItem.setChecked(true);\n        mDrawerLayout.closeDrawers();\n\n        // android-support-design兼容包中新添加的一个类似Toast的控件。\n        SnackbarUtil.show(mViewPager, msgString, 0);\n\n        return true;\n      }\n    });\n  }\n\n  private void initViews() {\n    mDrawerLayout = (DrawerLayout) findViewById(R.id.id_drawerlayout);\n    mCoordinatorLayout = (CoordinatorLayout) findViewById(R.id.id_coordinatorlayout);\n    mAppBarLayout = (AppBarLayout) findViewById(R.id.id_appbarlayout);\n    mToolbar = (Toolbar) findViewById(R.id.id_toolbar);\n    mTabLayout = (TabLayout) findViewById(R.id.id_tablayout);\n    mViewPager = (ViewPager) findViewById(R.id.id_viewpager);\n    mFloatingActionButton = (FloatingActionButton) findViewById(R.id.id_floatingactionbutton);\n    mNavigationView = (NavigationView) findViewById(R.id.id_navigationview);\n  }\n\n  @Override public boolean onCreateOptionsMenu(Menu menu) {\n    getMenuInflater().inflate(R.menu.menu_my, menu);\n    return true;\n  }\n\n  @Override public boolean onOptionsItemSelected(MenuItem item) {\n    int id = item.getItemId();\n\n    if (id == R.id.action_settings) {\n      return true;\n    }\n\n    return super.onOptionsItemSelected(item);\n  }\n\n  @Override public void onPageSelected(int position) {\n    mToolbar.setTitle(mTitles[position]);\n  }\n\n  @Override\n  public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {\n\n  }\n\n  @Override public void onPageScrollStateChanged(int state) {\n\n  }\n\n  @Override public void onClick(View v) {\n    switch (v.getId()) {\n      // FloatingActionButton的点击事件\n      case R.id.id_floatingactionbutton:\n        SnackbarUtil.show(v, getString(R.string.plusone), 0);\n        break;\n    }\n  }\n}\n"
  },
  {
    "path": "app/src/main/java/com/sunjiajia/androidnewwidgetsdemo/MyFragment.java",
    "content": "/*\n *\n *  *\n *  *  *\n *  *  *  * ===================================\n *  *  *  * Copyright (c) 2016.\n *  *  *  * 作者：安卓猴\n *  *  *  * 微博：@安卓猴\n *  *  *  * 博客：http://sunjiajia.com\n *  *  *  * Github：https://github.com/opengit\n *  *  *  *\n *  *  *  * 注意**：如果您使用或者修改该代码，请务必保留此版权信息。\n *  *  *  * ===================================\n *  *  *\n *  *  *\n *  *\n *\n */\n\npackage com.sunjiajia.androidnewwidgetsdemo;\n\nimport android.os.Bundle;\nimport android.os.Handler;\nimport android.support.annotation.Nullable;\nimport android.support.v4.app.Fragment;\nimport android.support.v4.widget.SwipeRefreshLayout;\nimport android.support.v7.widget.GridLayoutManager;\nimport android.support.v7.widget.LinearLayoutManager;\nimport android.support.v7.widget.RecyclerView;\nimport android.support.v7.widget.StaggeredGridLayoutManager;\nimport android.view.LayoutInflater;\nimport android.view.View;\nimport android.view.ViewGroup;\n\nimport com.sunjiajia.androidnewwidgetsdemo.adapter.MyRecyclerViewAdapter;\nimport com.sunjiajia.androidnewwidgetsdemo.adapter.MyStaggeredViewAdapter;\nimport com.sunjiajia.androidnewwidgetsdemo.utils.SnackbarUtil;\n\n/**\n * Created by Monkey on 2015/6/29.\n */\npublic class MyFragment extends Fragment\n    implements SwipeRefreshLayout.OnRefreshListener, MyRecyclerViewAdapter.OnItemClickListener,\n    MyStaggeredViewAdapter.OnItemClickListener {\n\n  private View mView;\n  private SwipeRefreshLayout mSwipeRefreshLayout;\n  private RecyclerView mRecyclerView;\n  private RecyclerView.LayoutManager mLayoutManager;\n  private MyRecyclerViewAdapter mRecyclerViewAdapter;\n  private MyStaggeredViewAdapter mStaggeredAdapter;\n\n  private static final int VERTICAL_LIST = 0;\n  private static final int HORIZONTAL_LIST = 1;\n  private static final int VERTICAL_GRID = 2;\n  private static final int HORIZONTAL_GRID = 3;\n  private static final int STAGGERED_GRID = 4;\n\n  private static final int SPAN_COUNT = 2;\n  private int flag = 0;\n\n  @Nullable @Override public View onCreateView(LayoutInflater inflater, ViewGroup container,\n      Bundle savedInstanceState) {\n    mView = inflater.inflate(R.layout.frag_main, container, false);\n    return mView;\n  }\n\n  @Override public void onActivityCreated(@Nullable Bundle savedInstanceState) {\n    super.onActivityCreated(savedInstanceState);\n\n    mSwipeRefreshLayout = (SwipeRefreshLayout) mView.findViewById(R.id.id_swiperefreshlayout);\n    mRecyclerView = (RecyclerView) mView.findViewById(R.id.id_recyclerview);\n\n    flag = (int) getArguments().get(\"flag\");\n    configRecyclerView();\n\n    // 刷新时，指示器旋转后变化的颜色\n    mSwipeRefreshLayout.setColorSchemeResources(R.color.main_blue_light, R.color.main_blue_dark);\n    mSwipeRefreshLayout.setOnRefreshListener(this);\n  }\n\n  private void configRecyclerView() {\n\n    switch (flag) {\n      case VERTICAL_LIST:\n        mLayoutManager =\n            new LinearLayoutManager(getActivity(), LinearLayoutManager.VERTICAL, false);\n        break;\n      case HORIZONTAL_LIST:\n        mLayoutManager =\n            new LinearLayoutManager(getActivity(), LinearLayoutManager.HORIZONTAL, false);\n        break;\n      case VERTICAL_GRID:\n        mLayoutManager =\n            new GridLayoutManager(getActivity(), SPAN_COUNT, GridLayoutManager.VERTICAL, false);\n        break;\n      case HORIZONTAL_GRID:\n        mLayoutManager =\n            new GridLayoutManager(getActivity(), SPAN_COUNT, GridLayoutManager.HORIZONTAL, false);\n        break;\n      case STAGGERED_GRID:\n        mLayoutManager =\n            new StaggeredGridLayoutManager(SPAN_COUNT, StaggeredGridLayoutManager.VERTICAL);\n        break;\n    }\n\n    if (flag != STAGGERED_GRID) {\n      mRecyclerViewAdapter = new MyRecyclerViewAdapter(getActivity());\n      mRecyclerViewAdapter.setOnItemClickListener(this);\n      mRecyclerView.setAdapter(mRecyclerViewAdapter);\n    } else {\n      mStaggeredAdapter = new MyStaggeredViewAdapter(getActivity());\n      mStaggeredAdapter.setOnItemClickListener(this);\n      mRecyclerView.setAdapter(mStaggeredAdapter);\n    }\n\n    mRecyclerView.setLayoutManager(mLayoutManager);\n  }\n\n  @Override public void onRefresh() {\n\n    // 刷新时模拟数据的变化\n    new Handler().postDelayed(new Runnable() {\n      @Override public void run() {\n        mSwipeRefreshLayout.setRefreshing(false);\n        int temp = (int) (Math.random() * 10);\n        if (flag != STAGGERED_GRID) {\n          mRecyclerViewAdapter.mDatas.add(0, \"new\" + temp);\n          mRecyclerViewAdapter.notifyDataSetChanged();\n        } else {\n          mStaggeredAdapter.mDatas.add(0, \"new\" + temp);\n          mStaggeredAdapter.mHeights.add(0, (int) (Math.random() * 300) + 200);\n          mStaggeredAdapter.notifyDataSetChanged();\n        }\n      }\n    }, 1000);\n  }\n\n  @Override public void onItemClick(View view, int position) {\n    SnackbarUtil.show(mRecyclerView, getString(R.string.item_clicked), 0);\n  }\n\n  @Override public void onItemLongClick(View view, int position) {\n    SnackbarUtil.show(mRecyclerView, getString(R.string.item_longclicked), 0);\n  }\n}\n"
  },
  {
    "path": "app/src/main/java/com/sunjiajia/androidnewwidgetsdemo/adapter/MyRecyclerViewAdapter.java",
    "content": "/*\n *\n *  *\n *  *  *\n *  *  *  * ===================================\n *  *  *  * Copyright (c) 2016.\n *  *  *  * 作者：安卓猴\n *  *  *  * 微博：@安卓猴\n *  *  *  * 博客：http://sunjiajia.com\n *  *  *  * Github：https://github.com/opengit\n *  *  *  *\n *  *  *  * 注意**：如果您使用或者修改该代码，请务必保留此版权信息。\n *  *  *  * ===================================\n *  *  *\n *  *  *\n *  *\n *\n */\n\npackage com.sunjiajia.androidnewwidgetsdemo.adapter;\n\nimport android.content.Context;\nimport android.support.v7.widget.RecyclerView;\nimport android.view.LayoutInflater;\nimport android.view.View;\nimport android.view.ViewGroup;\n\nimport com.sunjiajia.androidnewwidgetsdemo.R;\n\nimport java.util.ArrayList;\nimport java.util.List;\n\n/**\n * Created by Monkey on 2015/6/29.\n */\npublic class MyRecyclerViewAdapter extends RecyclerView.Adapter<MyRecyclerViewHolder> {\n\n  public interface OnItemClickListener {\n    void onItemClick(View view, int position);\n\n    void onItemLongClick(View view, int position);\n  }\n\n  public OnItemClickListener mOnItemClickListener;\n\n  public void setOnItemClickListener(OnItemClickListener listener) {\n    this.mOnItemClickListener = listener;\n  }\n\n  public Context mContext;\n  public List<String> mDatas;\n  public LayoutInflater mLayoutInflater;\n\n  public MyRecyclerViewAdapter(Context mContext) {\n    this.mContext = mContext;\n    mLayoutInflater = LayoutInflater.from(mContext);\n    mDatas = new ArrayList<>();\n    for (int i = 'A'; i <= 'z'; i++) {\n      mDatas.add((char) i + \"\");\n    }\n  }\n\n  /**\n   * 创建ViewHolder\n   */\n  @Override public MyRecyclerViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {\n    View mView = mLayoutInflater.inflate(R.layout.item_main, parent, false);\n    MyRecyclerViewHolder mViewHolder = new MyRecyclerViewHolder(mView);\n    return mViewHolder;\n  }\n\n  /**\n   * 绑定ViewHoler，给item中的控件设置数据\n   */\n  @Override public void onBindViewHolder(final MyRecyclerViewHolder holder, final int position) {\n    if (mOnItemClickListener != null) {\n      holder.itemView.setOnClickListener(new View.OnClickListener() {\n        @Override public void onClick(View v) {\n          mOnItemClickListener.onItemClick(holder.itemView, position);\n        }\n      });\n\n      holder.itemView.setOnLongClickListener(new View.OnLongClickListener() {\n        @Override public boolean onLongClick(View v) {\n          mOnItemClickListener.onItemLongClick(holder.itemView, position);\n          return true;\n        }\n      });\n    }\n\n    holder.mTextView.setText(mDatas.get(position));\n  }\n\n  @Override public int getItemCount() {\n    return mDatas.size();\n  }\n}\n"
  },
  {
    "path": "app/src/main/java/com/sunjiajia/androidnewwidgetsdemo/adapter/MyRecyclerViewHolder.java",
    "content": "/*\n *\n *  *\n *  *  *\n *  *  *  * ===================================\n *  *  *  * Copyright (c) 2016.\n *  *  *  * 作者：安卓猴\n *  *  *  * 微博：@安卓猴\n *  *  *  * 博客：http://sunjiajia.com\n *  *  *  * Github：https://github.com/opengit\n *  *  *  *\n *  *  *  * 注意**：如果您使用或者修改该代码，请务必保留此版权信息。\n *  *  *  * ===================================\n *  *  *\n *  *  *\n *  *\n *\n */\n\npackage com.sunjiajia.androidnewwidgetsdemo.adapter;\n\nimport android.support.v7.widget.RecyclerView;\nimport android.view.View;\nimport android.widget.TextView;\n\nimport com.sunjiajia.androidnewwidgetsdemo.R;\n\n/**\n * Created by Monkey on 2015/6/29.\n */\npublic class MyRecyclerViewHolder extends RecyclerView.ViewHolder {\n\n  public TextView mTextView;\n\n  public MyRecyclerViewHolder(View itemView) {\n    super(itemView);\n    mTextView = (TextView) itemView.findViewById(R.id.id_textview);\n  }\n}\n"
  },
  {
    "path": "app/src/main/java/com/sunjiajia/androidnewwidgetsdemo/adapter/MyStaggeredViewAdapter.java",
    "content": "/*\n *\n *  *\n *  *  *\n *  *  *  * ===================================\n *  *  *  * Copyright (c) 2016.\n *  *  *  * 作者：安卓猴\n *  *  *  * 微博：@安卓猴\n *  *  *  * 博客：http://sunjiajia.com\n *  *  *  * Github：https://github.com/opengit\n *  *  *  *\n *  *  *  * 注意**：如果您使用或者修改该代码，请务必保留此版权信息。\n *  *  *  * ===================================\n *  *  *\n *  *  *\n *  *\n *\n */\n\npackage com.sunjiajia.androidnewwidgetsdemo.adapter;\n\nimport android.content.Context;\nimport android.support.v7.widget.RecyclerView;\nimport android.view.LayoutInflater;\nimport android.view.View;\nimport android.view.ViewGroup;\n\nimport com.sunjiajia.androidnewwidgetsdemo.R;\n\nimport java.util.ArrayList;\nimport java.util.List;\n\n/**\n * Created by Monkey on 2015/6/29.\n */\npublic class MyStaggeredViewAdapter extends RecyclerView.Adapter<MyRecyclerViewHolder> {\n\n  public interface OnItemClickListener {\n    void onItemClick(View view, int position);\n\n    void onItemLongClick(View view, int position);\n  }\n\n  public OnItemClickListener mOnItemClickListener;\n\n  public void setOnItemClickListener(OnItemClickListener listener) {\n    this.mOnItemClickListener = listener;\n  }\n\n  public Context mContext;\n  public List<String> mDatas;\n  public List<Integer> mHeights;\n  public LayoutInflater mLayoutInflater;\n\n  public MyStaggeredViewAdapter(Context mContext) {\n    this.mContext = mContext;\n    mLayoutInflater = LayoutInflater.from(mContext);\n    mDatas = new ArrayList<>();\n    mHeights = new ArrayList<>();\n    for (int i = 'A'; i <= 'z'; i++) {\n      mDatas.add((char) i + \"\");\n    }\n    for (int i = 0; i < mDatas.size(); i++) {\n      mHeights.add((int) (Math.random() * 300) + 200);\n    }\n  }\n\n  /**\n   * 创建ViewHolder\n   */\n  @Override public MyRecyclerViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {\n    View mView = mLayoutInflater.inflate(R.layout.item_main, parent, false);\n    MyRecyclerViewHolder mViewHolder = new MyRecyclerViewHolder(mView);\n    return mViewHolder;\n  }\n\n  /**\n   * 绑定ViewHoler，给item中的控件设置数据\n   */\n  @Override public void onBindViewHolder(final MyRecyclerViewHolder holder, final int position) {\n    if (mOnItemClickListener != null) {\n      holder.itemView.setOnClickListener(new View.OnClickListener() {\n        @Override public void onClick(View v) {\n          mOnItemClickListener.onItemClick(holder.itemView, position);\n        }\n      });\n\n      holder.itemView.setOnLongClickListener(new View.OnLongClickListener() {\n        @Override public boolean onLongClick(View v) {\n          mOnItemClickListener.onItemLongClick(holder.itemView, position);\n          return true;\n        }\n      });\n    }\n\n    ViewGroup.LayoutParams mLayoutParams = holder.mTextView.getLayoutParams();\n    mLayoutParams.height = mHeights.get(position);\n    holder.mTextView.setLayoutParams(mLayoutParams);\n    holder.mTextView.setText(mDatas.get(position));\n  }\n\n  @Override public int getItemCount() {\n    return mDatas.size();\n  }\n}\n"
  },
  {
    "path": "app/src/main/java/com/sunjiajia/androidnewwidgetsdemo/adapter/MyViewPagerAdapter.java",
    "content": "/*\n *\n *  *\n *  *  *\n *  *  *  * ===================================\n *  *  *  * Copyright (c) 2016.\n *  *  *  * 作者：安卓猴\n *  *  *  * 微博：@安卓猴\n *  *  *  * 博客：http://sunjiajia.com\n *  *  *  * Github：https://github.com/opengit\n *  *  *  *\n *  *  *  * 注意**：如果您使用或者修改该代码，请务必保留此版权信息。\n *  *  *  * ===================================\n *  *  *\n *  *  *\n *  *\n *\n */\n\npackage com.sunjiajia.androidnewwidgetsdemo.adapter;\n\nimport android.support.v4.app.Fragment;\nimport android.support.v4.app.FragmentManager;\nimport android.support.v4.app.FragmentStatePagerAdapter;\n\nimport java.util.List;\n\n/**\n * Created by Monkey on 2015/6/29.\n */\npublic class MyViewPagerAdapter extends FragmentStatePagerAdapter {\n\n  private String[] mTitles;\n  private List<Fragment> mFragments;\n\n  public MyViewPagerAdapter(FragmentManager fm, String[] mTitles, List<Fragment> mFragments) {\n    super(fm);\n    this.mTitles = mTitles;\n    this.mFragments = mFragments;\n  }\n\n  @Override public CharSequence getPageTitle(int position) {\n    return mTitles[position];\n  }\n\n  @Override public Fragment getItem(int position) {\n    return mFragments.get(position);\n  }\n\n  @Override public int getCount() {\n    return mFragments.size();\n  }\n}\n"
  },
  {
    "path": "app/src/main/java/com/sunjiajia/androidnewwidgetsdemo/utils/SnackbarUtil.java",
    "content": "/*\n *\n *  *\n *  *  *\n *  *  *  * ===================================\n *  *  *  * Copyright (c) 2016.\n *  *  *  * 作者：安卓猴\n *  *  *  * 微博：@安卓猴\n *  *  *  * 博客：http://sunjiajia.com\n *  *  *  * Github：https://github.com/opengit\n *  *  *  *\n *  *  *  * 注意**：如果您使用或者修改该代码，请务必保留此版权信息。\n *  *  *  * ===================================\n *  *  *\n *  *  *\n *  *\n *\n */\n\npackage com.sunjiajia.androidnewwidgetsdemo.utils;\n\nimport android.support.design.widget.Snackbar;\nimport android.view.View;\n\nimport com.sunjiajia.androidnewwidgetsdemo.R;\n\n/**\n * Created by Monkey on 2015/7/1.\n */\npublic class SnackbarUtil {\n\n  // android-support-design兼容包中新添加的一个类似Toast的控件。\n  // make()中的第一个参数，可以写当前界面中的任意一个view对象。\n  private static Snackbar mSnackbar;\n\n  public static void show(View view, String msg, int flag) {\n\n    if (flag == 0) { // 短时显示\n      mSnackbar = Snackbar.make(view, msg, Snackbar.LENGTH_SHORT);\n    } else { // 长时显示\n      mSnackbar = Snackbar.make(view, msg, Snackbar.LENGTH_LONG);\n    }\n\n    mSnackbar.show();\n    // Snackbar中有一个可点击的文字，这里设置点击所触发的操作。\n    mSnackbar.setAction(R.string.close, new View.OnClickListener() {\n      @Override public void onClick(View v) {\n        // Snackbar在点击“关闭”后消失\n        mSnackbar.dismiss();\n      }\n    });\n  }\n}\n"
  },
  {
    "path": "app/src/main/java/com/sunjiajia/androidnewwidgetsdemo/view/RoundedImageView.java",
    "content": "/*\n *\n *  *\n *  *  *\n *  *  *  * ===================================\n *  *  *  * Copyright (c) 2016.\n *  *  *  * 作者：安卓猴\n *  *  *  * 微博：@安卓猴\n *  *  *  * 博客：http://sunjiajia.com\n *  *  *  * Github：https://github.com/opengit\n *  *  *  *\n *  *  *  * 注意**：如果您使用或者修改该代码，请务必保留此版权信息。\n *  *  *  * ===================================\n *  *  *\n *  *  *\n *  *\n *\n */\n\npackage com.sunjiajia.androidnewwidgetsdemo.view;\n\nimport android.content.Context;\nimport android.graphics.Bitmap;\nimport android.graphics.Canvas;\nimport android.graphics.Color;\nimport android.graphics.Paint;\nimport android.graphics.PorterDuff;\nimport android.graphics.PorterDuffXfermode;\nimport android.graphics.Rect;\nimport android.graphics.drawable.BitmapDrawable;\nimport android.graphics.drawable.Drawable;\nimport android.util.AttributeSet;\nimport android.widget.ImageView;\n\npublic class RoundedImageView extends ImageView {\n\n  public RoundedImageView(Context context) {\n    super(context);\n    // TODO Auto-generated constructor stub\n  }\n\n  public RoundedImageView(Context context, AttributeSet attrs) {\n    super(context, attrs);\n  }\n\n  public RoundedImageView(Context context, AttributeSet attrs, int defStyle) {\n    super(context, attrs, defStyle);\n  }\n\n  @Override protected void onDraw(Canvas canvas) {\n\n    Drawable drawable = getDrawable();\n\n    if (drawable == null) {\n      return;\n    }\n\n    if (getWidth() == 0 || getHeight() == 0) {\n      return;\n    }\n\n    Bitmap b = ((BitmapDrawable) drawable).getBitmap();\n    Bitmap bitmap = b.copy(Bitmap.Config.ARGB_8888, true);\n\n    int w = getWidth();\n\n    Bitmap roundBitmap = getCroppedBitmap(bitmap, w);\n    canvas.drawBitmap(roundBitmap, 0, 0, null);\n  }\n\n  public static Bitmap getCroppedBitmap(Bitmap bmp, int radius) {\n\n    Bitmap sbmp;\n\n    if (bmp.getWidth() != radius || bmp.getHeight() != radius) {\n      sbmp = Bitmap.createScaledBitmap(bmp, radius, radius, false);\n    } else {\n      sbmp = bmp;\n    }\n\n    Bitmap output = Bitmap.createBitmap(sbmp.getWidth(), sbmp.getHeight(), Bitmap.Config.ARGB_8888);\n    Canvas canvas = new Canvas(output);\n\n    final Paint paint = new Paint();\n    final Rect rect = new Rect(0, 0, sbmp.getWidth(), sbmp.getHeight());\n\n    paint.setAntiAlias(true);\n    paint.setFilterBitmap(true);\n    paint.setDither(true);\n    canvas.drawARGB(0, 0, 0, 0);\n    paint.setColor(Color.parseColor(\"#BAB399\"));\n    canvas.drawCircle(sbmp.getWidth() / 2 + 0.7f, sbmp.getHeight() / 2 + 0.7f,\n        sbmp.getWidth() / 2 + 0.1f, paint);\n    paint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.SRC_IN));\n    canvas.drawBitmap(sbmp, rect, rect, paint);\n\n    return output;\n  }\n}"
  },
  {
    "path": "app/src/main/res/color/selector_nav_menu_textcolor.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!--\n  ~ /*\n  ~  *\n  ~  *  *\n  ~  *  *  * ===================================\n  ~  *  *  * Copyright (c) 2016.\n  ~  *  *  * 作者：安卓猴\n  ~  *  *  * 微博：@安卓猴\n  ~  *  *  * 博客：http://sunjiajia.com\n  ~  *  *  * Github：https://github.com/opengit\n  ~  *  *  *\n  ~  *  *  * 注意**：如果您使用或者修改该代码，请务必保留此版权信息。\n  ~  *  *  * ===================================\n  ~  *  *\n  ~  *  *\n  ~  *\n  ~  */\n  -->\n\n<selector xmlns:android=\"http://schemas.android.com/apk/res/android\">\n\n  <item android:color=\"@color/main_blue_light\" android:state_checked=\"true\"/>\n  <item android:color=\"@color/main_black_grey\"/>\n\n</selector>"
  },
  {
    "path": "app/src/main/res/layout/activity_my.xml",
    "content": "<!--\n  ~ /*\n  ~  *\n  ~  *  *\n  ~  *  *  * ===================================\n  ~  *  *  * Copyright (c) 2016.\n  ~  *  *  * 作者：安卓猴\n  ~  *  *  * 微博：@安卓猴\n  ~  *  *  * 博客：http://sunjiajia.com\n  ~  *  *  * Github：https://github.com/opengit\n  ~  *  *  *\n  ~  *  *  * 注意**：如果您使用或者修改该代码，请务必保留此版权信息。\n  ~  *  *  * ===================================\n  ~  *  *\n  ~  *  *\n  ~  *\n  ~  */\n  -->\n\n<android.support.v4.widget.DrawerLayout xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    xmlns:app=\"http://schemas.android.com/apk/res-auto\"\n    android:id=\"@+id/id_drawerlayout\"\n    android:layout_width=\"match_parent\"\n    android:layout_height=\"match_parent\"\n    >\n\n  <!-- 第一个位置 -->\n  <!-- 你的主界面内容，必须放置在Drawerlayout中的第一个位置\n  根据自己的需要来放置控件，\n      例如：LinearLayout布局或者RelativeLayout布局；\n  也可以是单个控件，\n      如 TextView等  -->\n  <include layout=\"@layout/content_main\"/>\n\n\n  <!-- 第二个位置 -->\n  <!-- 用来放Drawerlayout中的内容，\n  这里使用NavigationView来实现类似Google pLay中的侧滑栏效果，\n  必须在build.gradle中添加compile 'com.android.support:design:22.2.0'；\n  另外，如果不需要NavigationView效果，\n  也可以放置一个普通布局文件就是一个普通的侧滑栏了。\n   -->\n\n  <!--\n   注意：\n      如果使用NavigationView（其他控件也是一样）的特有属性，需要加上命名空间：\n              xmlns:app=\"http://schemas.android.com/apk/res-auto\"；\n      另外，一定要添加android:layout_gravity=\"left\"属性。\n   -->\n\n  <!--\n      属性解析：\n          app:headerLayout：    NavigationView中头部的head部分的布局，是自己实现的；\n          app:menu：            指定Nav中的Menu布局，就是自己写Menu中的按钮，要放在res/menu/文件夹下；\n          app:itemTextColor：  用来设置Nav中，menu item的颜色选择器。\n      还有一些属性：           和itemTextColor用法一样，指定一个颜色选择器，实现不同的颜色效果。\n          app:itemIconTint:\n          app:itemBackground:\n  -->\n  <android.support.design.widget.NavigationView\n      android:id=\"@+id/id_navigationview\"\n      android:layout_width=\"match_parent\"\n      android:layout_height=\"match_parent\"\n      app:itemTextColor=\"@color/selector_nav_menu_textcolor\"\n      android:layout_gravity=\"left\"\n      />\n\n</android.support.v4.widget.DrawerLayout>"
  },
  {
    "path": "app/src/main/res/layout/content_main.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?><!--\n  ~ /*\n  ~  *\n  ~  *  *\n  ~  *  *  * ===================================\n  ~  *  *  * Copyright (c) 2016.\n  ~  *  *  * 作者：安卓猴\n  ~  *  *  * 微博：@安卓猴\n  ~  *  *  * 博客：http://sunjiajia.com\n  ~  *  *  * Github：https://github.com/opengit\n  ~  *  *  *\n  ~  *  *  * 注意**：如果您使用或者修改该代码，请务必保留此版权信息。\n  ~  *  *  * ===================================\n  ~  *  *\n  ~  *  *\n  ~  *\n  ~  */\n  -->\n\n<!--\n    CoordinatorLayout是这次新添加的一个增强型的FrameLayout，通过它可以实现很多东西：\n        例如：\n            1.界面向上滚动逐渐隐藏Toolbar；\n            2.在其中可以放置浮动的View，就像Floating Action Button。\n-->\n<android.support.design.widget.CoordinatorLayout xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    xmlns:app=\"http://schemas.android.com/apk/res-auto\"\n    android:id=\"@+id/id_coordinatorlayout\"\n    android:layout_width=\"match_parent\"\n    android:layout_height=\"match_parent\"\n    android:fitsSystemWindows=\"true\"\n    >\n\n\n  <!--\n      AppBarLayout跟它的名字一样，把容器类的组件全部作为AppBar。\n          将AppBarLayout放在CoordinatorLayout中，就可以实现滚动效果。\n          本例中，TabLayout在界面滚动时，随着Toolbar的逐渐隐藏，将占据Toolbar的位置，\n              达到节省屏幕空间，界面动画效果的目的。\n  -->\n  <android.support.design.widget.AppBarLayout\n      android:id=\"@+id/id_appbarlayout\"\n      android:layout_width=\"match_parent\"\n      android:layout_height=\"wrap_content\"\n      >\n\n\n    <!--\n\n    属性解析：\n        app:theme：指定Toolbar的样式，包括ActionbarToggle和popupMenu的指示图标颜色\n        app:popupTheme：指定popupMenu溢出后的样式\n        app:title:    指定Toolbar中主Title的内容\n    -->\n\n    <!--\n        app:layout_scrollFlags的意思是：\n\n            设置的layout_scrollFlags有如下几种选项：\n                scroll: 所有想滚动出屏幕的view都需要设置这个flag- 没有设置这个flag的view将被固定在屏幕顶部。\n                enterAlways: 这个flag让任意向下的滚动都会导致该view变为可见，启用快速“返回模式”。\n                enterAlwaysCollapsed: 当你的视图已经设置minHeight属性又使用此标志时，你的视图只能以最小高度进入，只有当滚动视图到达顶部时才扩大到完整高度。\n                exitUntilCollapsed: 当视图会在滚动时，它一直滚动到设置的minHeight时完全隐藏。\n\n        需要注意的是，后面两种模式基本只有在CollapsingToolbarLayout才有用，\n        而前面两种模式基本是需要一起使用的，也就是说，这些flag的使用场景，基本已经固定了。\n    -->\n    <android.support.v7.widget.Toolbar\n        android:id=\"@+id/id_toolbar\"\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"?attr/actionBarSize\"\n        android:background=\"?attr/colorPrimary\"\n        app:layout_scrollFlags=\"scroll|enterAlways\"\n        app:popupTheme=\"@style/ThemeOverlay.AppCompat.Light\"\n        app:theme=\"@style/ThemeOverlay.AppCompat.ActionBar\"\n        app:title=\"@string/toolbar_title\"\n        />\n\n    <!--\n        Tabs选项卡，和ViewPager搭配使用可以增大界面的内容展示量，实现各种个性化分类内容展示而不互相干扰！\n        Google在Design support library中提供官方的Tab组件，它就是TabLayout。\n        相比Github上面开源的第三方库，这个更加简单易用。\n\n        有以下常用属性：\n            app:tabGravity=\"fill\"  表示TabLayout中的Tabs要占满屏幕的width；\n            app:tabSelectedTextColor：Tab被选中字体的颜色；\n            app:tabTextColor：Tab未被选中字体的颜色；\n            app:tabIndicatorColor：Tab指示器下标的颜色；\n    -->\n    <android.support.design.widget.TabLayout\n        android:id=\"@+id/id_tablayout\"\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"wrap_content\"\n        app:tabGravity=\"fill\"\n        app:tabIndicatorColor=\"@color/main_white\"\n        />\n\n  </android.support.design.widget.AppBarLayout>\n\n  <!--\n      我们常用的ViewPager，不多说了。你会发现多了一个 app:layout_behavior 属性，没错，\n          如果你使用CoordinatorLayout来实现Toolbar滚动渐变消失动画效果，那就必须在它下面的那个控件中加入这个属性，\n          并且下面的这个控件必须是可滚动的。\n      当设置了layout_behavior的控件滑动时，就会触发设置了layout_scrollFlags的控件发生状态的改变。\n  -->\n  <android.support.v4.view.ViewPager\n      android:id=\"@+id/id_viewpager\"\n      android:layout_width=\"match_parent\"\n      android:layout_height=\"wrap_content\"\n      app:layout_behavior=\"@string/appbar_scrolling_view_behavior\"\n      />\n\n\n  <!--\n      这是一个浮动按钮。由于FloatingActionButton是重写ImageView的，\n      所有FloatingActionButton拥有ImageView的一切属性。\n\n      属性介绍：\n          app:backgroundTint : FAB的背景色。\n          app:elevation      ：FAB的阴影效果。\n          app:rippleColor    ：设置涟漪的颜色，默认是由背景色生成的暗色调，可以自己指定。\n          app:pressedTranslationZ  ：FAB动画效果，在它被按下的时候阴影就会增大。\n  -->\n  <android.support.design.widget.FloatingActionButton\n      android:id=\"@+id/id_floatingactionbutton\"\n      android:layout_width=\"wrap_content\"\n      android:layout_height=\"wrap_content\"\n      android:layout_gravity=\"bottom|end\"\n      android:layout_margin=\"16dp\"\n      android:src=\"@mipmap/ic_action_plusone\"\n      app:backgroundTint=\"@color/fab_red\"\n      app:elevation=\"6dp\"\n      app:fabSize=\"normal\"\n      app:pressedTranslationZ=\"12dp\"\n      app:rippleColor=\"@color/main_blue_dark\"\n      />\n\n</android.support.design.widget.CoordinatorLayout>"
  },
  {
    "path": "app/src/main/res/layout/content_main_collapsing.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!--\n  ~ /*\n  ~  *\n  ~  *  *\n  ~  *  *  * ===================================\n  ~  *  *  * Copyright (c) 2016.\n  ~  *  *  * 作者：安卓猴\n  ~  *  *  * 微博：@安卓猴\n  ~  *  *  * 博客：http://sunjiajia.com\n  ~  *  *  * Github：https://github.com/opengit\n  ~  *  *  *\n  ~  *  *  * 注意**：如果您使用或者修改该代码，请务必保留此版权信息。\n  ~  *  *  * ===================================\n  ~  *  *\n  ~  *  *\n  ~  *\n  ~  */\n  -->\n\n<android.support.design.widget.CoordinatorLayout xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    xmlns:app=\"http://schemas.android.com/apk/res-auto\"\n    android:id=\"@+id/id_coordinatorlayout\"\n    android:layout_width=\"match_parent\"\n    android:layout_height=\"match_parent\"\n    android:fitsSystemWindows=\"true\"\n    >\n\n  <android.support.design.widget.AppBarLayout\n      android:id=\"@+id/id_appbarlayout\"\n      android:layout_width=\"match_parent\"\n      android:layout_height=\"wrap_content\"\n      >\n\n\n    <!--\n      设置的layout_scrollFlags有如下几种选项：\n        scroll: 所有想滚动出屏幕的view都需要设置这个flag- 没有设置这个flag的view将被固定在屏幕顶部。\n        enterAlways: 这个flag让任意向下的滚动都会导致该view变为可见，启用快速“返回模式”。\n        enterAlwaysCollapsed: 当你的视图已经设置minHeight属性又使用此标志时，你的视图只能已最小高度进入，只有当滚动视图到达顶部时才扩大到完整高度。\n        exitUntilCollapsed: 滚动退出屏幕，最后折叠在顶端。\n    -->\n\n    <android.support.design.widget.CollapsingToolbarLayout\n        android:id=\"@+id/collapsing_toolbar\"\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"wrap_content\"\n        app:contentScrim=\"?attr/colorPrimary\"\n        app:expandedTitleMarginEnd=\"64dp\"\n        app:expandedTitleMarginStart=\"48dp\"\n        app:layout_scrollFlags=\"scroll|exitUntilCollapsed\"\n        app:statusBarScrim=\"?attr/colorPrimary\"\n        >\n\n      <ImageView\n          android:id=\"@+id/image\"\n          android:layout_width=\"match_parent\"\n          android:layout_height=\"200dp\"\n          android:scaleType=\"fitXY\"\n          android:src=\"@drawable/ic_user_background\"\n          app:layout_collapseMode=\"parallax\"\n          app:layout_collapseParallaxMultiplier=\"0.6\"\n          />\n\n      <!--\n                     app:theme：指定Toolbar的样式，包括ActionbarToggle和popupMenu的指示图标颜色\n                     app:popupTheme：指定popupMenu溢出后的样式\n                     app:title:    指定Toolbar中主Title的内容\n                 -->\n      <android.support.v7.widget.Toolbar\n          android:id=\"@+id/id_toolbar\"\n          android:layout_width=\"match_parent\"\n          android:layout_height=\"?attr/actionBarSize\"\n          android:background=\"?attr/colorPrimary\"\n          app:layout_collapseMode=\"parallax\"\n          app:layout_scrollFlags=\"scroll\"\n          app:popupTheme=\"@style/ThemeOverlay.AppCompat.Light\"\n          app:theme=\"@style/ThemeOverlay.AppCompat.ActionBar\"\n          app:title=\"@string/toolbar_title\"\n          />\n\n    </android.support.design.widget.CollapsingToolbarLayout>\n\n    <android.support.design.widget.CollapsingToolbarLayout\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"wrap_content\"\n        app:layout_scrollFlags=\"scroll|exitUntilCollapsed\"\n        >\n\n      <android.support.design.widget.TabLayout\n          android:id=\"@+id/id_tablayout\"\n          android:layout_width=\"match_parent\"\n          android:layout_height=\"wrap_content\"\n          app:tabGravity=\"fill\"\n          app:tabIndicatorColor=\"@color/main_white\"\n          />\n\n    </android.support.design.widget.CollapsingToolbarLayout>\n\n\n  </android.support.design.widget.AppBarLayout>\n\n  <android.support.v4.view.ViewPager\n      android:id=\"@+id/id_viewpager\"\n      android:layout_width=\"match_parent\"\n      android:layout_height=\"wrap_content\"\n      app:layout_behavior=\"@string/appbar_scrolling_view_behavior\"\n      />\n\n  <android.support.design.widget.FloatingActionButton\n      android:id=\"@+id/id_floatingactionbutton\"\n      android:layout_width=\"wrap_content\"\n      android:layout_height=\"wrap_content\"\n      android:layout_gravity=\"bottom|end\"\n      android:src=\"@mipmap/ic_action_plusone\"\n      app:backgroundTint=\"@color/main_blue_light\"\n      app:elevation=\"6dp\"\n      app:pressedTranslationZ=\"12dp\"\n      app:rippleColor=\"@color/main_blue_dark\"\n      />\n\n</android.support.design.widget.CoordinatorLayout>"
  },
  {
    "path": "app/src/main/res/layout/frag_main.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n\n\n<!--\n  ~ /*\n  ~  *\n  ~  *  *\n  ~  *  *  * ===================================\n  ~  *  *  * Copyright (c) 2016.\n  ~  *  *  * 作者：安卓猴\n  ~  *  *  * 微博：@安卓猴\n  ~  *  *  * 博客：http://sunjiajia.com\n  ~  *  *  * Github：https://github.com/opengit\n  ~  *  *  *\n  ~  *  *  * 注意**：如果您使用或者修改该代码，请务必保留此版权信息。\n  ~  *  *  * ===================================\n  ~  *  *\n  ~  *  *\n  ~  *\n  ~  */\n  -->\n\n\n<!--\n\nSwipeRefreshLayout是伟大的Google在v4包中给出的下拉刷新组件。\n\n-->\n<android.support.v4.widget.SwipeRefreshLayout xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    xmlns:app=\"http://schemas.android.com/apk/res-auto\"\n    android:id=\"@+id/id_swiperefreshlayout\"\n    android:layout_width=\"match_parent\"\n    android:layout_height=\"match_parent\"\n    app:layout_behavior=\"@string/appbar_scrolling_view_behavior\"\n    >\n\n  <!--\n          使用RecyclerView需要在build.gradle中添加\n         compile 'com.android.support:recyclerview-v7:23.3.0'\n  -->\n  <android.support.v7.widget.RecyclerView\n      android:id=\"@+id/id_recyclerview\"\n      android:layout_width=\"match_parent\"\n      android:layout_height=\"wrap_content\"\n      android:foregroundGravity=\"center\"\n      />\n\n\n</android.support.v4.widget.SwipeRefreshLayout>\n"
  },
  {
    "path": "app/src/main/res/layout/header_nav.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!--\n  ~ /*\n  ~  *\n  ~  *  *\n  ~  *  *  * ===================================\n  ~  *  *  * Copyright (c) 2016.\n  ~  *  *  * 作者：安卓猴\n  ~  *  *  * 微博：@安卓猴\n  ~  *  *  * 博客：http://sunjiajia.com\n  ~  *  *  * Github：https://github.com/opengit\n  ~  *  *  *\n  ~  *  *  * 注意**：如果您使用或者修改该代码，请务必保留此版权信息。\n  ~  *  *  * ===================================\n  ~  *  *\n  ~  *  *\n  ~  *\n  ~  */\n  -->\n\n<LinearLayout xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    android:layout_width=\"match_parent\"\n    android:layout_height=\"220dp\"\n    android:background=\"@drawable/ic_user_background\"\n    android:gravity=\"center\"\n    android:orientation=\"vertical\"\n    >\n\n  <com.sunjiajia.androidnewwidgetsdemo.view.RoundedImageView\n      android:id=\"@+id/id_header_face\"\n      android:layout_width=\"110dp\"\n      android:layout_height=\"110dp\"\n      android:scaleType=\"fitXY\"\n      android:src=\"@drawable/author\"\n      />\n\n  <TextView\n      android:id=\"@+id/id_header_authorname\"\n      android:layout_width=\"wrap_content\"\n      android:layout_height=\"wrap_content\"\n      android:text=\"@string/header_author_name\"\n      android:textColor=\"@android:color/black\"\n      android:textSize=\"16sp\"\n      />\n\n  <TextView\n      android:id=\"@+id/id_header_url\"\n      android:layout_width=\"wrap_content\"\n      android:layout_height=\"wrap_content\"\n      android:text=\"@string/header_author_url\"\n      android:textColor=\"@android:color/black\"\n      android:textSize=\"18sp\"\n      />\n\n\n</LinearLayout>"
  },
  {
    "path": "app/src/main/res/layout/item_main.xml",
    "content": "<!--\n  ~ /*\n  ~  *\n  ~  *  *\n  ~  *  *  * ===================================\n  ~  *  *  * Copyright (c) 2016.\n  ~  *  *  * 作者：安卓猴\n  ~  *  *  * 微博：@安卓猴\n  ~  *  *  * 博客：http://sunjiajia.com\n  ~  *  *  * Github：https://github.com/opengit\n  ~  *  *  *\n  ~  *  *  * 注意**：如果您使用或者修改该代码，请务必保留此版权信息。\n  ~  *  *  * ===================================\n  ~  *  *\n  ~  *  *\n  ~  *\n  ~  */\n  -->\n\n<!--\n    CardView就是一个卡片样式的FrameLayout。\n\n    参数介绍：\n        app:cardBackgroundColor  :   背景颜色\n        app:cardCornerRadius    ：   设置圆角。\n        app:cardElevation       ：    阴影。\n        app:cardMaxElevation    ：       最大阴影。\n        app:cardPreventCornerOverlap  ： 在v20和之前的版本中添加内边距，\n                                    这个属性是为了防止卡片内容和边角的重叠。\n\n       app:cardUseCompatPadding  ：  设置内边距，v21+的版本和之前的版本仍旧具有一样的计算方式\n-->\n<android.support.v7.widget.CardView xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    xmlns:app=\"http://schemas.android.com/apk/res-auto\"\n    android:id=\"@+id/id_cardview\"\n    android:layout_width=\"match_parent\"\n    android:layout_height=\"wrap_content\"\n    android:layout_gravity=\"center_horizontal\"\n    app:cardBackgroundColor=\"@color/main_blue_light\"\n    app:cardCornerRadius=\"4dp\"\n    app:cardElevation=\"5dp\"\n    app:cardMaxElevation=\"6dp\"\n    app:cardPreventCornerOverlap=\"true\"\n    app:cardUseCompatPadding=\"true\"\n    >\n\n  <TextView\n      android:id=\"@+id/id_textview\"\n      android:layout_width=\"match_parent\"\n      android:layout_height=\"200dp\"\n      android:gravity=\"center\"\n      android:text=\"ABCD\"\n      android:textColor=\"@color/main_white\"\n      android:textSize=\"30sp\"\n      />\n\n</android.support.v7.widget.CardView>"
  },
  {
    "path": "app/src/main/res/menu/menu_my.xml",
    "content": "<!--\n  ~ /*\n  ~  *\n  ~  *  *\n  ~  *  *  * ===================================\n  ~  *  *  * Copyright (c) 2016.\n  ~  *  *  * 作者：安卓猴\n  ~  *  *  * 微博：@安卓猴\n  ~  *  *  * 博客：http://sunjiajia.com\n  ~  *  *  * Github：https://github.com/opengit\n  ~  *  *  *\n  ~  *  *  * 注意**：如果您使用或者修改该代码，请务必保留此版权信息。\n  ~  *  *  * ===================================\n  ~  *  *\n  ~  *  *\n  ~  *\n  ~  */\n  -->\n\n<menu xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    xmlns:app=\"http://schemas.android.com/apk/res-auto\"\n    xmlns:tools=\"http://schemas.android.com/tools\"\n    tools:context=\".MyActivity\">\n  <item\n      android:id=\"@+id/action_settings\"\n      android:title=\"@string/action_settings\"\n      android:orderInCategory=\"100\"\n      app:showAsAction=\"never\"/>\n</menu>\n"
  },
  {
    "path": "app/src/main/res/menu/menu_nav.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!--\n  ~ /*\n  ~  *\n  ~  *  *\n  ~  *  *  * ===================================\n  ~  *  *  * Copyright (c) 2016.\n  ~  *  *  * 作者：安卓猴\n  ~  *  *  * 微博：@安卓猴\n  ~  *  *  * 博客：http://sunjiajia.com\n  ~  *  *  * Github：https://github.com/opengit\n  ~  *  *  *\n  ~  *  *  * 注意**：如果您使用或者修改该代码，请务必保留此版权信息。\n  ~  *  *  * ===================================\n  ~  *  *\n  ~  *  *\n  ~  *\n  ~  */\n  -->\n\n<menu xmlns:android=\"http://schemas.android.com/apk/res/android\">\n\n\n  <group android:checkableBehavior=\"single\">\n\n    <item\n        android:id=\"@+id/nav_menu_home\"\n        android:icon=\"@mipmap/ic_home_white_48dp\"\n        android:title=\"主页\"/>\n\n    <item\n        android:id=\"@+id/nav_menu_categories\"\n        android:icon=\"@mipmap/ic_sort_by_alpha_white_48dp\"\n        android:title=\"分类\"/>\n\n    <item\n        android:id=\"@+id/nav_menu_feedback\"\n        android:icon=\"@mipmap/ic_message_white_48dp\"\n        android:title=\"反馈\"/>\n    <item\n        android:id=\"@+id/nav_menu_setting\"\n        android:icon=\"@mipmap/ic_settings_white_48dp\"\n        android:title=\"设置\"/>\n\n  </group>\n</menu>"
  },
  {
    "path": "app/src/main/res/values/arrays.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!--\n  ~ /*\n  ~  *\n  ~  *  *\n  ~  *  *  * ===================================\n  ~  *  *  * Copyright (c) 2016.\n  ~  *  *  * 作者：安卓猴\n  ~  *  *  * 微博：@安卓猴\n  ~  *  *  * 博客：http://sunjiajia.com\n  ~  *  *  * Github：https://github.com/opengit\n  ~  *  *  *\n  ~  *  *  * 注意**：如果您使用或者修改该代码，请务必保留此版权信息。\n  ~  *  *  * ===================================\n  ~  *  *\n  ~  *  *\n  ~  *\n  ~  */\n  -->\n\n<resources>\n\n  <string-array name=\"tab_titles\">\n    <item>垂直List</item>\n    <item>水平List</item>\n    <item>垂直Grid</item>\n    <item>水平Grid</item>\n    <item>瀑布Staggered</item>\n  </string-array>\n</resources>"
  },
  {
    "path": "app/src/main/res/values/colors.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!--\n  ~ /*\n  ~  *\n  ~  *  *\n  ~  *  *  * ===================================\n  ~  *  *  * Copyright (c) 2016.\n  ~  *  *  * 作者：安卓猴\n  ~  *  *  * 微博：@安卓猴\n  ~  *  *  * 博客：http://sunjiajia.com\n  ~  *  *  * Github：https://github.com/opengit\n  ~  *  *  *\n  ~  *  *  * 注意**：如果您使用或者修改该代码，请务必保留此版权信息。\n  ~  *  *  * ===================================\n  ~  *  *\n  ~  *  *\n  ~  *\n  ~  */\n  -->\n\n<resources>\n\n  <color name=\"main_blue_light\">#3F56B5</color>\n  <color name=\"main_blue_dark\">#30459E</color>\n  <color name=\"main_white\">#FFFFFF</color>\n  <color name=\"main_black\">#000000</color>\n  <color name=\"main_black_grey\">#6D6D6D</color>\n  <color name=\"fab_red\">#ff0000</color>\n\n\n</resources>"
  },
  {
    "path": "app/src/main/res/values/dimens.xml",
    "content": "<!--\n  ~ /*\n  ~  *\n  ~  *  *\n  ~  *  *  * ===================================\n  ~  *  *  * Copyright (c) 2016.\n  ~  *  *  * 作者：安卓猴\n  ~  *  *  * 微博：@安卓猴\n  ~  *  *  * 博客：http://sunjiajia.com\n  ~  *  *  * Github：https://github.com/opengit\n  ~  *  *  *\n  ~  *  *  * 注意**：如果您使用或者修改该代码，请务必保留此版权信息。\n  ~  *  *  * ===================================\n  ~  *  *\n  ~  *  *\n  ~  *\n  ~  */\n  -->\n\n<resources>\n  <!-- Default screen margins, per the Android Design guidelines. -->\n  <dimen name=\"activity_horizontal_margin\">16dp</dimen>\n  <dimen name=\"activity_vertical_margin\">16dp</dimen>\n</resources>\n"
  },
  {
    "path": "app/src/main/res/values/strings.xml",
    "content": "<!--\n  ~ /*\n  ~  *\n  ~  *  *\n  ~  *  *  * ===================================\n  ~  *  *  * Copyright (c) 2016.\n  ~  *  *  * 作者：安卓猴\n  ~  *  *  * 微博：@安卓猴\n  ~  *  *  * 博客：http://sunjiajia.com\n  ~  *  *  * Github：https://github.com/opengit\n  ~  *  *  *\n  ~  *  *  * 注意**：如果您使用或者修改该代码，请务必保留此版权信息。\n  ~  *  *  * ===================================\n  ~  *  *\n  ~  *  *\n  ~  *\n  ~  */\n  -->\n\n<resources>\n  <string name=\"app_name\">Android New Widgets Demo</string>\n\n  <string name=\"toolbar_title\">New Demo</string>\n  <string name=\"action_settings\">settings</string>\n  <string name=\"open\">打开</string>\n  <string name=\"close\">关闭</string>\n  <string name=\"header_author_name\">安卓猴</string>\n  <string name=\"header_author_url\">sunjiajia.com</string>\n  <string name=\"plusone\">+1</string>\n  <string name=\"item_clicked\">item clicked！</string>\n  <string name=\"item_longclicked\">item long clicked！</string>\n\n</resources>\n"
  },
  {
    "path": "app/src/main/res/values/styles.xml",
    "content": "<!--\n  ~ /*\n  ~  *\n  ~  *  *\n  ~  *  *  * ===================================\n  ~  *  *  * Copyright (c) 2016.\n  ~  *  *  * 作者：安卓猴\n  ~  *  *  * 微博：@安卓猴\n  ~  *  *  * 博客：http://sunjiajia.com\n  ~  *  *  * Github：https://github.com/opengit\n  ~  *  *  *\n  ~  *  *  * 注意**：如果您使用或者修改该代码，请务必保留此版权信息。\n  ~  *  *  * ===================================\n  ~  *  *\n  ~  *  *\n  ~  *\n  ~  */\n  -->\n\n<resources>\n\n  <style name=\"AppTheme\" parent=\"MyThemeBlue\"></style>\n\n  <!-- 蓝色为主色调 -->\n  <style name=\"MyThemeBlue\" parent=\"Theme.AppCompat.Light.NoActionBar\">\n\n    <!--选中状态icon的颜色和字体颜色-->\n    <item name=\"colorPrimary\">@color/main_blue_light</item>\n    <item name=\"colorPrimaryDark\">@color/main_blue_dark</item>\n    <item name=\"colorAccent\">@color/main_blue_light</item>\n    <!--正常状态下字体颜色和icon颜色-->\n    <item name=\"android:textColorPrimary\">@color/main_white</item>\n\n  </style>\n</resources>\n"
  },
  {
    "path": "build.gradle",
    "content": "/*\n *\n *  *\n *  *  *\n *  *  *  * ===================================\n *  *  *  * Copyright (c) 2016.\n *  *  *  * 作者：安卓猴\n *  *  *  * 微博：@安卓猴\n *  *  *  * 博客：http://sunjiajia.com\n *  *  *  * Github：https://github.com/opengit\n *  *  *  *\n *  *  *  * 注意**：如果您使用或者修改该代码，请务必保留此版权信息。\n *  *  *  * ===================================\n *  *  *\n *  *  *\n *  *\n *\n */\n\n// Top-level build file where you can add configuration options common to all sub-projects/modules.\n\nbuildscript {\n    repositories {\n        jcenter()\n    }\n    dependencies {\n        classpath 'com.android.tools.build:gradle:2.1.2'\n\n        // NOTE: Do not place your application dependencies here; they belong\n        // in the individual module build.gradle files\n    }\n}\n\nallprojects {\n    repositories {\n        jcenter()\n    }\n}\n"
  },
  {
    "path": "gradle/wrapper/gradle-wrapper.properties",
    "content": "#\n# /*\n#  *\n#  *  *\n#  *  *  * ===================================\n#  *  *  * Copyright (c) 2016.\n#  *  *  * 作者：安卓猴\n#  *  *  * 微博：@安卓猴\n#  *  *  * 博客：http://sunjiajia.com\n#  *  *  * Github：https://github.com/opengit\n#  *  *  *\n#  *  *  * 注意**：如果您使用或者修改该代码，请务必保留此版权信息。\n#  *  *  * ===================================\n#  *  *\n#  *  *\n#  *\n#  */\n#\n\n#Fri Apr 29 16:20:43 CST 2016\ndistributionBase=GRADLE_USER_HOME\ndistributionPath=wrapper/dists\nzipStoreBase=GRADLE_USER_HOME\nzipStorePath=wrapper/dists\ndistributionUrl=https\\://services.gradle.org/distributions/gradle-2.10-all.zip\n"
  },
  {
    "path": "gradle.properties",
    "content": "#\n# /*\n#  *\n#  *  *\n#  *  *  * ===================================\n#  *  *  * Copyright (c) 2016.\n#  *  *  * 作者：安卓猴\n#  *  *  * 微博：@安卓猴\n#  *  *  * 博客：http://sunjiajia.com\n#  *  *  * Github：https://github.com/opengit\n#  *  *  *\n#  *  *  * 注意**：如果您使用或者修改该代码，请务必保留此版权信息。\n#  *  *  * ===================================\n#  *  *\n#  *  *\n#  *\n#  */\n#\n\n# Project-wide Gradle settings.\n\n# IDE (e.g. Android Studio) users:\n# Gradle settings configured through the IDE *will override*\n# any settings specified in this file.\n\n# For more details on how to configure your build environment visit\n# http://www.gradle.org/docs/current/userguide/build_environment.html\n\n# Specifies the JVM arguments used for the daemon process.\n# The setting is particularly useful for tweaking memory settings.\n# Default value: -Xmx10248m -XX:MaxPermSize=256m\n# org.gradle.jvmargs=-Xmx2048m -XX:MaxPermSize=512m -XX:+HeapDumpOnOutOfMemoryError -Dfile.encoding=UTF-8\n\n# When configured, Gradle will run in incubating parallel mode.\n# This option should only be used with decoupled projects. More details, visit\n# http://www.gradle.org/docs/current/userguide/multi_project_builds.html#sec:decoupled_projects\n# org.gradle.parallel=true"
  },
  {
    "path": "gradlew",
    "content": "#!/usr/bin/env bash\n\n##############################################################################\n##\n##  Gradle start up script for UN*X\n##\n##############################################################################\n\n# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.\nDEFAULT_JVM_OPTS=\"\"\n\nAPP_NAME=\"Gradle\"\nAPP_BASE_NAME=`basename \"$0\"`\n\n# Use the maximum available, or set MAX_FD != -1 to use that value.\nMAX_FD=\"maximum\"\n\nwarn ( ) {\n    echo \"$*\"\n}\n\ndie ( ) {\n    echo\n    echo \"$*\"\n    echo\n    exit 1\n}\n\n# OS specific support (must be 'true' or 'false').\ncygwin=false\nmsys=false\ndarwin=false\ncase \"`uname`\" in\n  CYGWIN* )\n    cygwin=true\n    ;;\n  Darwin* )\n    darwin=true\n    ;;\n  MINGW* )\n    msys=true\n    ;;\nesac\n\n# Attempt to set APP_HOME\n# Resolve links: $0 may be a link\nPRG=\"$0\"\n# Need this for relative symlinks.\nwhile [ -h \"$PRG\" ] ; do\n    ls=`ls -ld \"$PRG\"`\n    link=`expr \"$ls\" : '.*-> \\(.*\\)$'`\n    if expr \"$link\" : '/.*' > /dev/null; then\n        PRG=\"$link\"\n    else\n        PRG=`dirname \"$PRG\"`\"/$link\"\n    fi\ndone\nSAVED=\"`pwd`\"\ncd \"`dirname \\\"$PRG\\\"`/\" >/dev/null\nAPP_HOME=\"`pwd -P`\"\ncd \"$SAVED\" >/dev/null\n\nCLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar\n\n# Determine the Java command to use to start the JVM.\nif [ -n \"$JAVA_HOME\" ] ; then\n    if [ -x \"$JAVA_HOME/jre/sh/java\" ] ; then\n        # IBM's JDK on AIX uses strange locations for the executables\n        JAVACMD=\"$JAVA_HOME/jre/sh/java\"\n    else\n        JAVACMD=\"$JAVA_HOME/bin/java\"\n    fi\n    if [ ! -x \"$JAVACMD\" ] ; then\n        die \"ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME\n\nPlease set the JAVA_HOME variable in your environment to match the\nlocation of your Java installation.\"\n    fi\nelse\n    JAVACMD=\"java\"\n    which java >/dev/null 2>&1 || die \"ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.\n\nPlease set the JAVA_HOME variable in your environment to match the\nlocation of your Java installation.\"\nfi\n\n# Increase the maximum file descriptors if we can.\nif [ \"$cygwin\" = \"false\" -a \"$darwin\" = \"false\" ] ; then\n    MAX_FD_LIMIT=`ulimit -H -n`\n    if [ $? -eq 0 ] ; then\n        if [ \"$MAX_FD\" = \"maximum\" -o \"$MAX_FD\" = \"max\" ] ; then\n            MAX_FD=\"$MAX_FD_LIMIT\"\n        fi\n        ulimit -n $MAX_FD\n        if [ $? -ne 0 ] ; then\n            warn \"Could not set maximum file descriptor limit: $MAX_FD\"\n        fi\n    else\n        warn \"Could not query maximum file descriptor limit: $MAX_FD_LIMIT\"\n    fi\nfi\n\n# For Darwin, add options to specify how the application appears in the dock\nif $darwin; then\n    GRADLE_OPTS=\"$GRADLE_OPTS \\\"-Xdock:name=$APP_NAME\\\" \\\"-Xdock:icon=$APP_HOME/media/gradle.icns\\\"\"\nfi\n\n# For Cygwin, switch paths to Windows format before running java\nif $cygwin ; then\n    APP_HOME=`cygpath --path --mixed \"$APP_HOME\"`\n    CLASSPATH=`cygpath --path --mixed \"$CLASSPATH\"`\n    JAVACMD=`cygpath --unix \"$JAVACMD\"`\n\n    # We build the pattern for arguments to be converted via cygpath\n    ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null`\n    SEP=\"\"\n    for dir in $ROOTDIRSRAW ; do\n        ROOTDIRS=\"$ROOTDIRS$SEP$dir\"\n        SEP=\"|\"\n    done\n    OURCYGPATTERN=\"(^($ROOTDIRS))\"\n    # Add a user-defined pattern to the cygpath arguments\n    if [ \"$GRADLE_CYGPATTERN\" != \"\" ] ; then\n        OURCYGPATTERN=\"$OURCYGPATTERN|($GRADLE_CYGPATTERN)\"\n    fi\n    # Now convert the arguments - kludge to limit ourselves to /bin/sh\n    i=0\n    for arg in \"$@\" ; do\n        CHECK=`echo \"$arg\"|egrep -c \"$OURCYGPATTERN\" -`\n        CHECK2=`echo \"$arg\"|egrep -c \"^-\"`                                 ### Determine if an option\n\n        if [ $CHECK -ne 0 ] && [ $CHECK2 -eq 0 ] ; then                    ### Added a condition\n            eval `echo args$i`=`cygpath --path --ignore --mixed \"$arg\"`\n        else\n            eval `echo args$i`=\"\\\"$arg\\\"\"\n        fi\n        i=$((i+1))\n    done\n    case $i in\n        (0) set -- ;;\n        (1) set -- \"$args0\" ;;\n        (2) set -- \"$args0\" \"$args1\" ;;\n        (3) set -- \"$args0\" \"$args1\" \"$args2\" ;;\n        (4) set -- \"$args0\" \"$args1\" \"$args2\" \"$args3\" ;;\n        (5) set -- \"$args0\" \"$args1\" \"$args2\" \"$args3\" \"$args4\" ;;\n        (6) set -- \"$args0\" \"$args1\" \"$args2\" \"$args3\" \"$args4\" \"$args5\" ;;\n        (7) set -- \"$args0\" \"$args1\" \"$args2\" \"$args3\" \"$args4\" \"$args5\" \"$args6\" ;;\n        (8) set -- \"$args0\" \"$args1\" \"$args2\" \"$args3\" \"$args4\" \"$args5\" \"$args6\" \"$args7\" ;;\n        (9) set -- \"$args0\" \"$args1\" \"$args2\" \"$args3\" \"$args4\" \"$args5\" \"$args6\" \"$args7\" \"$args8\" ;;\n    esac\nfi\n\n# Split up the JVM_OPTS And GRADLE_OPTS values into an array, following the shell quoting and substitution rules\nfunction splitJvmOpts() {\n    JVM_OPTS=(\"$@\")\n}\neval splitJvmOpts $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS\nJVM_OPTS[${#JVM_OPTS[*]}]=\"-Dorg.gradle.appname=$APP_BASE_NAME\"\n\nexec \"$JAVACMD\" \"${JVM_OPTS[@]}\" -classpath \"$CLASSPATH\" org.gradle.wrapper.GradleWrapperMain \"$@\"\n"
  },
  {
    "path": "gradlew.bat",
    "content": "@if \"%DEBUG%\" == \"\" @echo off\r\n@rem ##########################################################################\r\n@rem\r\n@rem  Gradle startup script for Windows\r\n@rem\r\n@rem ##########################################################################\r\n\r\n@rem Set local scope for the variables with windows NT shell\r\nif \"%OS%\"==\"Windows_NT\" setlocal\r\n\r\n@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.\r\nset DEFAULT_JVM_OPTS=\r\n\r\nset DIRNAME=%~dp0\r\nif \"%DIRNAME%\" == \"\" set DIRNAME=.\r\nset APP_BASE_NAME=%~n0\r\nset APP_HOME=%DIRNAME%\r\n\r\n@rem Find java.exe\r\nif defined JAVA_HOME goto findJavaFromJavaHome\r\n\r\nset JAVA_EXE=java.exe\r\n%JAVA_EXE% -version >NUL 2>&1\r\nif \"%ERRORLEVEL%\" == \"0\" goto init\r\n\r\necho.\r\necho ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.\r\necho.\r\necho Please set the JAVA_HOME variable in your environment to match the\r\necho location of your Java installation.\r\n\r\ngoto fail\r\n\r\n:findJavaFromJavaHome\r\nset JAVA_HOME=%JAVA_HOME:\"=%\r\nset JAVA_EXE=%JAVA_HOME%/bin/java.exe\r\n\r\nif exist \"%JAVA_EXE%\" goto init\r\n\r\necho.\r\necho ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME%\r\necho.\r\necho Please set the JAVA_HOME variable in your environment to match the\r\necho location of your Java installation.\r\n\r\ngoto fail\r\n\r\n:init\r\n@rem Get command-line arguments, handling Windowz variants\r\n\r\nif not \"%OS%\" == \"Windows_NT\" goto win9xME_args\r\nif \"%@eval[2+2]\" == \"4\" goto 4NT_args\r\n\r\n:win9xME_args\r\n@rem Slurp the command line arguments.\r\nset CMD_LINE_ARGS=\r\nset _SKIP=2\r\n\r\n:win9xME_args_slurp\r\nif \"x%~1\" == \"x\" goto execute\r\n\r\nset CMD_LINE_ARGS=%*\r\ngoto execute\r\n\r\n:4NT_args\r\n@rem Get arguments from the 4NT Shell from JP Software\r\nset CMD_LINE_ARGS=%$\r\n\r\n:execute\r\n@rem Setup the command line\r\n\r\nset CLASSPATH=%APP_HOME%\\gradle\\wrapper\\gradle-wrapper.jar\r\n\r\n@rem Execute Gradle\r\n\"%JAVA_EXE%\" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% \"-Dorg.gradle.appname=%APP_BASE_NAME%\" -classpath \"%CLASSPATH%\" org.gradle.wrapper.GradleWrapperMain %CMD_LINE_ARGS%\r\n\r\n:end\r\n@rem End local scope for the variables with windows NT shell\r\nif \"%ERRORLEVEL%\"==\"0\" goto mainEnd\r\n\r\n:fail\r\nrem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of\r\nrem the _cmd.exe /c_ return code!\r\nif  not \"\" == \"%GRADLE_EXIT_CONSOLE%\" exit 1\r\nexit /b 1\r\n\r\n:mainEnd\r\nif \"%OS%\"==\"Windows_NT\" endlocal\r\n\r\n:omega\r\n"
  },
  {
    "path": "settings.gradle",
    "content": "/*\n *\n *  *\n *  *  *\n *  *  *  * ===================================\n *  *  *  * Copyright (c) 2016.\n *  *  *  * 作者：安卓猴\n *  *  *  * 微博：@安卓猴\n *  *  *  * 博客：http://sunjiajia.com\n *  *  *  * Github：https://github.com/opengit\n *  *  *  *\n *  *  *  * 注意**：如果您使用或者修改该代码，请务必保留此版权信息。\n *  *  *  * ===================================\n *  *  *\n *  *  *\n *  *\n *\n */\n\ninclude ':app'\n"
  }
]