master 1af1907b88dc cached
233 files
11.3 MB
334.4k tokens
1644 symbols
1 requests
Download .txt
Showing preview only (1,348K chars total). Download the full file or copy to clipboard to get everything.
Repository: wolfking0608/SmartRefreshLayout
Branch: master
Commit: 1af1907b88dc
Files: 233
Total size: 11.3 MB

Directory structure:
gitextract_vxfl1tfg/

├── .gitignore
├── LICENSE
├── README.md
├── README_EN.md
├── app/
│   ├── .gitignore
│   ├── build.gradle
│   ├── debug.keystore
│   ├── proguard-rules.pro
│   └── src/
│       ├── androidTest/
│       │   └── java/
│       │       └── com/
│       │           └── scwang/
│       │               └── refreshlayout/
│       │                   └── ExampleInstrumentedTest.java
│       ├── main/
│       │   ├── AndroidManifest.xml
│       │   ├── java/
│       │   │   └── com/
│       │   │       └── scwang/
│       │   │           └── refreshlayout/
│       │   │               ├── App.java
│       │   │               ├── activity/
│       │   │               │   ├── ExperimentActivity.java
│       │   │               │   ├── IndexMainActivity.java
│       │   │               │   ├── practice/
│       │   │               │   │   ├── BannerPracticeActivity.java
│       │   │               │   │   ├── FeedlistPracticeActivity.java
│       │   │               │   │   ├── ProfilePracticeActivity.java
│       │   │               │   │   ├── QQBrowserPracticeActivity.java
│       │   │               │   │   ├── RepastPracticeActivity.java
│       │   │               │   │   ├── WebviewPracticeActivity.java
│       │   │               │   │   └── WeiboPracticeActivity.java
│       │   │               │   ├── style/
│       │   │               │   │   ├── BezierStyleActivity.java
│       │   │               │   │   ├── CircleStyleActivity.java
│       │   │               │   │   ├── ClassicsStyleActivity.java
│       │   │               │   │   ├── DeliveryStyleActivity.java
│       │   │               │   │   ├── DropboxStyleActivity.java
│       │   │               │   │   ├── FlyRefreshStyleActivity.java
│       │   │               │   │   ├── FunGameBattleCityStyleActivity.java
│       │   │               │   │   ├── FunGameHitBlockStyleActivity.java
│       │   │               │   │   ├── MaterialStyleActivity.java
│       │   │               │   │   ├── PhoenixStyleActivity.java
│       │   │               │   │   ├── StoreHouseStyleActivity.java
│       │   │               │   │   ├── TaurusStyleActivity.java
│       │   │               │   │   ├── WaterDropStyleActivity.java
│       │   │               │   │   └── WaveSwipStyleActivity.java
│       │   │               │   └── using/
│       │   │               │       ├── AssignCodeUsingActivity.java
│       │   │               │       ├── AssignDefaultUsingActivity.java
│       │   │               │       ├── AssignXmlUsingActivity.java
│       │   │               │       ├── BasicUsingActivity.java
│       │   │               │       ├── CustomUsingActivity.java
│       │   │               │       ├── ListenerUsingActivity.java
│       │   │               │       ├── NestLayoutUsingActivity.java
│       │   │               │       ├── OverScrollUsingActivity.java
│       │   │               │       └── SnapHelperUsingActivity.java
│       │   │               ├── adapter/
│       │   │               │   ├── BaseRecyclerAdapter.java
│       │   │               │   └── SmartViewHolder.java
│       │   │               ├── fragment/
│       │   │               │   ├── RefreshPractiveFragment.java
│       │   │               │   ├── RefreshStylesFragment.java
│       │   │               │   └── RefreshUsingFragment.java
│       │   │               ├── util/
│       │   │               │   ├── DynamicTimeFormat.java
│       │   │               │   └── StatusBarUtil.java
│       │   │               └── widget/
│       │   │                   └── RefreshLayout.java
│       │   └── res/
│       │       ├── drawable/
│       │       │   ├── bc_background_panel.xml
│       │       │   ├── ic_arrow_back_dark_24dp.xml
│       │       │   ├── ic_arrow_back_gray_24dp.xml
│       │       │   ├── ic_arrow_back_white_24dp.xml
│       │       │   ├── ic_chevron_right.xml
│       │       │   ├── ic_chevron_right_gray.xml
│       │       │   ├── ic_feed_list_favorite.xml
│       │       │   ├── ic_feed_list_mail.xml
│       │       │   ├── ic_feed_list_photo.xml
│       │       │   ├── ic_fly_refresh_folder.xml
│       │       │   ├── ic_fly_refresh_info.xml
│       │       │   ├── ic_fly_refresh_poll.xml
│       │       │   ├── ic_fly_refresh_send.xml
│       │       │   ├── ic_fly_refresh_smartphone.xml
│       │       │   ├── ic_index_dashboard.xml
│       │       │   ├── ic_index_home.xml
│       │       │   ├── ic_index_notifications.xml
│       │       │   ├── ic_list_divider.xml
│       │       │   └── ic_progress_hojder.xml
│       │       ├── layout/
│       │       │   ├── activity_experiment.xml
│       │       │   ├── activity_fly_refresh.xml
│       │       │   ├── activity_fly_refresh_item.xml
│       │       │   ├── activity_index_main.xml
│       │       │   ├── activity_practice_banner.xml
│       │       │   ├── activity_practice_feedlist.xml
│       │       │   ├── activity_practice_profile.xml
│       │       │   ├── activity_practice_qqbrowser.xml
│       │       │   ├── activity_practice_repast.xml
│       │       │   ├── activity_practice_webview.xml
│       │       │   ├── activity_practice_weibo.xml
│       │       │   ├── activity_style_bezier.xml
│       │       │   ├── activity_style_circle.xml
│       │       │   ├── activity_style_classics.xml
│       │       │   ├── activity_style_delivery.xml
│       │       │   ├── activity_style_dropbox.xml
│       │       │   ├── activity_style_fungame_battlecity.xml
│       │       │   ├── activity_style_fungame_hitblock.xml
│       │       │   ├── activity_style_material.xml
│       │       │   ├── activity_style_phoenix.xml
│       │       │   ├── activity_style_storehouse.xml
│       │       │   ├── activity_style_taurus.xml
│       │       │   ├── activity_style_water_drop.xml
│       │       │   ├── activity_style_wave_swip.xml
│       │       │   ├── activity_using_assign_code.xml
│       │       │   ├── activity_using_assign_default.xml
│       │       │   ├── activity_using_assign_xml.xml
│       │       │   ├── activity_using_basic.xml
│       │       │   ├── activity_using_custom.xml
│       │       │   ├── activity_using_listener.xml
│       │       │   ├── activity_using_overscroll.xml
│       │       │   ├── activity_using_region.xml
│       │       │   ├── activity_using_snaphelper.xml
│       │       │   ├── fragment_refresh_practive.xml
│       │       │   ├── fragment_refresh_styles.xml
│       │       │   ├── fragment_refresh_using.xml
│       │       │   ├── listitem_movie_banner.xml
│       │       │   ├── listitem_movie_header.xml
│       │       │   ├── listitem_movie_item.xml
│       │       │   ├── listitem_practive_repast.xml
│       │       │   ├── listitem_style_delivery.xml
│       │       │   └── listitem_using_snaphelper.xml
│       │       ├── menu/
│       │       │   └── navigation.xml
│       │       ├── values/
│       │       │   ├── colors.xml
│       │       │   ├── dimens.xml
│       │       │   ├── strings.xml
│       │       │   └── styles.xml
│       │       ├── values-v19/
│       │       │   └── styles.xml
│       │       └── values-v21/
│       │           └── styles.xml
│       └── test/
│           └── java/
│               └── com/
│                   └── scwang/
│                       └── refreshlayout/
│                           └── ExampleUnitTest.java
├── art/
│   ├── UMLRefreshLayout.classdiagram
│   ├── app-debug.apk
│   ├── md_custom.md
│   ├── md_donationlist.md
│   ├── md_multitouch.md
│   ├── md_property.md
│   ├── md_smart.md
│   └── md_update.md
├── bintrayUpload.bat
├── build.gradle
├── refresh-footer/
│   ├── .gitignore
│   ├── build.gradle
│   ├── proguard-rules.pro
│   └── src/
│       ├── androidTest/
│       │   └── java/
│       │       └── com/
│       │           └── scwang/
│       │               └── smartrefresh/
│       │                   └── footer/
│       │                       └── ExampleInstrumentedTest.java
│       ├── main/
│       │   ├── AndroidManifest.xml
│       │   └── res/
│       │       └── values/
│       │           ├── attrs.xml
│       │           └── strings.xml
│       └── test/
│           └── java/
│               └── com/
│                   └── scwang/
│                       └── smartrefresh/
│                           └── footer/
│                               └── ExampleUnitTest.java
├── refresh-header/
│   ├── .gitignore
│   ├── build.gradle
│   ├── proguard-rules.pro
│   └── src/
│       ├── androidTest/
│       │   └── java/
│       │       └── com/
│       │           └── scwang/
│       │               └── smartrefresh/
│       │                   └── header/
│       │                       └── ExampleInstrumentedTest.java
│       ├── main/
│       │   ├── AndroidManifest.xml
│       │   ├── java/
│       │   │   └── com/
│       │   │       └── scwang/
│       │   │           └── smartrefresh/
│       │   │               └── header/
│       │   │                   ├── CircleHeader.java
│       │   │                   ├── DeliveryHeader.java
│       │   │                   ├── DropboxHeader.java
│       │   │                   ├── FlyRefreshHeader.java
│       │   │                   ├── FunGameBattleCityHeader.java
│       │   │                   ├── FunGameHitBlockHeader.java
│       │   │                   ├── MaterialHeader.java
│       │   │                   ├── PhoenixHeader.java
│       │   │                   ├── StoreHouseHeader.java
│       │   │                   ├── TaurusHeader.java
│       │   │                   ├── WaterDropHeader.java
│       │   │                   ├── WaveSwipeHeader.java
│       │   │                   ├── flyrefresh/
│       │   │                   │   ├── FlyView.java
│       │   │                   │   ├── MountanScenceView.java
│       │   │                   │   ├── PathInterpolatorCompat.java
│       │   │                   │   ├── PathInterpolatorCompatApi21.java
│       │   │                   │   ├── PathInterpolatorCompatBase.java
│       │   │                   │   └── PathInterpolatorGingerbread.java
│       │   │                   ├── fungame/
│       │   │                   │   ├── FunGameBase.java
│       │   │                   │   ├── FunGameHeader.java
│       │   │                   │   └── FunGameView.java
│       │   │                   ├── internal/
│       │   │                   │   ├── FastOutSlowInInterpolator.java
│       │   │                   │   ├── LookupTableInterpolator.java
│       │   │                   │   └── MaterialProgressDrawable.java
│       │   │                   ├── material/
│       │   │                   │   └── CircleImageView.java
│       │   │                   ├── storehouse/
│       │   │                   │   ├── StoreHouseBarItem.java
│       │   │                   │   └── StoreHousePath.java
│       │   │                   ├── waterdrop/
│       │   │                   │   ├── Circle.java
│       │   │                   │   └── WaterDropView.java
│       │   │                   └── waveswipe/
│       │   │                       ├── AnimationImageView.java
│       │   │                       ├── DisplayUtil.java
│       │   │                       ├── DropBounceInterpolator.java
│       │   │                       └── WaveView.java
│       │   └── res/
│       │       └── values/
│       │           ├── attrs.xml
│       │           └── strings.xml
│       └── test/
│           └── java/
│               └── com/
│                   └── scwang/
│                       └── smartrefresh/
│                           └── header/
│                               └── ExampleUnitTest.java
├── refresh-layout/
│   ├── .gitignore
│   ├── build.gradle
│   ├── proguard-rules.pro
│   └── src/
│       ├── androidTest/
│       │   └── java/
│       │       └── com/
│       │           └── scwang/
│       │               └── smartrefresh/
│       │                   └── layout/
│       │                       └── ExampleInstrumentedTest.java
│       ├── main/
│       │   ├── AndroidManifest.xml
│       │   ├── java/
│       │   │   ├── android/
│       │   │   │   └── support/
│       │   │   │       └── v4/
│       │   │   │           └── view/
│       │   │   │               └── PagerAdapterWrapper.java
│       │   │   └── com/
│       │   │       └── scwang/
│       │   │           └── smartrefresh/
│       │   │               └── layout/
│       │   │                   ├── SmartRefreshLayout.java
│       │   │                   ├── api/
│       │   │                   │   ├── DefaultRefreshFooterCreater.java
│       │   │                   │   ├── DefaultRefreshHeaderCreater.java
│       │   │                   │   ├── RefreshContent.java
│       │   │                   │   ├── RefreshFooter.java
│       │   │                   │   ├── RefreshHeader.java
│       │   │                   │   ├── RefreshInternal.java
│       │   │                   │   ├── RefreshKernel.java
│       │   │                   │   ├── RefreshLayout.java
│       │   │                   │   └── ScrollBoundaryDecider.java
│       │   │                   ├── constant/
│       │   │                   │   ├── DimensionStatus.java
│       │   │                   │   ├── RefreshState.java
│       │   │                   │   └── SpinnerStyle.java
│       │   │                   ├── footer/
│       │   │                   │   ├── BallPulseFooter.java
│       │   │                   │   ├── ClassicsFooter.java
│       │   │                   │   ├── FalsifyFooter.java
│       │   │                   │   └── ballpulse/
│       │   │                   │       └── BallPulseView.java
│       │   │                   ├── header/
│       │   │                   │   ├── BezierRadarHeader.java
│       │   │                   │   ├── ClassicsHeader.java
│       │   │                   │   ├── FalsifyHeader.java
│       │   │                   │   └── bezierradar/
│       │   │                   │       ├── RippleView.java
│       │   │                   │       ├── RoundDotView.java
│       │   │                   │       ├── RoundProgressView.java
│       │   │                   │       └── WaveView.java
│       │   │                   ├── impl/
│       │   │                   │   ├── RefreshContentWrapper.java
│       │   │                   │   ├── RefreshFooterWrapper.java
│       │   │                   │   ├── RefreshHeaderWrapper.java
│       │   │                   │   └── ScrollBoundaryDeciderAdapter.java
│       │   │                   ├── internal/
│       │   │                   │   ├── ProgressDrawable.java
│       │   │                   │   └── pathview/
│       │   │                   │       ├── PathParser.java
│       │   │                   │       ├── PathsDrawable.java
│       │   │                   │       └── PathsView.java
│       │   │                   ├── listener/
│       │   │                   │   ├── AnimationEndListener.java
│       │   │                   │   ├── OnLoadmoreListener.java
│       │   │                   │   ├── OnMultiPurposeListener.java
│       │   │                   │   ├── OnRefreshListener.java
│       │   │                   │   ├── OnRefreshLoadmoreListener.java
│       │   │                   │   ├── OnStateChangedListener.java
│       │   │                   │   └── SimpleMultiPurposeListener.java
│       │   │                   └── util/
│       │   │                       ├── ColorUtils.java
│       │   │                       ├── DelayedRunable.java
│       │   │                       ├── DensityUtil.java
│       │   │                       ├── ScrollBoundaryUtil.java
│       │   │                       └── ViscousFluidInterpolator.java
│       │   └── res/
│       │       └── values/
│       │           ├── attrs.xml
│       │           └── strings.xml
│       └── test/
│           └── java/
│               └── com/
│                   └── scwang/
│                       └── smartrefresh/
│                           └── layout/
│                               └── ExampleUnitTest.java
└── settings.gradle

================================================
FILE CONTENTS
================================================

================================================
FILE: .gitignore
================================================
*.iml
.gradle
gradle
/local.properties
/.idea
/build
/gradlew
/gradlew.bat

================================================
FILE: LICENSE
================================================
                                 Apache License
                           Version 2.0, January 2004
                        http://www.apache.org/licenses/

   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION

   1. Definitions.

      "License" shall mean the terms and conditions for use, reproduction,
      and distribution as defined by Sections 1 through 9 of this document.

      "Licensor" shall mean the copyright owner or entity authorized by
      the copyright owner that is granting the License.

      "Legal Entity" shall mean the union of the acting entity and all
      other entities that control, are controlled by, or are under common
      control with that entity. For the purposes of this definition,
      "control" means (i) the power, direct or indirect, to cause the
      direction or management of such entity, whether by contract or
      otherwise, or (ii) ownership of fifty percent (50%) or more of the
      outstanding shares, or (iii) beneficial ownership of such entity.

      "You" (or "Your") shall mean an individual or Legal Entity
      exercising permissions granted by this License.

      "Source" form shall mean the preferred form for making modifications,
      including but not limited to software source code, documentation
      source, and configuration files.

      "Object" form shall mean any form resulting from mechanical
      transformation or translation of a Source form, including but
      not limited to compiled object code, generated documentation,
      and conversions to other media types.

      "Work" shall mean the work of authorship, whether in Source or
      Object form, made available under the License, as indicated by a
      copyright notice that is included in or attached to the work
      (an example is provided in the Appendix below).

      "Derivative Works" shall mean any work, whether in Source or Object
      form, that is based on (or derived from) the Work and for which the
      editorial revisions, annotations, elaborations, or other modifications
      represent, as a whole, an original work of authorship. For the purposes
      of this License, Derivative Works shall not include works that remain
      separable from, or merely link (or bind by name) to the interfaces of,
      the Work and Derivative Works thereof.

      "Contribution" shall mean any work of authorship, including
      the original version of the Work and any modifications or additions
      to that Work or Derivative Works thereof, that is intentionally
      submitted to Licensor for inclusion in the Work by the copyright owner
      or by an individual or Legal Entity authorized to submit on behalf of
      the copyright owner. For the purposes of this definition, "submitted"
      means any form of electronic, verbal, or written communication sent
      to the Licensor or its representatives, including but not limited to
      communication on electronic mailing lists, source code control systems,
      and issue tracking systems that are managed by, or on behalf of, the
      Licensor for the purpose of discussing and improving the Work, but
      excluding communication that is conspicuously marked or otherwise
      designated in writing by the copyright owner as "Not a Contribution."

      "Contributor" shall mean Licensor and any individual or Legal Entity
      on behalf of whom a Contribution has been received by Licensor and
      subsequently incorporated within the Work.

   2. Grant of Copyright License. Subject to the terms and conditions of
      this License, each Contributor hereby grants to You a perpetual,
      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
      copyright license to reproduce, prepare Derivative Works of,
      publicly display, publicly perform, sublicense, and distribute the
      Work and such Derivative Works in Source or Object form.

   3. Grant of Patent License. Subject to the terms and conditions of
      this License, each Contributor hereby grants to You a perpetual,
      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
      (except as stated in this section) patent license to make, have made,
      use, offer to sell, sell, import, and otherwise transfer the Work,
      where such license applies only to those patent claims licensable
      by such Contributor that are necessarily infringed by their
      Contribution(s) alone or by combination of their Contribution(s)
      with the Work to which such Contribution(s) was submitted. If You
      institute patent litigation against any entity (including a
      cross-claim or counterclaim in a lawsuit) alleging that the Work
      or a Contribution incorporated within the Work constitutes direct
      or contributory patent infringement, then any patent licenses
      granted to You under this License for that Work shall terminate
      as of the date such litigation is filed.

   4. Redistribution. You may reproduce and distribute copies of the
      Work or Derivative Works thereof in any medium, with or without
      modifications, and in Source or Object form, provided that You
      meet the following conditions:

      (a) You must give any other recipients of the Work or
          Derivative Works a copy of this License; and

      (b) You must cause any modified files to carry prominent notices
          stating that You changed the files; and

      (c) You must retain, in the Source form of any Derivative Works
          that You distribute, all copyright, patent, trademark, and
          attribution notices from the Source form of the Work,
          excluding those notices that do not pertain to any part of
          the Derivative Works; and

      (d) If the Work includes a "NOTICE" text file as part of its
          distribution, then any Derivative Works that You distribute must
          include a readable copy of the attribution notices contained
          within such NOTICE file, excluding those notices that do not
          pertain to any part of the Derivative Works, in at least one
          of the following places: within a NOTICE text file distributed
          as part of the Derivative Works; within the Source form or
          documentation, if provided along with the Derivative Works; or,
          within a display generated by the Derivative Works, if and
          wherever such third-party notices normally appear. The contents
          of the NOTICE file are for informational purposes only and
          do not modify the License. You may add Your own attribution
          notices within Derivative Works that You distribute, alongside
          or as an addendum to the NOTICE text from the Work, provided
          that such additional attribution notices cannot be construed
          as modifying the License.

      You may add Your own copyright statement to Your modifications and
      may provide additional or different license terms and conditions
      for use, reproduction, or distribution of Your modifications, or
      for any such Derivative Works as a whole, provided Your use,
      reproduction, and distribution of the Work otherwise complies with
      the conditions stated in this License.

   5. Submission of Contributions. Unless You explicitly state otherwise,
      any Contribution intentionally submitted for inclusion in the Work
      by You to the Licensor shall be under the terms and conditions of
      this License, without any additional terms or conditions.
      Notwithstanding the above, nothing herein shall supersede or modify
      the terms of any separate license agreement you may have executed
      with Licensor regarding such Contributions.

   6. Trademarks. This License does not grant permission to use the trade
      names, trademarks, service marks, or product names of the Licensor,
      except as required for reasonable and customary use in describing the
      origin of the Work and reproducing the content of the NOTICE file.

   7. Disclaimer of Warranty. Unless required by applicable law or
      agreed to in writing, Licensor provides the Work (and each
      Contributor provides its Contributions) on an "AS IS" BASIS,
      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
      implied, including, without limitation, any warranties or conditions
      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
      PARTICULAR PURPOSE. You are solely responsible for determining the
      appropriateness of using or redistributing the Work and assume any
      risks associated with Your exercise of permissions under this License.

   8. Limitation of Liability. In no event and under no legal theory,
      whether in tort (including negligence), contract, or otherwise,
      unless required by applicable law (such as deliberate and grossly
      negligent acts) or agreed to in writing, shall any Contributor be
      liable to You for damages, including any direct, indirect, special,
      incidental, or consequential damages of any character arising as a
      result of this License or out of the use or inability to use the
      Work (including but not limited to damages for loss of goodwill,
      work stoppage, computer failure or malfunction, or any and all
      other commercial damages or losses), even if such Contributor
      has been advised of the possibility of such damages.

   9. Accepting Warranty or Additional Liability. While redistributing
      the Work or Derivative Works thereof, You may choose to offer,
      and charge a fee for, acceptance of support, warranty, indemnity,
      or other liability obligations and/or rights consistent with this
      License. However, in accepting such obligations, You may act only
      on Your own behalf and on Your sole responsibility, not on behalf
      of any other Contributor, and only if You agree to indemnify,
      defend, and hold each Contributor harmless for any liability
      incurred by, or claims asserted against, such Contributor by reason
      of your accepting any such warranty or additional liability.

   END OF TERMS AND CONDITIONS

   APPENDIX: How to apply the Apache License to your work.

      To apply the Apache License to your work, attach the following
      boilerplate notice, with the fields enclosed by brackets "{}"
      replaced with your own identifying information. (Don't include
      the brackets!)  The text should be enclosed in the appropriate
      comment syntax for the file format. We also recommend that a
      file or class name and description of purpose be included on the
      same "printed page" as the copyright notice for easier
      identification within third-party archives.

   Copyright {yyyy} {name of copyright owner}

   Licensed under the Apache License, Version 2.0 (the "License");
   you may not use this file except in compliance with the License.
   You may obtain a copy of the License at

       http://www.apache.org/licenses/LICENSE-2.0

   Unless required by applicable law or agreed to in writing, software
   distributed under the License is distributed on an "AS IS" BASIS,
   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
   See the License for the specific language governing permissions and
   limitations under the License.


================================================
FILE: README.md
================================================
# Android智能下拉刷新框架-SmartRefreshLayout

[![License](https://img.shields.io/badge/License%20-Apache%202-337ab7.svg)](https://www.apache.org/licenses/LICENSE-2.0)
[![Arsenal](https://img.shields.io/badge/%20Arsenal%20-%20SmartRefresh%20-4cae4c.svg?style=flat)](https://android-arsenal.com/details/1/6001)
[![Jcenter](https://img.shields.io/badge/%20Jcenter%20-1.0.3-5bc0de.svg) ](https://bintray.com/scwang90/maven/SmartRefreshLayout/_latestVersion) 
[![MinSdk](https://img.shields.io/badge/%20MinSdk%20-%2012%2B%20-f0ad4e.svg?style=flat)](https://android-arsenal.com/api?level=12)
[![Methods](https://img.shields.io/badge/%20Methods%20%7C%20Size%20-%201251%20%7C%20129%20KB-d9534f.svg)](http://www.methodscount.com/?lib=com.scwang.smartrefresh%3ASmartRefreshLayout%3A1.0.2)

<!-- [![Platform](https://img.shields.io/badge/Platform-Android-f0ad4e.svg)](https://www.android.com) -->
<!-- [![Author](https://img.shields.io/badge/Author-scwang90-11bbff.svg)](https://github.com/scwang90) -->

## [English](README_EN.md) | 中文

正如名字所说,SmartRefreshLayout是一个“聪明”或者说“智能”的下拉刷新布局,由于它的“智能”,它不只是如其它的刷新布局所说的支持所有的View,还支持多层嵌套的视图结构。  除了“聪明”之外,SmartRefreshLayout还具备了很多的特点。  
它继承自ViewGroup 而不是其它的FrameLayout或者LinearLayout,提高了性能。  
它也吸取了现在流行的各种刷新布局的优点,包括谷歌官方的 SwipeRefreshLayout,现在非常流行的 [TwinklingRefreshLayout](https://github.com/lcodecorex/TwinklingRefreshLayout) 、[Ultra-Pull-To-Refresh](https://github.com/liaohuqiu/android-Ultra-Pull-To-Refresh)。还集成了各种炫酷的 Header 和 Footer。  
SmartRefreshLayout的目标是打造一个强大,稳定,成熟的下拉刷新框架,并集成各种的炫酷、多样、实用、美观的Header和Footer。

## 特点功能:

 - 支持所有的 View(AbsListView、RecyclerView、WebView....View) 和多层嵌套的视图结构
 - 支持自定义并且已经集成了很多炫酷的 Header 和 Footer (图).
 - 支持和ListView的同步滚动 和 RecyclerView、AppBarLayout、CoordinatorLayout 的嵌套滚动 NestedScrolling.
 - 支持在Android Studio Xml 编辑器中预览 效果(图)
 - 支持分别在 Default(默认)、Xml、JavaCode 三个中设置 Header 和 Footer.
 - 支持自动刷新、自动上拉加载(自动检测列表惯性滚动到底部,而不用手动上拉).
 - 支持通用的刷新监听器 OnRefreshListener 和更详细的滚动监听 OnMultiPurposeListener.
 - 支持自定义回弹动画的插值器,实现各种炫酷的动画效果.
 - 支持设置主题来适配任何场景的App,不会出现炫酷但很尴尬的情况.
 - 支持设置多种滑动方式来适配各种效果的Header和Footer:平移、拉伸、背后固定、顶层固定、全屏
 - 支持内容尺寸自适应 Content-wrap_content
 - 支持继承重写和扩展功能,内部实现没有 private 方法和字段,继承之后都可以重写覆盖
 - 支持越界回弹(Listview、RecyclerView、ScrollView、WebView...View)
 - 支持多点触摸,下拉、上拉各种手势冲突
 
## 传送门

 - [属性方法](art/md_property.md)
 - [智能之处](art/md_smart.md)
 - [常见问题](https://github.com/scwang90/SmartRefreshLayout/issues/71)
 - [更新日志](art/md_update.md)
 - [博客文章](https://segmentfault.com/a/1190000010066071) 
 - [源码下载](https://github.com/scwang90/SmartRefreshLayout/releases) 
 - [多点触摸](art/md_multitouch.md) 
 - [自定义Header](art/md_custom.md)
 
## Demo
[下载 APK-Demo](art/app-debug.apk)

![](art/png_apk_rqcode.png)

#### 项目演示
![](art/gif_practive_weibo.gif) ![](art/gif_practive_feedlist.gif)

![](art/gif_practive_repast.gif) ![](art/gif_practive_profile.gif)

#### 风格演示
![](art/gif_Delivery.gif) ![](art/gif_Dropbox.gif)

上面这两个是我自己实现的Header,设计来自:[Refresh-your-delivery](https://dribbble.com/shots/2753803-Refresh-your-delivery),[Dropbox-Refresh](https://dribbble.com/shots/3470499-Dropbox-Refresh)

下面的Header是我把github上其它优秀的Header进行的整理和集合还有优化:

![](art/gif_BezierRadar.gif) ![](art/gif_Circle.gif)

整理来自:[TwinklingRefreshLayout](https://github.com/lcodecorex/TwinklingRefreshLayout/blob/master/art/gif_recyclerview2.gif),[Pull Down To Refresh](https://dribbble.com/shots/1797373-Pull-Down-To-Refresh)

![](art/gif_FlyRefresh.gif) ![](art/gif_Classics.gif)

整理来自:[FlyRefresh](https://github.com/race604/FlyRefresh),[ClassicsHeader](#1)

![](art/gif_Phoenix.gif) ![](art/gif_Taurus.gif)

整理来自:[Yalantis/Phoenix](https://github.com/Yalantis/Phoenix),[Yalantis/Taurus](https://github.com/Yalantis/Taurus)

![](art/gif_BattleCity.gif) ![](art/gif_HitBlock.gif)

整理来自:[FunGame/BattleCity](https://github.com/Hitomis/FunGameRefresh),[FunGame/HitBlock](https://github.com/Hitomis/FunGameRefresh)

![](art/gif_WaveSwipe.gif) ![](art/gif_Material.gif)

整理来自:[WaveSwipeRefreshLayout](https://github.com/recruit-lifestyle/WaveSwipeRefreshLayout),[MaterialHeader](https://developer.android.com/reference/android/support/v4/widget/SwipeRefreshLayout.html)

![](art/gif_StoreHouse.gif) ![](art/gif_WaterDrop.gif)

整理来自:[Ultra-Pull-To-Refresh](https://github.com/liaohuqiu/android-Ultra-Pull-To-Refresh),[WaterDrop](https://github.com/THEONE10211024/WaterDropListView)


看到这么多炫酷的Header,是不是觉得很棒?这时你或许会担心这么多的Header集成在一起,但是平时只会用到一个,是不是要引入很多无用的代码和资源?  
请放心,我已经把刷新布局分成三个包啦,用到的时候自行引用就可以啦!

 - SmartRefreshLayout 刷新布局核心实现,自带ClassicsHeader(经典)、BezierRadarHeader(贝塞尔雷达)两个 Header.
 - SmartRefreshHeader 各种Header的集成,除了Layout自带的Header,其它都在这个包中.
 - SmartRefreshFooter 各种Footer的集成,除了Layout自带的Footer,其它都在这个包中.

## 简单用例
#### 1.在 buld.gradle 中添加依赖
```
compile 'com.android.support:appcompat-v7:25.3.1'//版本随意
compile 'com.scwang.smartrefresh:SmartRefreshLayout:1.0.3'
compile 'com.scwang.smartrefresh:SmartRefreshHeader:1.0.3'//没有使用特殊Header,可以不加这行
```

#### 2.在XML布局文件中添加 SmartRefreshLayout
```xml
<?xml version="1.0" encoding="utf-8"?>
<com.scwang.smartrefresh.layout.SmartRefreshLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/refreshLayout"
    android:layout_width="match_parent"
    android:layout_height="match_parent">
    <android.support.v7.widget.RecyclerView
        android:id="@+id/recyclerview"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:overScrollMode="never"
        android:background="#fff" />
</com.scwang.smartrefresh.layout.SmartRefreshLayout>
```

#### 3.在 Activity 或者 Fragment 中添加代码
```java
RefreshLayout refreshLayout = (RefreshLayout)findViewById(R.id.refreshLayout);
refreshLayout.setOnRefreshListener(new OnRefreshListener() {
    @Override
    public void onRefresh(RefreshLayout refreshlayout) {
        refreshlayout.finishRefresh(2000);
    }
});
refreshLayout.setOnLoadmoreListener(new OnLoadmoreListener() {
    @Override
    public void onLoadmore(RefreshLayout refreshlayout) {
        refreshlayout.finishLoadmore(2000);
    }
});
```

## 使用指定的 Header 和 Footer

#### 1.方法一 全局设置
```java
public class App extends Application {
    //static 代码段可以防止内存泄露
    static {
        //设置全局的Header构建器
        SmartRefreshLayout.setDefaultRefreshHeaderCreater(new DefaultRefreshHeaderCreater() {
                @Override
                public RefreshHeader createRefreshHeader(Context context, RefreshLayout layout) {
                    layout.setPrimaryColorsId(R.color.colorPrimary, android.R.color.white);//全局设置主题颜色
                    return new ClassicsHeader(context).setSpinnerStyle(SpinnerStyle.Translate);//指定为经典Header,默认是 贝塞尔雷达Header
                }
            });
        //设置全局的Footer构建器
        SmartRefreshLayout.setDefaultRefreshFooterCreater(new DefaultRefreshFooterCreater() {
                @Override
                public RefreshFooter createRefreshFooter(Context context, RefreshLayout layout) {
                    //指定为经典Footer,默认是 BallPulseFooter
                    return new ClassicsFooter(context).setSpinnerStyle(SpinnerStyle.Translate);
                }
            });
    }
}
```

注意:方法一 设置的Header和Footer的优先级是最低的,如果同时还使用了方法二、三,将会被其它方法取代


#### 2.方法二 XML布局文件指定
```xml
<com.scwang.smartrefresh.layout.SmartRefreshLayout
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:id="@+id/refreshLayout"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="#444444"
    app:srlPrimaryColor="#444444"
    app:srlAccentColor="@android:color/white"
    app:srlEnablePreviewInEditMode="true">
    <!--srlAccentColor srlPrimaryColor 将会改变 Header 和 Footer 的主题颜色-->
    <!--srlEnablePreviewInEditMode 可以开启和关闭预览功能-->
    <com.scwang.smartrefresh.layout.header.ClassicsHeader
        android:layout_width="match_parent"
        android:layout_height="wrap_content"/>
    <TextView
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:padding="@dimen/padding_common"
        android:background="@android:color/white"
        android:text="@string/description_define_in_xml"/>
    <com.scwang.smartrefresh.layout.footer.ClassicsFooter
        android:layout_width="match_parent"
        android:layout_height="wrap_content"/>
</com.scwang.smartrefresh.layout.SmartRefreshLayout>
```

注意:方法二 XML设置的Header和Footer的优先级是中等的,会被方法三覆盖。而且使用本方法的时候,Android Studio 会有预览效果,如下图:

![](art/jpg_preview_xml_define.jpg)

不过不用担心,只是预览效果,运行的时候只有下拉才会出现~

#### 3.方法三 Java代码设置
```java
final RefreshLayout refreshLayout = (RefreshLayout) findViewById(R.id.refreshLayout);
//设置 Header 为 Material风格
refreshLayout.setRefreshHeader(new MaterialHeader(this).setShowBezierWave(true));
//设置 Footer 为 球脉冲
refreshLayout.setRefreshFooter(new BallPulseFooter(this).setSpinnerStyle(SpinnerStyle.Scale));
```

## 混淆

SmartRefreshLayout 没有使用到:序列化、反序列化、JNI、反射,所以并不需要添加混淆过滤代码,并且已经混淆测试通过,如果你在项目的使用中混淆之后出现问题,请及时通知我。

## 赞赏

如果你喜欢 SmartRefreshLayout 的设计,感觉 SmartRefreshLayout 帮助到了你,可以点右上角 "Star" 支持一下 谢谢! ^_^  
你也还可以扫描下面的二维码~ 请作者喝一杯咖啡。

![](art/pay_alipay.jpg) ![](art/pay_wxpay.jpg) ![](art/pay_tencent.jpg)

如果在捐赠留言中备注名称,将会被记录到列表中~ 如果你也是github开源作者,捐赠时可以留下github项目地址或者个人主页地址,链接将会被添加到列表中起到互相推广的作用  
[捐赠列表](art/md_donationlist.md)

## 讨论

### QQ解决群 - 602537182 (付费)  
#### 进群须知
自开群以来,还是有很多的朋友提出了很多问题,我也解决了很多问题,其中有大半问题是本库的Bug导致,也有些是使用者项目本
身的环境问题,这花费了我大量的时间,经过我的观察和测试,到目前为止,本库的bug已经越来越少,当然不能说完全没有,但是
已经能满足很大部分项目的需求。所以从现在起,我做出一个决定:把之前的讨论群改成解决群,并开启付费入群功能,专为解决大
家在使用本库时遇到的问题,不管是本库bug还是,特殊的项目环境导致(包含项目本身的bug)。
我也有自己的工作和娱乐时间,只有大家理解和支持我,我才能专心的为大家解决问题。不过用担心,我已经建立了另一个可以免费
进入的QQ讨论群。

### QQ讨论群 - 477963933  
#### 进群须知
这个群,免费进入,大家可以相互讨论本库的相关使用和出现的问题,群主也会在里面解决问题,如果提出的问题,群成员不
能帮助解决,需要群主解决,但是要花费群主五分钟以上的时间(本库Bug除外),群主将不会解决这个问题,如果项目紧急,请付
费进入解决群解决(不过注意,付费群中群主会很认真很努力的解决问题,但也不能保证已经能完美解决)或者转换使用其他的刷新
库。

<!-- 本群专为 【Android智能下拉刷新框架-SmartRefreshLayout】开设,请不要讨论安卓和下拉刷新之外的内容。本群中后期会改为收费解决群,并再开启免费讨论群,还没进群的童鞋赶紧~ -->
#### 温馨提示
加入群的答案在本文档中可以找到~

## 感谢
[SwipeRefreshLayout](https://developer.android.com/reference/android/support/v4/widget/SwipeRefreshLayout.html)  
[TwinklingRefreshLayout](https://github.com/lcodecorex/TwinklingRefreshLayout)  
[Ultra-Pull-To-Refresh](https://github.com/liaohuqiu/android-Ultra-Pull-To-Refresh)  

License
-------

    Copyright 2017 scwang90

    Licensed under the Apache License, Version 2.0 (the "License");
    you may not use this file except in compliance with the License.
    You may obtain a copy of the License at

       http://www.apache.org/licenses/LICENSE-2.0

    Unless required by applicable law or agreed to in writing, software
    distributed under the License is distributed on an "AS IS" BASIS,
    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    See the License for the specific language governing permissions and
    limitations under the License.


================================================
FILE: README_EN.md
================================================
# Android Smart Refresh Layout Framework

[![License](https://img.shields.io/badge/License%20-Apache%202-337ab7.svg)](https://www.apache.org/licenses/LICENSE-2.0)
[![Arsenal](https://img.shields.io/badge/%20Arsenal%20-%20SmartRefresh%20-4cae4c.svg?style=flat)](https://android-arsenal.com/details/1/6001)
[![Jcenter](https://img.shields.io/badge/%20Jcenter%20-1.0.3-5bc0de.svg) ](https://bintray.com/scwang90/maven/SmartRefreshLayout/_latestVersion) 
[![MinSdk](https://img.shields.io/badge/%20MinSdk%20-%2012%2B%20-f0ad4e.svg?style=flat)](https://android-arsenal.com/api?level=12)
[![Methods](https://img.shields.io/badge/%20Methods%20%7C%20Size%20-%201251%20%7C%20129%20KB-d9534f.svg)](http://www.methodscount.com/?lib=com.scwang.smartrefresh%3ASmartRefreshLayout%3A1.0.2)

<!-- [![Platform](https://img.shields.io/badge/Platform-Android-f0ad4e.svg)](https://www.android.com) -->
<!-- [![Author](https://img.shields.io/badge/Author-scwang90-11bbff.svg)](https://github.com/scwang90) -->


## English | [中文](README.md)

As the name says, SmartRefreshLayout is a "smart" refresh layout,Because of its "smart", it does not just support all the View as other refresh layouts said, but also support multi-layered nested view structures.   
In addition to "smart", SmartRefreshLayout also has a lot of features.  
It extends from ViewGroup rather than the other FrameLayout or LinearLayout, improving performance.  
It absorbs the advantages of various refresh layout in fashion now,Including Google official [SwipeRefreshLayout](https://developer.android.com/reference/android/support/v4/widget/SwipeRefreshLayout.html)、[TwinklingRefreshLayout](https://github.com/lcodecorex/TwinklingRefreshLayout) 、[Ultra-Pull-To-Refresh](https://github.com/liaohuqiu/android-Ultra-Pull-To-Refresh)。Also integrates various cool Header and Footer.  
SmartRefreshLayout's goal is to build a strong, stable and mature refresh layout framework, and integrate all kinds of cool and diverse, practical, beautiful Header and Footer.

## Features

 - Support all of the View (AbsListView RecyclerView WebView... View) and  multi-layered nested view structures.
 - Support custom Header and Footer, and has integrated a lot of cool Header and Footer.
 - Support synchronous scrolling with ListView and NestedScrolling width RecyclerView、AppBarLayout、CoordinatorLayout.
 - Support preview in the Android Studio xml editor.
 - Support three ways (default、xml、java) to set the Header and Footer.
 - Support automatic refresh, automatic loading (automatic detection list, scroll to the bottom without having to manually pull).
 - Support generic refresh listener (OnRefreshListener) and more detailed scrolling listener (OnMultiPurposeListener).
 - Support custom rebound animation interpolator, to achieve a variety of cool animation effects.
 - Support set the theme to fit any scene of App, won't appear cool but very awkward situation.
 - Support for setting a variety of transformations (Translation, stretching, behind the fixed, top fixed, full screen) for Header and Footer.
 - Support content size adaptation (wrap_content).
 - Support rewrite and extension, internal implementation without private methods and fields.
 - Support cross-border rebound (Listview、RecyclerView、ScrollView、WebView...View).
 
## Gateway

 - [Smart place](art/md_smart.md)
 - [Update log](art/md_update.md)
 - [Attribute method](art/md_property.md)
 - [Blog posts](https://segmentfault.com/a/1190000010066071) 
 - [Download the source code](https://github.com/scwang90/SmartRefreshLayout/releases) 
 
## Demo
[Download APK-Demo](art/app-debug.apk)

![](art/png_apk_rqcode.png)

#### Practical
![](art/gif_practive_weibo.gif) ![](art/gif_practive_feedlist.gif)

![](art/gif_practive_repast.gif) ![](art/gif_practive_profile.gif)

#### Style
![](art/gif_Delivery.gif) ![](art/gif_Dropbox.gif)

The two above is my own implementation of the Header, the design comes from: [Refresh-your-delivery](https://dribbble.com/shots/2753803-Refresh-your-delivery),[Dropbox-Refresh](https://dribbble.com/shots/3470499-Dropbox-Refresh)

![](art/gif_BezierRadar.gif) ![](art/gif_Circle.gif)

[TwinklingRefreshLayout](https://github.com/lcodecorex/TwinklingRefreshLayout/blob/master/art/gif_recyclerview2.gif),[Pull Down To Refresh](https://dribbble.com/shots/1797373-Pull-Down-To-Refresh)

![](art/gif_FlyRefresh.gif) ![](art/gif_Classics.gif)

[FlyRefresh](https://github.com/race604/FlyRefresh),[ClassicsHeader](#1)

![](art/gif_Phoenix.gif) ![](art/gif_Taurus.gif)

[Yalantis/Phoenix](https://github.com/Yalantis/Phoenix),[Yalantis/Taurus](https://github.com/Yalantis/Taurus)

![](art/gif_BattleCity.gif) ![](art/gif_HitBlock.gif)

[FunGame/BattleCity](https://github.com/Hitomis/FunGameRefresh),[FunGame/HitBlock](https://github.com/Hitomis/FunGameRefresh)

![](art/gif_WaveSwipe.gif) ![](art/gif_Material.gif)

[WaveSwipeRefreshLayout](https://github.com/recruit-lifestyle/WaveSwipeRefreshLayout),[MaterialHeader](https://developer.android.com/reference/android/support/v4/widget/SwipeRefreshLayout.html)

![](art/gif_StoreHouse.gif) ![](art/gif_WaterDrop.gif)

[Ultra-Pull-To-Refresh](https://github.com/liaohuqiu/android-Ultra-Pull-To-Refresh),[WaterDrop](https://github.com/THEONE10211024/WaterDropListView)


See so many cool headers, is not it feel great? At this point you may be worried that so many headers together, but usually only use one, is not to introduce a lot of useless code and resources?    
Please rest assured that I have divided it into three packages, when used to reference their own it!

 - **SmartRefreshLayout:** The core to realize,Bring ClassicsHeader and BezierRadarHeader.
 - **SmartRefreshHeader:** Integration of various kinds of the Header.
 - **SmartRefreshFooter:** Integration of various kinds of the Footer.

## Usage
#### 1.Add a gradle dependency.
```
compile 'com.android.support:appcompat-v7:25.3.1'
compile 'com.scwang.smartrefresh:SmartRefreshLayout:1.0.3'
compile 'com.scwang.smartrefresh:SmartRefreshHeader:1.0.3'//If you use the special Header
```

#### 2.Add SmartRefreshLayout in the layout xml.
```xml
<?xml version="1.0" encoding="utf-8"?>
<com.scwang.smartrefresh.layout.SmartRefreshLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/refreshLayout"
    android:layout_width="match_parent"
    android:layout_height="match_parent">
    <android.support.v7.widget.RecyclerView
        android:id="@+id/recyclerview"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:overScrollMode="never"
        android:background="#fff" />
</com.scwang.smartrefresh.layout.SmartRefreshLayout>
```

#### 3.Coding in the Activity or Fragment.
```java
RefreshLayout refreshLayout = (RefreshLayout)findViewById(R.id.refreshLayout);
refreshLayout.setOnRefreshListener(new OnRefreshListener() {
    @Override
    public void onRefresh(RefreshLayout refreshlayout) {
        refreshlayout.finishRefresh(2000);
    }
});
refreshLayout.setOnLoadmoreListener(new OnLoadmoreListener() {
    @Override
    public void onLoadmore(RefreshLayout refreshlayout) {
        refreshlayout.finishLoadmore(2000);
    }
});
```

## Use the specified Header and Footer

#### 1.Global settings
```java
public class App extends Application {
    public void onCreate() {
        super.onCreate();
        SmartRefreshLayout.setDefaultRefreshHeaderCreater(new DefaultRefreshHeaderCreater() {
                @Override
                public RefreshHeader createRefreshHeader(Context context, RefreshLayout layout) {
                    return new ClassicsHeader(context).setSpinnerStyle(SpinnerStyle.Translate);
                }
            });
        SmartRefreshLayout.setDefaultRefreshFooterCreater(new DefaultRefreshFooterCreater() {
                @Override
                public RefreshFooter createRefreshFooter(Context context, RefreshLayout layout) {
                    return new ClassicsFooter(context).setSpinnerStyle(SpinnerStyle.Translate);
                }
            });
    }
}
```

Note: this method is the lowest priority.


#### 2.Specified in the XML layout file
```xml
<com.scwang.smartrefresh.layout.SmartRefreshLayout
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:id="@+id/refreshLayout"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="#444444"
    app:srlPrimaryColor="#444444"
    app:srlAccentColor="@android:color/white"
    app:srlEnablePreviewInEditMode="true">
    <!--srlAccentColor and srlPrimaryColor, Will change the Header and Footer theme colors-->
    <!--srlEnablePreviewInEditMode, Can open and close the preview function-->
    <com.scwang.smartrefresh.layout.header.ClassicsHeader
        android:layout_width="match_parent"
        android:layout_height="wrap_content"/>
    <TextView
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:padding="@dimen/padding_common"
        android:background="@android:color/white"
        android:text="@string/description_define_in_xml"/>
    <com.scwang.smartrefresh.layout.footer.ClassicsFooter
        android:layout_width="match_parent"
        android:layout_height="wrap_content"/>
</com.scwang.smartrefresh.layout.SmartRefreshLayout>
```

Note: this method of priority is medium。When using this method, the Android Studio will have preview effect, the following figure:

![](art/jpg_preview_xml_define.jpg)

But don't worry, just a preview effect, run only the drop-down will appear.

#### 3.Specified in the java code
```java
final RefreshLayout refreshLayout = (RefreshLayout) findViewById(R.id.refreshLayout);
refreshLayout.setRefreshHeader(new MaterialHeader(this).setShowBezierWave(true));
refreshLayout.setRefreshFooter(new BallPulseFooter(this).setSpinnerStyle(SpinnerStyle.Scale));
```

## ProGuard

This library does't use serialization and deserialization, JNI, reflection, so there is no need to add confusing filtering code, and it has been confusing tests pass, if you after the confusion in the use of the project appear problem, please inform me.

## Donate

If you like this library's design, feel it help to you, you can point the upper right corner "Star" support Thank you! ^ _ ^  
You can also scan the qr code below to ask the author to drink a cup of coffee.

![](art/pay_alipay.jpg) ![](art/pay_wxpay.jpg) ![](art/pay_tencent.jpg)

If in the donation message note name, will be record to the list  
[Donation list](art/md_donationlist.md)

## Discuss

Contact me: scwang90@hotmail.com 

## Thanks
[SwipeRefreshLayout](https://developer.android.com/reference/android/support/v4/widget/SwipeRefreshLayout.html)  
[TwinklingRefreshLayout](https://github.com/lcodecorex/TwinklingRefreshLayout)  
[android-Ultra-Pull-To-Refresh](https://github.com/liaohuqiu/android-Ultra-Pull-To-Refresh)  

License
-------

    Copyright 2017 scwang90

    Licensed under the Apache License, Version 2.0 (the "License");
    you may not use this file except in compliance with the License.
    You may obtain a copy of the License at

       http://www.apache.org/licenses/LICENSE-2.0

    Unless required by applicable law or agreed to in writing, software
    distributed under the License is distributed on an "AS IS" BASIS,
    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    See the License for the specific language governing permissions and
    limitations under the License.

================================================
FILE: app/.gitignore
================================================
/build


================================================
FILE: app/build.gradle
================================================
apply plugin: 'com.android.application'

android {
    compileSdkVersion 26
    buildToolsVersion "26.0.1"
    defaultConfig {
        applicationId "com.scwang.refreshlayout"
        minSdkVersion 15
        targetSdkVersion 26
        versionCode 1
        versionName "1.0"
        testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
        vectorDrawables.useSupportLibrary = true

        renderscriptTargetApi 25
        renderscriptSupportModeEnabled true    // Enable RS support

    }
    signingConfigs {
        debug {
            storeFile file('debug.keystore')
            storePassword "android"
            keyAlias "androiddebugkey"
            keyPassword "android"
        }
    }
    buildTypes {
        release {
            minifyEnabled true
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
            signingConfig = signingConfigs.debug
        }
    }
    lintOptions {
        abortOnError false
    }
}


repositories {
    maven { url "https://jitpack.io" }
}

dependencies {
    compile fileTree(include: ['*.jar'], dir: 'libs')
    androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', {
        exclude group: 'com.android.support', module: 'support-annotations'
    })

    debugCompile 'com.squareup.leakcanary:leakcanary-android:1.5.1'
    releaseCompile 'com.squareup.leakcanary:leakcanary-android-no-op:1.5.1'
    testCompile 'com.squareup.leakcanary:leakcanary-android-no-op:1.5.1'

    compile project(':refresh-footer')
    compile project(':refresh-header')
    compile project(':refresh-layout')

    compile 'com.android.support:cardview-v7:26.0.0-alpha1'
    compile 'com.android.support.constraint:constraint-layout:1.0.2'
    compile 'com.android.support:design:26.0.0-alpha1'
    compile 'com.flyco.roundview:FlycoRoundView_Lib:1.1.4@aar'
    compile 'com.github.CymChad:BaseRecyclerViewAdapterHelper:2.9.22'
    compile 'com.github.mmin18:realtimeblurview:1.0.6'
    compile 'com.google.code.gson:gson:2.7'
    compile 'com.youth.banner:banner:1.4.9'  //最新版本
    compile 'de.hdodenhof:circleimageview:2.1.0'
    compile 'jp.wasabeef:recyclerview-animators:2.2.6'
    compile 'pl.droidsonroids.gif:android-gif-drawable:1.2.3'
//    compile 'com.scwang.smartrefresh:SmartRefreshLayout:1.0.3'
//    compile 'com.scwang.smartrefresh:SmartRefreshHeader:1.0.3'
    testCompile 'junit:junit:4.12'

    compile 'com.github.bumptech.glide:glide:4.0.0-RC1'
    annotationProcessor 'com.github.bumptech.glide:compiler:4.0.0-RC1'
}


================================================
FILE: app/proguard-rules.pro
================================================
# Add project specific ProGuard rules here.
# By default, the flags in this file are appended to flags specified
# in E:\Android\android-sdk/tools/proguard/proguard-android.txt
# You can edit the include path and order by changing the proguardFiles
# directive in build.gradle.
#
# For more details, see
#   http://developer.android.com/guide/developing/tools/proguard.html

# Add any project specific keep options here:

# 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

#app混淆标记
-keep class com.github.mmin18.** {*;}

-dontwarn android.support.v8.renderscript.*
-keepclassmembers class android.support.v8.renderscript.RenderScript {
  native *** rsn*(...);
  native *** n*(...);
}

-keep enum com.scwang.smartrefresh.layout.impl.** {*;}


================================================
FILE: app/src/androidTest/java/com/scwang/refreshlayout/ExampleInstrumentedTest.java
================================================
package com.scwang.refreshlayout;

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.*;

/**
 * Instrumentation 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() throws Exception {
        // Context of the app under test.
        Context appContext = InstrumentationRegistry.getTargetContext();

        assertEquals("com.scwang.refreshlayout", appContext.getPackageName());
    }
}


================================================
FILE: app/src/main/AndroidManifest.xml
================================================
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.scwang.refreshlayout">

    <!-- 读取SD卡权限 -->
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
    <!-- 网络状态权限 -->
    <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
    <!-- 网络访问权限 -->
    <uses-permission android:name="android.permission.INTERNET" />
    <!-- 设备编号权限 -->
    <uses-permission android:name="android.permission.READ_PHONE_STATE" />

    <application
        android:name=".App"
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:roundIcon="@mipmap/ic_launcher"
        android:supportsRtl="true"
        android:theme="@style/AppTheme">
        <activity
            android:name=".activity.IndexMainActivity"
            android:label="@string/title_activity_index_main">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
        <activity android:name=".activity.ExperimentActivity"
            android:screenOrientation="portrait"/>
        <activity
            android:name=".activity.style.FlyRefreshStyleActivity"
            android:label="@string/title_activity_fly_refresh"
            android:screenOrientation="portrait" />
        <activity
            android:name=".activity.using.NestLayoutUsingActivity"
            android:screenOrientation="portrait" />
        <activity
            android:name=".activity.style.WaveSwipStyleActivity"
            android:label="@string/title_activity_style_wave_swip"
            android:screenOrientation="portrait" />
        <activity
            android:name=".activity.style.MaterialStyleActivity"
            android:label="@string/title_activity_style_material"
            android:screenOrientation="portrait" />
        <activity
            android:name=".activity.style.WaterDropStyleActivity"
            android:label="@string/title_activity_style_water_drop"
            android:screenOrientation="portrait" />
        <activity
            android:name=".activity.style.PhoenixStyleActivity"
            android:label="@string/title_activity_style_phoenix"
            android:screenOrientation="portrait" />
        <activity
            android:name=".activity.style.TaurusStyleActivity"
            android:label="@string/title_activity_style_taurus"
            android:screenOrientation="portrait" />
        <activity
            android:name=".activity.style.BezierStyleActivity"
            android:label="@string/title_activity_style_bezier"
            android:screenOrientation="portrait" />
        <activity
            android:name=".activity.style.ClassicsStyleActivity"
            android:label="@string/title_activity_style_classics"
            android:screenOrientation="portrait" />
        <activity
            android:name=".activity.style.CircleStyleActivity"
            android:label="@string/title_activity_style_circle"
            android:screenOrientation="portrait" />
        <activity
            android:name=".activity.style.FunGameBattleCityStyleActivity"
            android:label="@string/title_activity_style_fungame_battlecity"
            android:screenOrientation="portrait" />
        <activity
            android:name=".activity.style.FunGameHitBlockStyleActivity"
            android:label="@string/title_activity_style_fungame_hitblock"
            android:screenOrientation="portrait" />
        <activity
            android:name=".activity.style.StoreHouseStyleActivity"
            android:label="@string/title_activity_style_storehouse"
            android:screenOrientation="portrait" />
        <activity
            android:name=".activity.style.DropboxStyleActivity"
            android:label="@string/title_activity_style_dropbox"
            android:screenOrientation="portrait" />
        <activity
            android:name=".activity.style.DeliveryStyleActivity"
            android:label="@string/title_activity_style_dropbox"
            android:screenOrientation="portrait" />
        <activity
            android:name=".activity.using.BasicUsingActivity"
            android:label="@string/title_activity_using_basic"
            android:screenOrientation="portrait" />
        <activity
            android:name=".activity.using.AssignDefaultUsingActivity"
            android:label="@string/title_activity_using_assign_default"
            android:screenOrientation="portrait" />
        <activity
            android:name=".activity.using.AssignXmlUsingActivity"
            android:label="@string/title_activity_using_assign_xml"
            android:screenOrientation="portrait" />
        <activity
            android:name=".activity.using.AssignCodeUsingActivity"
            android:label="@string/title_activity_using_assign_code"
            android:screenOrientation="portrait" />
        <activity
            android:name=".activity.using.OverScrollUsingActivity"
            android:label="@string/title_activity_using_overscroll"
            android:screenOrientation="portrait" />
        <activity
            android:name=".activity.using.ListenerUsingActivity"
            android:label="@string/title_activity_using_listener"
            android:screenOrientation="portrait" />
        <activity
            android:name=".activity.practice.RepastPracticeActivity"
            android:label="@string/title_activity_practice_repast"
            android:screenOrientation="portrait" />
        <activity
            android:name=".activity.practice.ProfilePracticeActivity"
            android:label="@string/title_activity_practice_profile"
            android:screenOrientation="portrait" />
        <activity
            android:name=".activity.practice.WebviewPracticeActivity"
            android:label="@string/title_activity_practice_profile"
            android:screenOrientation="portrait" />
        <activity
            android:name=".activity.practice.FeedlistPracticeActivity"
            android:label="@string/title_activity_practice_feedlist"
            android:screenOrientation="portrait" />
        <activity
            android:name=".activity.practice.WeiboPracticeActivity"
            android:label="@string/title_activity_practice_weibo"
            android:screenOrientation="portrait" />
        <activity android:name=".activity.practice.BannerPracticeActivity"
            android:label="@string/title_activity_practice_banner"
            android:screenOrientation="portrait" />
        <activity android:name=".activity.practice.QQBrowserPracticeActivity"
            android:label="@string/title_activity_practice_qqbrowser"
            android:screenOrientation="portrait" />
        <activity android:name=".activity.using.CustomUsingActivity"
            android:label="@string/title_activity_using_custom"
            android:screenOrientation="portrait" />
        <activity android:name=".activity.using.SnapHelperUsingActivity"
            android:label="@string/title_activity_using_snaphelper"
            android:screenOrientation="portrait"/>
    </application>

</manifest>

================================================
FILE: app/src/main/java/com/scwang/refreshlayout/App.java
================================================
package com.scwang.refreshlayout;

import android.app.Application;
import android.content.Context;
import android.support.annotation.NonNull;
import android.support.v7.app.AppCompatDelegate;

import com.scwang.smartrefresh.layout.SmartRefreshLayout;
import com.scwang.smartrefresh.layout.api.DefaultRefreshHeaderCreater;
import com.scwang.smartrefresh.layout.api.RefreshHeader;
import com.scwang.smartrefresh.layout.api.RefreshLayout;
import com.scwang.smartrefresh.layout.constant.SpinnerStyle;
import com.scwang.smartrefresh.layout.header.ClassicsHeader;
import com.squareup.leakcanary.LeakCanary;

/**
 *
 * Created by SCWANG on 2017/6/11.
 */

public class App extends Application {

    static {
        AppCompatDelegate.setCompatVectorFromResourcesEnabled(true);
        SmartRefreshLayout.setDefaultRefreshHeaderCreater(new DefaultRefreshHeaderCreater() {
            @NonNull
            @Override
            public RefreshHeader createRefreshHeader(Context context, RefreshLayout layout) {
                layout.setPrimaryColorsId(R.color.colorPrimary, android.R.color.white);//全局设置主题颜色
                return new ClassicsHeader(context).setSpinnerStyle(SpinnerStyle.Translate);
            }
        });
    }

    @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);
    }
}


================================================
FILE: app/src/main/java/com/scwang/refreshlayout/activity/ExperimentActivity.java
================================================
package com.scwang.refreshlayout.activity;

import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.DividerItemDecoration;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;

import com.scwang.refreshlayout.R;
import com.scwang.refreshlayout.adapter.BaseRecyclerAdapter;
import com.scwang.refreshlayout.adapter.SmartViewHolder;

import java.util.Arrays;
import java.util.Collection;
import java.util.Locale;

import static android.R.layout.simple_list_item_2;
import static android.support.v7.widget.DividerItemDecoration.VERTICAL;

public class ExperimentActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_experiment);


        final RecyclerView recyclerView = (RecyclerView) findViewById(R.id.recyclerView);
        recyclerView.addItemDecoration(new DividerItemDecoration(this, VERTICAL));
        recyclerView.setLayoutManager(new LinearLayoutManager(this));
        recyclerView.setAdapter(new BaseRecyclerAdapter<Void>(buildData(),simple_list_item_2) {
            @Override
            protected void onBindViewHolder(SmartViewHolder holder, Void model, int position) {
                holder.text(android.R.id.text1, String.format(Locale.CHINA, "第%02d条数据", position));
                holder.text(android.R.id.text2, String.format(Locale.CHINA, "这是测试的第%02d条数据", position));
                holder.textColorId(android.R.id.text2, R.color.colorTextAssistant);
            }
        });

    }

    protected Collection<Void> buildData() {
        return Arrays.asList(null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null);
    }
}


================================================
FILE: app/src/main/java/com/scwang/refreshlayout/activity/IndexMainActivity.java
================================================
package com.scwang.refreshlayout.activity;

import android.os.Bundle;
import android.support.annotation.IdRes;
import android.support.annotation.NonNull;
import android.support.design.widget.BottomNavigationView;
import android.support.design.widget.BottomNavigationView.OnNavigationItemSelectedListener;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentTransaction;
import android.support.v7.app.AppCompatActivity;
import android.view.MenuItem;

import com.scwang.refreshlayout.R;
import com.scwang.refreshlayout.fragment.RefreshPractiveFragment;
import com.scwang.refreshlayout.fragment.RefreshStylesFragment;
import com.scwang.refreshlayout.fragment.RefreshUsingFragment;
import com.scwang.refreshlayout.util.StatusBarUtil;

public class IndexMainActivity extends AppCompatActivity implements OnNavigationItemSelectedListener {

    private enum TabFragment {
        practice(R.id.navigation_practice,RefreshPractiveFragment.class),
        styles(R.id.navigation_style,RefreshStylesFragment.class),
        using(R.id.navigation_using,RefreshUsingFragment.class)
        ;

        private Fragment fragment;
        private final int menuId;
        private final Class<? extends Fragment> clazz;

        TabFragment(@IdRes int menuId, Class<? extends Fragment> clazz) {
            this.menuId = menuId;
            this.clazz = clazz;
        }

        @NonNull
        public Fragment fragment() {
            if (fragment == null) {
                try {
                    fragment = clazz.newInstance();
                } catch (Exception e) {
                    e.printStackTrace();
                    fragment = new Fragment();
                }
            }
            return fragment;
        }

        public static TabFragment from(int itemId) {
            for (TabFragment fragment : values()) {
                if (fragment.menuId == itemId) {
                    return fragment;
                }
            }
            return styles;
        }

        public static void onDestroy() {
            for (TabFragment fragment : values()) {
                fragment.fragment = null;
            }
        }
    }

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_index_main);

        final BottomNavigationView navigation = (BottomNavigationView) findViewById(R.id.navigation);
        navigation.setOnNavigationItemSelectedListener(this);
        navigation.setSelectedItemId(R.id.navigation_style);

        //状态栏透明和间距处理
        StatusBarUtil.immersive(this, 0xff000000, 0.1f);
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        TabFragment.onDestroy();
    }

    @Override
    public boolean onNavigationItemSelected(@NonNull MenuItem item) {
        getSupportFragmentManager()
                .beginTransaction()
                .setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN)
                .replace(R.id.content,TabFragment.from(item.getItemId()).fragment())
                .commit();
        return true;
    }
}


================================================
FILE: app/src/main/java/com/scwang/refreshlayout/activity/practice/BannerPracticeActivity.java
================================================
package com.scwang.refreshlayout.activity.practice;

import android.content.Context;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.DividerItemDecoration;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.support.v7.widget.Toolbar;
import android.view.LayoutInflater;
import android.view.View;
import android.widget.ImageView;

import com.bumptech.glide.Glide;
import com.chad.library.adapter.base.BaseQuickAdapter;
import com.chad.library.adapter.base.BaseViewHolder;
import com.google.gson.Gson;
import com.google.gson.reflect.TypeToken;
import com.scwang.refreshlayout.R;
import com.scwang.refreshlayout.util.StatusBarUtil;
import com.scwang.smartrefresh.layout.api.RefreshLayout;
import com.scwang.smartrefresh.layout.listener.OnRefreshListener;
import com.youth.banner.Banner;
import com.youth.banner.loader.ImageLoader;

import java.util.ArrayList;
import java.util.List;

import static android.support.v7.widget.DividerItemDecoration.VERTICAL;

/**
 * 广告轮播-Banner
 */
@SuppressWarnings("ALL")
public class BannerPracticeActivity extends AppCompatActivity {

    private QuickAdapter mAdapter;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_practice_banner);

        final Toolbar toolbar = (Toolbar)findViewById(R.id.toolbar);
        toolbar.setNavigationOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                finish();
            }
        });

        final RecyclerView recyclerView = (RecyclerView) findViewById(R.id.recyclerView);
        final RefreshLayout refreshLayout = (RefreshLayout) findViewById(R.id.refreshLayout);

        mAdapter = new QuickAdapter();
        recyclerView.addItemDecoration(new DividerItemDecoration(this, VERTICAL));
        recyclerView.setLayoutManager(new LinearLayoutManager(this));
        recyclerView.setAdapter(mAdapter);
        refreshLayout.autoRefresh();
        refreshLayout.setOnRefreshListener(new OnRefreshListener() {
            @Override
            public void onRefresh(final RefreshLayout refreshlayout) {
                refreshlayout.getLayout().postDelayed(new Runnable() {
                    @Override
                    public void run() {
                        if (mAdapter.getItemCount() < 2) {
                            List<Movie> movies = new Gson().fromJson(JSON_MOVIES, new TypeToken<ArrayList<Movie>>() {}.getType());
                            mAdapter.replaceData(movies);
                        }
                        refreshlayout.finishRefresh();
                    }
                },2000);
            }
        });

        //添加Header
        View header = LayoutInflater.from(this).inflate(R.layout.listitem_movie_header, recyclerView, false);
        Banner banner = (Banner) header;
        banner.setImageLoader(new GlideImageLoader());
        banner.setImages(BANNER_ITEMS);
        banner.start();
        mAdapter.addHeaderView(banner);

        //状态栏透明和间距处理
        StatusBarUtil.immersive(this);
        StatusBarUtil.setPaddingSmart(this, toolbar);
        StatusBarUtil.setPaddingSmart(this, recyclerView);
        StatusBarUtil.setMargin(this, findViewById(R.id.header));
        StatusBarUtil.setPaddingSmart(this, findViewById(R.id.blurview));
    }

    public class QuickAdapter extends BaseQuickAdapter<Movie, BaseViewHolder> {
        public QuickAdapter() {
            super(R.layout.listitem_movie_item);
        }

        @Override
        protected void convert(BaseViewHolder viewHolder, Movie item) {
            viewHolder.setText(R.id.lmi_title, item.filmName)
                    .setText(R.id.lmi_actor, item.actors)
                    .setText(R.id.lmi_grade, item.grade)
                    .setText(R.id.lmi_describe, item.shortinfo);
            Glide.with(mContext).load(item.picaddr).into((ImageView) viewHolder.getView(R.id.lmi_avatar));
        }
    }

    public class GlideImageLoader extends ImageLoader {
        @Override
        public void displayImage(Context context, Object path, ImageView imageView) {
            imageView.setImageResource(((BannerItem) path).pic);
        }
    }

    public static class Movie {
        public String actors;
        public String filmName;
        public String grade;
        public String info;
        public String picaddr;
        public String shortinfo;
    }

    public static class BannerItem {

        public int pic;
        public String title;

        public BannerItem() {
        }

        public BannerItem(String title, int pic) {
            this.pic = pic;
            this.title = title;
        }
    }

    public static List<BannerItem> BANNER_ITEMS = new ArrayList<BannerItem>(){{
        add(new BannerItem("最后的骑士", R.mipmap.image_movie_header_48621499931969370));
        add(new BannerItem("三生三世十里桃花", R.mipmap.image_movie_header_12981501221820220));
        add(new BannerItem("豆福传", R.mipmap.image_movie_header_12231501221682438));
    }};


    public static String JSON_MOVIES = "[" +
            "{\"actors\":\"丹尼斯·威缇可宁|Emma|Nikki|Jiayao|Wang|Maggie|Mao|Gang-yun|Sa\",\"filmName\":\"神灵寨\",\"grade\":\"5.0\",\"picaddr\":\"http://app.infunpw.com/commons/images/cinema/cinema_films/3823.jpg\",\"releasedate\":\"2017-07-31\",\"shortinfo\":\"父亲忽病危 新娘真够黑\",\"type\":\"剧情|喜剧\"}," +
            "{\"actors\":\"刘亦菲|杨洋|彭子苏|严屹宽|罗晋\",\"filmName\":\"三生三世十里桃花\",\"grade\":\"9.2\",\"picaddr\":\"http://app.infunpw.com/commons/images/cinema/cinema_films/3566.jpg\",\"releasedate\":\"2017-08-03\",\"shortinfo\":\"虐心姐弟恋 颜值要逆天\",\"type\":\"剧情|爱情|奇幻\"}," +
            "{\"actors\":\"尹航|代旭|李晨浩|衣云鹤|张念骅\",\"filmName\":\"谁是球王\",\"grade\":\"10.0\",\"picaddr\":\"http://app.infunpw.com/commons/images/cinema/cinema_films/3750.jpg\",\"releasedate\":\"2017-08-03\",\"shortinfo\":\"足球变人生 再战可辉煌\",\"type\":\"剧情|喜剧\"}," +
            "{\"actors\":null,\"filmName\":\"大象林旺之一夜成名\",\"grade\":\"10.0\",\"picaddr\":\"http://app.infunpw.com/commons/images/cinema/cinema_films/3757.jpg\",\"releasedate\":\"2017-08-04\",\"shortinfo\":\"大象参二战 一生好伙伴\",\"type\":\"动作|动画|战争|冒险\"}," +
            "{\"actors\":\"薛凯琪|陈意涵|张钧甯|迈克·泰森\",\"filmName\":\"闺蜜2:无二不作\",\"grade\":\"8.3\",\"picaddr\":\"http://app.infunpw.com/commons/images/cinema/cinema_films/3776.jpg\",\"releasedate\":\"2017-08-04\",\"shortinfo\":\"闺蜜团出战 会一会新娘\",\"type\":\"喜剧|爱情\"}," +
            "{\"actors\":\"彭禺厶|王萌|周凯文|曹琦|孟子叶\",\"filmName\":\"诡井\",\"grade\":\"5.0\",\"picaddr\":\"http://app.infunpw.com/commons/images/cinema/cinema_films/3824.jpg\",\"releasedate\":\"2017-08-04\",\"shortinfo\":\"午夜深井中 怨魂欲现形\",\"type\":\"恐怖|惊悚\"}," +
            "{\"actors\":\"旺卓措|刘承宙|高欣生|段楠|来钰\",\"filmName\":\"荒野加油站\",\"grade\":\"5.0\",\"picaddr\":\"http://app.infunpw.com/commons/images/cinema/cinema_films/3821.jpg\",\"releasedate\":\"2017-08-04\",\"shortinfo\":\"夜半拉乘客 结果遇不测\",\"type\":\"惊悚|悬疑\"}," +
            "{\"actors\":\"刘佩琦|曹云金|罗昱焜\",\"filmName\":\"龙之战\",\"grade\":\"5.0\",\"picaddr\":\"http://app.infunpw.com/commons/images/cinema/cinema_films/3778.jpg\",\"releasedate\":\"2017-08-04\",\"shortinfo\":\"持倭刀屹立 抗外敌救国\",\"type\":\"动作|战争|历史\"}," +
            "{\"actors\":\"金巴|曲尼次仁|夏诺.扎西敦珠|索朗尼玛|益西旦增\",\"filmName\":\"皮绳上的魂\",\"grade\":\"5.0\",\"picaddr\":\"http://app.infunpw.com/commons/images/cinema/cinema_films/3801.jpg\",\"releasedate\":\"2017-08-04\",\"shortinfo\":\"走完朝圣路 又上降魔旅\",\"type\":\"剧情\"}," +
            "{\"actors\":\"严丽祯|李晔|王衡|李传缨|李心仪\",\"filmName\":\"玩偶奇兵\",\"grade\":\"10.0\",\"picaddr\":\"http://app.infunpw.com/commons/images/cinema/cinema_films/3779.jpg\",\"releasedate\":\"2017-08-04\",\"shortinfo\":\"玩偶战数码 一头两个大\",\"type\":\"动画|冒险|奇幻\"}," +
            "{\"actors\":\"斯蒂芬·马布里|吴尊|何冰|郑秀妍|王庆祥\",\"filmName\":\"我是马布里\",\"grade\":\"0.0\",\"picaddr\":\"http://app.infunpw.com/commons/images/cinema/cinema_films/3810.jpg\",\"releasedate\":\"2017-08-04\",\"shortinfo\":\"吴尊助冠军 热血灌篮魂\",\"type\":\"剧情|运动\"}," +
            "{\"actors\":\"周鹏雨|穆建荣|陈泽帆|鹿露|宋星成\",\"filmName\":\"原罪的羔羊\",\"grade\":\"5.0\",\"picaddr\":\"http://app.infunpw.com/commons/images/cinema/cinema_films/3802.jpg\",\"releasedate\":\"2017-08-04\",\"shortinfo\":\"古镇来戏班 往事不一般\",\"type\":\"悬疑\"}," +
            "{\"actors\":\"王大陆|张天爱|任达华|盛冠森|王迅\",\"filmName\":\"鲛珠传\",\"grade\":\"7.1\",\"picaddr\":\"http://app.infunpw.com/commons/images/cinema/cinema_films/3777.jpg\",\"releasedate\":\"2017-08-04\",\"shortinfo\":\"改编热IP 杠杠号召力\",\"type\":\"喜剧|动作|奇幻\"}," +
            "{\"actors\":\"成龙|罗伯特·雷德福\",\"filmName\":\"地球:神奇的一天\",\"grade\":\"10.0\",\"picaddr\":\"http://app.infunpw.com/commons/images/cinema/cinema_films/3803.jpg\",\"releasedate\":\"2017-08-11\",\"shortinfo\":\"史诗纪录片 十年再相见\",\"type\":\"纪录片\"}," +
            "{\"actors\":\"刘德华|舒淇|杨祐宁|张静初|让·雷诺|曾志伟|沙溢\",\"filmName\":\"侠盗联盟\",\"grade\":\"10.0\",\"picaddr\":\"http://app.infunpw.com/commons/images/cinema/cinema_films/3592.jpg\",\"releasedate\":\"2017-08-11\",\"shortinfo\":\"侠盗三剑客 越洋逃恐吓\",\"type\":\"动作|冒险\"}," +
            "{\"actors\":\"廖凡|李易峰|万茜|李纯|张国柱\",\"filmName\":\"心理罪\",\"grade\":\"10.0\",\"picaddr\":\"http://app.infunpw.com/commons/images/cinema/cinema_films/3795.jpg\",\"releasedate\":\"2017-08-11\",\"shortinfo\":\"侦探两搭档 真相背后藏\",\"type\":\"悬疑|犯罪\"}," +
            "{\"actors\":\"徐瑞阳|赵倩|姜启杨|徐万学|韩靓|韦安\",\"filmName\":\"隐隐惊马槽之绝战女僵尸\",\"grade\":\"5.0\",\"picaddr\":\"http://app.infunpw.com/commons/images/cinema/cinema_films/3825.jpg\",\"releasedate\":\"2017-08-11\",\"shortinfo\":\"阴兵来借道 尸占惊马槽\",\"type\":\"惊悚|动作|冒险|悬疑\"}," +
            "{\"actors\":\"宋睿|王良|张佳浩|叶常清\",\"filmName\":\"左眼阴阳\",\"grade\":\"10.0\",\"picaddr\":\"http://app.infunpw.com/commons/images/cinema/cinema_films/3804.jpg\",\"releasedate\":\"2017-08-11\",\"shortinfo\":\"左眼见到鬼 是诡还是魅\",\"type\":\"恐怖|惊悚|悬疑\"}," +
            "{\"actors\":null,\"filmName\":\"二十二\",\"grade\":\"10.0\",\"picaddr\":\"http://app.infunpw.com/commons/images/cinema/cinema_films/3811.jpg\",\"releasedate\":\"2017-08-14\",\"shortinfo\":\"二战女俘虏 讲述心中苦\",\"type\":\"纪录片\"}," +
            "{\"actors\":\"郭富城|王千源|刘涛|余皑磊|冯嘉怡\",\"filmName\":\"破·局\",\"grade\":\"5.0\",\"picaddr\":\"http://app.infunpw.com/commons/images/cinema/cinema_films/3812.jpg\",\"releasedate\":\"2017-08-18\",\"shortinfo\":\"影帝硬碰硬 迷局谁怕谁\",\"type\":\"动作|犯罪\"}" +
            "]";
}


================================================
FILE: app/src/main/java/com/scwang/refreshlayout/activity/practice/FeedlistPracticeActivity.java
================================================
package com.scwang.refreshlayout.activity.practice;

import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.Toolbar;
import android.view.View;

import com.scwang.refreshlayout.R;
import com.scwang.smartrefresh.layout.api.RefreshLayout;

/**
 * 微博列表
 */
public class FeedlistPracticeActivity extends AppCompatActivity {

    private static boolean isFirstEnter = true;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_practice_feedlist);

        final Toolbar toolbar = (Toolbar)findViewById(R.id.toolbar);
        toolbar.setNavigationOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                finish();
            }
        });

        final RefreshLayout refreshLayout = (RefreshLayout) findViewById(R.id.refreshLayout);
        if (isFirstEnter) {
            isFirstEnter = false;
            refreshLayout.autoRefresh();
        }

    }

}


================================================
FILE: app/src/main/java/com/scwang/refreshlayout/activity/practice/ProfilePracticeActivity.java
================================================
package com.scwang.refreshlayout.activity.practice;

import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.Toolbar;
import android.view.View;

import com.scwang.refreshlayout.R;
import com.scwang.refreshlayout.util.StatusBarUtil;

/**
 * 个人中心
 */
public class ProfilePracticeActivity extends AppCompatActivity {


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_practice_profile);

        final Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
        toolbar.setNavigationOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                finish();
            }
        });

        //状态栏透明和间距处理
        StatusBarUtil.immersive(this);
        StatusBarUtil.setPaddingSmart(this, toolbar);
        StatusBarUtil.setPaddingSmart(this, findViewById(R.id.profile));
        StatusBarUtil.setPaddingSmart(this, findViewById(R.id.blurview));
    }

}


================================================
FILE: app/src/main/java/com/scwang/refreshlayout/activity/practice/QQBrowserPracticeActivity.java
================================================
package com.scwang.refreshlayout.activity.practice;

import android.annotation.SuppressLint;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.Toolbar;
import android.view.View;
import android.webkit.WebView;
import android.webkit.WebViewClient;

import com.scwang.refreshlayout.R;
import com.scwang.refreshlayout.util.StatusBarUtil;

/**
 * QQ浏览器-Github
 */
public class QQBrowserPracticeActivity extends AppCompatActivity {

    @SuppressLint("SetJavaScriptEnabled")
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_practice_qqbrowser);

        final Toolbar toolbar = (Toolbar)findViewById(R.id.toolbar);
        toolbar.setNavigationOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                finish();
            }
        });

        final WebView webView = (WebView) findViewById(R.id.webView);
        webView.loadUrl("https://github.com/scwang90/SmartRefreshLayout");
        webView.getSettings().setJavaScriptEnabled(true);
        webView.setWebViewClient(new WebViewClient(){
            @Override
            public boolean shouldOverrideUrlLoading(WebView view, String url) {
                view.loadUrl(url);
                return true;
            }
        });

        //状态栏透明和间距处理
        StatusBarUtil.immersive(this);
        StatusBarUtil.setPaddingSmart(this, toolbar);
    }

}


================================================
FILE: app/src/main/java/com/scwang/refreshlayout/activity/practice/RepastPracticeActivity.java
================================================
package com.scwang.refreshlayout.activity.practice;

import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.DefaultItemAnimator;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.support.v7.widget.Toolbar;
import android.view.View;
import android.widget.Toast;

import com.scwang.refreshlayout.R;
import com.scwang.refreshlayout.adapter.BaseRecyclerAdapter;
import com.scwang.refreshlayout.adapter.SmartViewHolder;
import com.scwang.refreshlayout.util.StatusBarUtil;
import com.scwang.smartrefresh.layout.api.RefreshLayout;
import com.scwang.smartrefresh.layout.listener.OnRefreshLoadmoreListener;

import java.util.Arrays;
import java.util.Collection;

/**
 * 餐饮美食
 */
public class RepastPracticeActivity extends AppCompatActivity {


    private class Model {
        int imageId;
        int avatarId;
        String name;
        String nickname;
    }

    private static boolean isFirstEnter = true;
    private BaseRecyclerAdapter<Model> mAdapter;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_practice_repast);

        final Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
        toolbar.setNavigationOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                finish();
            }
        });

        final RefreshLayout refreshLayout = (RefreshLayout) findViewById(R.id.refreshLayout);

        //第一次进入演示刷新
        if (isFirstEnter) {
            isFirstEnter = false;
            refreshLayout.autoRefresh();
        }

        //初始化列表和监听
        View view = findViewById(R.id.recyclerView);
        if (view instanceof RecyclerView) {
            RecyclerView recyclerView = (RecyclerView) view;
            recyclerView.setLayoutManager(new LinearLayoutManager(this));
            recyclerView.setItemAnimator(new DefaultItemAnimator());
            recyclerView.setAdapter(mAdapter = new BaseRecyclerAdapter<Model>(loadModels(), R.layout.listitem_practive_repast) {
                @Override
                protected void onBindViewHolder(SmartViewHolder holder, Model model, int position) {
                    holder.text(R.id.name, model.name);
                    holder.text(R.id.nickname, model.nickname);
                    holder.image(R.id.image, model.imageId);
                    holder.image(R.id.avatar, model.avatarId);
                }
            });

            refreshLayout.setOnRefreshLoadmoreListener(new OnRefreshLoadmoreListener() {
                @Override
                public void onRefresh(final RefreshLayout refreshlayout) {
                    refreshLayout.getLayout().postDelayed(new Runnable() {
                        @Override
                        public void run() {
                            refreshlayout.finishRefresh();
                            refreshlayout.setLoadmoreFinished(false);//恢复上拉状态
                        }
                    }, 2000);
                }
                @Override
                public void onLoadmore(final RefreshLayout refreshlayout) {
                    refreshLayout.getLayout().postDelayed(new Runnable() {
                        @Override
                        public void run() {
                            mAdapter.loadmore(loadModels());
                            refreshlayout.finishLoadmore();
                            if (mAdapter.getCount() > 12) {
                                Toast.makeText(getBaseContext(), "数据全部加载完毕", Toast.LENGTH_SHORT).show();
                                refreshlayout.setLoadmoreFinished(true);//设置之后,将不会再触发加载事件
                            }
                        }
                    }, 1000);
                }
            });
        }

        //状态栏透明和间距处理
        StatusBarUtil.darkMode(this);
        StatusBarUtil.setPaddingSmart(this, view);
        StatusBarUtil.setPaddingSmart(this, toolbar);
        StatusBarUtil.setPaddingSmart(this, findViewById(R.id.blurview));
        StatusBarUtil.setMargin(this, findViewById(R.id.gifview));
    }

    /**
     * 模拟数据
     */
    private Collection<Model> loadModels() {
        return Arrays.asList(
                new Model() {{
                    this.name = "但家香酥鸭";
                    this.nickname = "爱过那张脸";
                    this.imageId = R.mipmap.image_practice_repast_1;
                    this.avatarId = R.mipmap.image_avatar_1;
                }}, new Model() {{
                    this.name = "香菇蒸鸟蛋";
                    this.nickname = "淑女算个鸟";
                    this.imageId = R.mipmap.image_practice_repast_2;
                    this.avatarId = R.mipmap.image_avatar_2;
                }}, new Model() {{
                    this.name = "花溪牛肉粉";
                    this.nickname = "性感妩媚";
                    this.imageId = R.mipmap.image_practice_repast_3;
                    this.avatarId = R.mipmap.image_avatar_3;
                }}, new Model() {{
                    this.name = "破酥包";
                    this.nickname = "一丝丝纯真";
                    this.imageId = R.mipmap.image_practice_repast_4;
                    this.avatarId = R.mipmap.image_avatar_4;
                }}, new Model() {{
                    this.name = "盐菜饭";
                    this.nickname = "等着你回来";
                    this.imageId = R.mipmap.image_practice_repast_5;
                    this.avatarId = R.mipmap.image_avatar_5;
                }}, new Model() {{
                    this.name = "米豆腐";
                    this.nickname = "宝宝树人";
                    this.imageId = R.mipmap.image_practice_repast_6;
                    this.avatarId = R.mipmap.image_avatar_6;
                }});
    }

}


================================================
FILE: app/src/main/java/com/scwang/refreshlayout/activity/practice/WebviewPracticeActivity.java
================================================
package com.scwang.refreshlayout.activity.practice;

import android.annotation.SuppressLint;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.Toolbar;
import android.view.View;
import android.webkit.WebView;
import android.webkit.WebViewClient;

import com.scwang.refreshlayout.R;
import com.scwang.refreshlayout.util.StatusBarUtil;
import com.scwang.smartrefresh.layout.api.RefreshLayout;
import com.scwang.smartrefresh.layout.listener.OnRefreshListener;
import com.scwang.smartrefresh.layout.util.DensityUtil;

import java.util.Locale;

/**
 * 网页-Github
 */
public class WebviewPracticeActivity extends AppCompatActivity {

    @SuppressLint("SetJavaScriptEnabled")
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_practice_webview);

        final Toolbar toolbar = (Toolbar)findViewById(R.id.toolbar);
        toolbar.setNavigationOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                finish();
            }
        });

        final WebView webView = (WebView) findViewById(R.id.webView);
        final RefreshLayout refreshLayout = (RefreshLayout) findViewById(R.id.refreshLayout);
        refreshLayout.setOnRefreshListener(new OnRefreshListener() {
            @Override
            public void onRefresh(RefreshLayout refreshlayout) {
                webView.loadUrl("https://github.com/scwang90/SmartRefreshLayout");
            }
        });
        refreshLayout.autoRefresh();


        webView.getSettings().setJavaScriptEnabled(true);
        webView.setWebViewClient(new WebViewClient(){
            @Override
            public boolean shouldOverrideUrlLoading(WebView view, String url) {
                view.loadUrl(url);
                return true;
            }

            @Override
            public void onPageFinished(WebView view, String url) {
                super.onPageFinished(view, url);
                refreshLayout.finishRefresh();
                view.loadUrl(String.format(Locale.CHINA, "javascript:document.body.style.paddingTop='%fpx'; void 0", DensityUtil.px2dp(webView.getPaddingTop())));
            }
        });

        //状态栏透明和间距处理
        StatusBarUtil.immersive(this);
        StatusBarUtil.setPaddingSmart(this, webView);
        StatusBarUtil.setPaddingSmart(this, toolbar);
        StatusBarUtil.setMargin(this, findViewById(R.id.header));
        StatusBarUtil.setPaddingSmart(this, findViewById(R.id.blurview));
    }

}


================================================
FILE: app/src/main/java/com/scwang/refreshlayout/activity/practice/WeiboPracticeActivity.java
================================================
package com.scwang.refreshlayout.activity.practice;

import android.os.Bundle;
import android.support.v4.content.ContextCompat;
import android.support.v4.widget.NestedScrollView;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.Toolbar;
import android.view.View;
import android.widget.Toast;

import com.scwang.refreshlayout.R;
import com.scwang.refreshlayout.util.StatusBarUtil;
import com.scwang.smartrefresh.layout.api.RefreshHeader;
import com.scwang.smartrefresh.layout.api.RefreshLayout;
import com.scwang.smartrefresh.layout.listener.SimpleMultiPurposeListener;
import com.scwang.smartrefresh.layout.util.DensityUtil;

/**
 * 微博列表
 */
public class WeiboPracticeActivity extends AppCompatActivity {

    private int mOffset = 0;
    private int mScrollY = 0;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_practice_weibo);

        final Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
        toolbar.setNavigationOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                finish();
            }
        });

        //状态栏透明和间距处理
        StatusBarUtil.immersive(this);
        StatusBarUtil.setPaddingSmart(this, toolbar);

        final View parallax = findViewById(R.id.parallax);
        final View buttonBar = findViewById(R.id.buttonBarLayout);
        final NestedScrollView scrollView = (NestedScrollView)findViewById(R.id.scrollView);
        final RefreshLayout refreshLayout = (RefreshLayout)findViewById(R.id.refreshLayout);

        findViewById(R.id.attention).setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Toast.makeText(view.getContext(),"点击了关注",Toast.LENGTH_SHORT).show();
            }
        });
        findViewById(R.id.leaveword).setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Toast.makeText(view.getContext(),"点击了留言",Toast.LENGTH_SHORT).show();
            }
        });

        refreshLayout.setOnMultiPurposeListener(new SimpleMultiPurposeListener() {
            @Override
            public void onHeaderPulling(RefreshHeader header, float percent, int offset, int bottomHeight, int extendHeight) {
                mOffset = offset / 2;
                parallax.setTranslationY(mOffset - mScrollY);
                toolbar.setAlpha(1 - Math.min(percent, 1));
            }
            @Override
            public void onHeaderReleasing(RefreshHeader header, float percent, int offset, int bottomHeight, int extendHeight) {
                mOffset = offset / 2;
                parallax.setTranslationY(mOffset - mScrollY);
                toolbar.setAlpha(1 - Math.min(percent, 1));
            }
        });
        scrollView.setOnScrollChangeListener(new NestedScrollView.OnScrollChangeListener() {
            private int lastScrollY = 0;
            private int h = DensityUtil.dp2px(170);
            private int color = ContextCompat.getColor(getApplicationContext(), R.color.colorPrimary)&0x00ffffff;
            @Override
            public void onScrollChange(NestedScrollView v, int scrollX, int scrollY, int oldScrollX, int oldScrollY) {
                if (lastScrollY < h) {
                    scrollY = Math.min(h, scrollY);
                    mScrollY = scrollY > h ? h : scrollY;
                    buttonBar.setAlpha(1f * mScrollY / h);
                    toolbar.setBackgroundColor(((255 * mScrollY / h) << 24) | color);
                    parallax.setTranslationY(mOffset - mScrollY);
                }
                lastScrollY = scrollY;
            }
        });
        buttonBar.setAlpha(0);
        toolbar.setBackgroundColor(0);
    }

}


================================================
FILE: app/src/main/java/com/scwang/refreshlayout/activity/style/BezierStyleActivity.java
================================================
package com.scwang.refreshlayout.activity.style;

import android.os.Build;
import android.os.Bundle;
import android.support.v4.content.ContextCompat;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.DefaultItemAnimator;
import android.support.v7.widget.DividerItemDecoration;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.support.v7.widget.Toolbar;
import android.view.View;
import android.widget.AdapterView;

import com.scwang.refreshlayout.R;
import com.scwang.refreshlayout.adapter.BaseRecyclerAdapter;
import com.scwang.refreshlayout.adapter.SmartViewHolder;
import com.scwang.smartrefresh.layout.api.RefreshLayout;
import com.scwang.smartrefresh.layout.header.BezierRadarHeader;

import java.util.Arrays;

import static android.R.layout.simple_list_item_2;
import static android.support.v7.widget.DividerItemDecoration.VERTICAL;

public class BezierStyleActivity extends AppCompatActivity implements AdapterView.OnItemClickListener {

    private enum Item {
        内容不偏移("下拉的时候列表内容停留在原位不动"),
        内容跟随偏移("下拉的时候列表内容跟随向下偏移"),
        橙色主题("更改为橙色主题颜色"),
        红色主题("更改为红色主题颜色"),
        绿色主题("更改为绿色主题颜色"),
        蓝色主题("更改为蓝色主题颜色"),
        打开左右拖动("打开左右拖动效果"),
        关闭左右拖动("关闭左右拖动效果"),
        ;
        public String name;
        Item(String name) {
            this.name = name;
        }
    }

    private Toolbar mToolbar;
    private RefreshLayout mRefreshLayout;
    private BezierRadarHeader mRefreshHeader;
    private static boolean isFirstEnter = true;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_style_bezier);

        mToolbar = (Toolbar)findViewById(R.id.toolbar);
        mToolbar.setNavigationOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                finish();
            }
        });

        mRefreshLayout = (RefreshLayout)findViewById(R.id.refreshLayout);
        mRefreshHeader = (BezierRadarHeader) findViewById(R.id.header);
        if (isFirstEnter) {
            isFirstEnter = false;
            mRefreshLayout.autoRefresh();//第一次进入触发自动刷新,演示效果
        }

        View view = findViewById(R.id.recyclerView);
        if (view instanceof RecyclerView) {
            RecyclerView recyclerView = (RecyclerView) view;
            recyclerView.setLayoutManager(new LinearLayoutManager(this));
            recyclerView.addItemDecoration(new DividerItemDecoration(this, VERTICAL));
            recyclerView.setItemAnimator(new DefaultItemAnimator());
            recyclerView.setAdapter(new BaseRecyclerAdapter<Item>(Arrays.asList(Item.values()), simple_list_item_2,this) {
                @Override
                protected void onBindViewHolder(SmartViewHolder holder, Item model, int position) {
                    holder.text(android.R.id.text1, model.name());
                    holder.text(android.R.id.text2, model.name);
                    holder.textColorId(android.R.id.text2, R.color.colorTextAssistant);
                }
            });
        }
    }

    @Override
    public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
        switch (Item.values()[position]) {
            case 内容不偏移:
                mRefreshLayout.setEnableHeaderTranslationContent(false);
                break;
            case 内容跟随偏移:
                mRefreshLayout.setEnableHeaderTranslationContent(true);
                break;
            case 蓝色主题:
                setThemeColor(R.color.colorPrimary, R.color.colorPrimaryDark);
                break;
            case 绿色主题:
                setThemeColor(android.R.color.holo_green_light, android.R.color.holo_green_dark);
                break;
            case 红色主题:
                setThemeColor(android.R.color.holo_red_light, android.R.color.holo_red_dark);
                break;
            case 橙色主题:
                setThemeColor(android.R.color.holo_orange_light, android.R.color.holo_orange_dark);
                break;
            case 打开左右拖动:
                mRefreshHeader.setEnableHorizontalDrag(true);
                break;
            case 关闭左右拖动:
                mRefreshHeader.setEnableHorizontalDrag(false);
                break;
        }
        mRefreshLayout.autoRefresh();
    }

    private void setThemeColor(int colorPrimary, int colorPrimaryDark) {
        mToolbar.setBackgroundResource(colorPrimary);
        mRefreshLayout.setPrimaryColorsId(colorPrimary, android.R.color.white);
        if (Build.VERSION.SDK_INT >= 21) {
            getWindow().setStatusBarColor(ContextCompat.getColor(this, colorPrimaryDark));
        }
    }


}


================================================
FILE: app/src/main/java/com/scwang/refreshlayout/activity/style/CircleStyleActivity.java
================================================
package com.scwang.refreshlayout.activity.style;

import android.os.Build;
import android.os.Bundle;
import android.support.v4.content.ContextCompat;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.DefaultItemAnimator;
import android.support.v7.widget.DividerItemDecoration;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.support.v7.widget.Toolbar;
import android.view.View;
import android.widget.AdapterView;

import com.scwang.refreshlayout.R;
import com.scwang.refreshlayout.adapter.BaseRecyclerAdapter;
import com.scwang.refreshlayout.adapter.SmartViewHolder;
import com.scwang.smartrefresh.layout.api.RefreshLayout;

import java.util.Arrays;

import static android.R.layout.simple_list_item_2;
import static android.support.v7.widget.DividerItemDecoration.VERTICAL;

public class CircleStyleActivity extends AppCompatActivity implements AdapterView.OnItemClickListener {

    private enum Item {
        内容不偏移("下拉的时候列表内容停留在原位不动"),
        内容跟随偏移("下拉的时候列表内容跟随向下偏移"),
        橙色主题("更改为橙色主题颜色"),
        红色主题("更改为红色主题颜色"),
        绿色主题("更改为绿色主题颜色"),
        蓝色主题("更改为蓝色主题颜色"),
        ;
        public String name;
        Item(String name) {
            this.name = name;
        }
    }

    private Toolbar mToolbar;
    private RefreshLayout mRefreshLayout;
    private static boolean isFirstEnter = true;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_style_circle);

        mToolbar = (Toolbar)findViewById(R.id.toolbar);
        mToolbar.setNavigationOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                finish();
            }
        });

        mRefreshLayout = (RefreshLayout)findViewById(R.id.refreshLayout);
        if (isFirstEnter) {
            isFirstEnter = false;
            mRefreshLayout.autoRefresh();//第一次进入触发自动刷新,演示效果
        }

        View view = findViewById(R.id.recyclerView);
        if (view instanceof RecyclerView) {
            RecyclerView recyclerView = (RecyclerView) view;
            recyclerView.setLayoutManager(new LinearLayoutManager(this));
            recyclerView.addItemDecoration(new DividerItemDecoration(this, VERTICAL));
            recyclerView.setItemAnimator(new DefaultItemAnimator());
            recyclerView.setAdapter(new BaseRecyclerAdapter<Item>(Arrays.asList(Item.values()), simple_list_item_2,this) {
                @Override
                protected void onBindViewHolder(SmartViewHolder holder, Item model, int position) {
                    holder.text(android.R.id.text1, model.name());
                    holder.text(android.R.id.text2, model.name);
                    holder.textColorId(android.R.id.text2, R.color.colorTextAssistant);
                }
            });
        }
    }

    @Override
    public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
        switch (Item.values()[position]) {
            case 内容不偏移:
                mRefreshLayout.setEnableHeaderTranslationContent(false);
                break;
            case 内容跟随偏移:
                mRefreshLayout.setEnableHeaderTranslationContent(true);
                break;
            case 蓝色主题:
                setThemeColor(R.color.colorPrimary, R.color.colorPrimaryDark);
                break;
            case 绿色主题:
                setThemeColor(android.R.color.holo_green_light, android.R.color.holo_green_dark);
                break;
            case 红色主题:
                setThemeColor(android.R.color.holo_red_light, android.R.color.holo_red_dark);
                break;
            case 橙色主题:
                setThemeColor(android.R.color.holo_orange_light, android.R.color.holo_orange_dark);
                break;
        }
        mRefreshLayout.autoRefresh();
    }

    private void setThemeColor(int colorPrimary, int colorPrimaryDark) {
        mToolbar.setBackgroundResource(colorPrimary);
        mRefreshLayout.setPrimaryColorsId(colorPrimary, android.R.color.white);
        if (Build.VERSION.SDK_INT >= 21) {
            getWindow().setStatusBarColor(ContextCompat.getColor(this, colorPrimaryDark));
        }
    }


}


================================================
FILE: app/src/main/java/com/scwang/refreshlayout/activity/style/ClassicsStyleActivity.java
================================================
package com.scwang.refreshlayout.activity.style;

import android.graphics.drawable.Drawable;
import android.graphics.drawable.LayerDrawable;
import android.os.Build;
import android.os.Bundle;
import android.support.graphics.drawable.VectorDrawableCompat;
import android.support.v4.content.ContextCompat;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.DefaultItemAnimator;
import android.support.v7.widget.DividerItemDecoration;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.support.v7.widget.Toolbar;
import android.view.View;
import android.widget.AdapterView;

import com.scwang.refreshlayout.R;
import com.scwang.refreshlayout.adapter.BaseRecyclerAdapter;
import com.scwang.refreshlayout.adapter.SmartViewHolder;
import com.scwang.refreshlayout.util.DynamicTimeFormat;
import com.scwang.smartrefresh.layout.api.RefreshLayout;
import com.scwang.smartrefresh.layout.constant.SpinnerStyle;
import com.scwang.smartrefresh.layout.header.ClassicsHeader;

import java.text.SimpleDateFormat;
import java.util.Arrays;
import java.util.Date;
import java.util.Locale;
import java.util.Random;

import static android.R.layout.simple_list_item_2;
import static android.support.v7.widget.DividerItemDecoration.VERTICAL;

public class ClassicsStyleActivity extends AppCompatActivity implements AdapterView.OnItemClickListener {

    private BaseRecyclerAdapter<Item> mAdpater;

    private enum Item {
        尺寸拉伸("下拉的时候Header的高度跟随变大"),
        位置平移("下拉的时候Header的位置向下偏移"),
        背后固定("下拉的时候Header固定在背后"),
        显示时间("开启显示上次更新功能"),
        隐藏时间("关闭显示上次更新功能"),
        默认主题("更改为默认主题颜色"),
        橙色主题("更改为橙色主题颜色"),
        红色主题("更改为红色主题颜色"),
        绿色主题("更改为绿色主题颜色"),
        蓝色主题("更改为蓝色主题颜色"),
        加载更多("上啦加载更多"),
        ;
        public String name;
        Item(String name) {
            this.name = name;
        }
    }

    private Toolbar mToolbar;
    private RecyclerView mRecyclerView;
    private RefreshLayout mRefreshLayout;
    private ClassicsHeader mClassicsHeader;
    private Drawable mDrawableProgress;
    private static boolean isFirstEnter = true;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_style_classics);

        mToolbar = (Toolbar)findViewById(R.id.toolbar);
        mToolbar.setNavigationOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                finish();
            }
        });

        mRefreshLayout = (RefreshLayout)findViewById(R.id.refreshLayout);

        int deta = new Random().nextInt(7 * 24 * 60 * 60 * 1000);
        mClassicsHeader = (ClassicsHeader)mRefreshLayout.getRefreshHeader();
        mClassicsHeader.setLastUpdateTime(new Date(System.currentTimeMillis()-deta));
        mClassicsHeader.setTimeFormat(new SimpleDateFormat("更新于 MM-dd HH:mm", Locale.CHINA));
        mClassicsHeader.setTimeFormat(new DynamicTimeFormat("更新于 %s"));

        mDrawableProgress = mClassicsHeader.getProgressView().getDrawable();
        if (mDrawableProgress instanceof LayerDrawable) {
            mDrawableProgress = ((LayerDrawable) mDrawableProgress).getDrawable(0);
        }

        View view = findViewById(R.id.recyclerView);
        if (view instanceof RecyclerView) {
            RecyclerView recyclerView = (RecyclerView) view;
            recyclerView.setLayoutManager(new LinearLayoutManager(this));
            recyclerView.addItemDecoration(new DividerItemDecoration(this, VERTICAL));
            recyclerView.setItemAnimator(new DefaultItemAnimator());
            recyclerView.setAdapter(mAdpater = new BaseRecyclerAdapter<Item>(Arrays.asList(Item.values()), simple_list_item_2,this) {
                @Override
                protected void onBindViewHolder(SmartViewHolder holder, Item model, int position) {
                    holder.text(android.R.id.text1, model.name());
                    holder.text(android.R.id.text2, model.name);
                    holder.textColorId(android.R.id.text2, R.color.colorTextAssistant);
                }
            });
            mRecyclerView = recyclerView;
        }

        if (isFirstEnter) {
            isFirstEnter = false;
            //触发自动刷新
            mRefreshLayout.autoRefresh();
        }

    }

    @Override
    public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
        switch (Item.values()[position]) {
            case 背后固定:
                mClassicsHeader.setSpinnerStyle(SpinnerStyle.FixedBehind);
                mRefreshLayout.setPrimaryColors(0xff444444, 0xffffffff);
                if (Build.VERSION.SDK_INT >= 21) {
                    mDrawableProgress.setTint(0xffffffff);
                } else if (mDrawableProgress instanceof VectorDrawableCompat) {
                    ((VectorDrawableCompat) mDrawableProgress).setTint(0xffffffff);
                }
                /*
                 * 由于是后面才设置,需要手动更改视图的位置
                 * 如果在 onCreate 或者 xml 中设置好[SpinnerStyle] 就不用手动调整位置了
                 */
                mRefreshLayout.getLayout().bringChildToFront(mRecyclerView);
                break;
            case 尺寸拉伸:
                mClassicsHeader.setSpinnerStyle(SpinnerStyle.Scale);
                break;
            case 位置平移:
                mClassicsHeader.setSpinnerStyle(SpinnerStyle.Translate);
                break;
            case 显示时间:
                mClassicsHeader.setEnableLastTime(true);
                break;
            case 隐藏时间:
                mClassicsHeader.setEnableLastTime(false);
                break;
            case 默认主题:
                setThemeColor(R.color.colorPrimary, R.color.colorPrimaryDark);
                mRefreshLayout.getLayout().setBackgroundResource(android.R.color.transparent);
                mRefreshLayout.setPrimaryColors(0, 0xff666666);
                if (Build.VERSION.SDK_INT >= 21) {
                    mDrawableProgress.setTint(0xff666666);
                } else if (mDrawableProgress instanceof VectorDrawableCompat) {
                    ((VectorDrawableCompat) mDrawableProgress).setTint(0xff666666);
                }
                break;
            case 蓝色主题:
                setThemeColor(R.color.colorPrimary, R.color.colorPrimaryDark);
                break;
            case 绿色主题:
                setThemeColor(android.R.color.holo_green_light, android.R.color.holo_green_dark);
                break;
            case 红色主题:
                setThemeColor(android.R.color.holo_red_light, android.R.color.holo_red_dark);
                break;
            case 橙色主题:
                setThemeColor(android.R.color.holo_orange_light, android.R.color.holo_orange_dark);
                break;
            case 加载更多:
                mRefreshLayout.autoLoadmore();
                return;
        }
        mRefreshLayout.autoRefresh();
    }

    private void setThemeColor(int colorPrimary, int colorPrimaryDark) {
        mToolbar.setBackgroundResource(colorPrimary);
        mRefreshLayout.setPrimaryColorsId(colorPrimary, android.R.color.white);
        if (Build.VERSION.SDK_INT >= 21) {
            getWindow().setStatusBarColor(ContextCompat.getColor(this, colorPrimaryDark));
            mDrawableProgress.setTint(0xffffffff);
        } else if (mDrawableProgress instanceof VectorDrawableCompat) {
            ((VectorDrawableCompat) mDrawableProgress).setTint(0xffffffff);
        }
    }


}


================================================
FILE: app/src/main/java/com/scwang/refreshlayout/activity/style/DeliveryStyleActivity.java
================================================
package com.scwang.refreshlayout.activity.style;

import android.os.Build;
import android.os.Bundle;
import android.support.v4.content.ContextCompat;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.DefaultItemAnimator;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.support.v7.widget.Toolbar;
import android.view.View;
import android.view.Window;
import android.widget.AdapterView;

import com.scwang.refreshlayout.R;
import com.scwang.refreshlayout.adapter.BaseRecyclerAdapter;
import com.scwang.refreshlayout.adapter.SmartViewHolder;
import com.scwang.smartrefresh.layout.api.RefreshLayout;

import java.util.Arrays;

import static com.scwang.refreshlayout.R.layout.listitem_style_delivery;

public class DeliveryStyleActivity extends AppCompatActivity implements AdapterView.OnItemClickListener {

    private enum Item {
        默认主题("更改为默认主题颜色"),
        橙色主题("更改为橙色主题颜色"),
        红色主题("更改为红色主题颜色"),
        绿色主题("更改为绿色主题颜色"),
        蓝色主题("更改为蓝色主题颜色"),
        ;
        public String name;
        Item(String name) {
            this.name = name;
        }
    }

    private Toolbar mToolbar;
    private RefreshLayout mRefreshLayout;
    private static boolean isFirstEnter = true;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_style_delivery);
        if (Build.VERSION.SDK_INT >= 21) {
            getWindow().setStatusBarColor(0xfff0f0f0);
        }
        if (Build.VERSION.SDK_INT >= 23) {
            Window window = getWindow();
            int systemUiVisibility = window.getDecorView().getSystemUiVisibility();
            systemUiVisibility |= View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR;
            window.getDecorView().setSystemUiVisibility(systemUiVisibility);
        }

        mToolbar = (Toolbar)findViewById(R.id.toolbar);
        mToolbar.setNavigationOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                finish();
            }
        });

        mRefreshLayout = (RefreshLayout)findViewById(R.id.refreshLayout);
        if (isFirstEnter) {
            isFirstEnter = false;
            mRefreshLayout.autoRefresh();//第一次进入触发自动刷新,演示效果
        }

        View view = findViewById(R.id.recyclerView);
        if (view instanceof RecyclerView) {
            RecyclerView recyclerView = (RecyclerView) view;
            recyclerView.setLayoutManager(new LinearLayoutManager(this));
            recyclerView.setItemAnimator(new DefaultItemAnimator());
            recyclerView.setAdapter(new BaseRecyclerAdapter<Item>(Arrays.asList(Item.values()), listitem_style_delivery,this) {
                @Override
                protected void onBindViewHolder(SmartViewHolder holder, Item model, int position) {
                }
            });
        }
    }

    @Override
    public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
        switch (Item.values()[position]) {
            case 默认主题:
                mToolbar.setBackgroundResource(android.R.color.white);
                mToolbar.setTitleTextColor(0xffbbbbbb);
                mToolbar.setNavigationIcon(R.drawable.ic_arrow_back_gray_24dp);
                mRefreshLayout.setPrimaryColors(0xfff0f0f0, 0xffffffff);
                if (Build.VERSION.SDK_INT >= 21) {
                    getWindow().setStatusBarColor(0xfff0f0f0);
                }
                if (Build.VERSION.SDK_INT >= 23) {
                    Window window = getWindow();
                    int systemUiVisibility = window.getDecorView().getSystemUiVisibility();
                    systemUiVisibility |= View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR;
                    window.getDecorView().setSystemUiVisibility(systemUiVisibility);
                }
                break;
            case 蓝色主题:
                setThemeColor(R.color.colorPrimary, R.color.colorPrimaryDark);
                break;
            case 绿色主题:
                setThemeColor(android.R.color.holo_green_light, android.R.color.holo_green_dark);
                break;
            case 红色主题:
                setThemeColor(android.R.color.holo_red_light, android.R.color.holo_red_dark);
                break;
            case 橙色主题:
                setThemeColor(android.R.color.holo_orange_light, android.R.color.holo_orange_dark);
                break;
        }
        mRefreshLayout.autoRefresh();
    }

    private void setThemeColor(int colorPrimary, int colorPrimaryDark) {
        mToolbar.setBackgroundResource(colorPrimary);
        mToolbar.setTitleTextColor(ContextCompat.getColor(this, android.R.color.white));
        mToolbar.setNavigationIcon(R.drawable.ic_arrow_back_white_24dp);
        mRefreshLayout.setPrimaryColorsId(colorPrimary, android.R.color.white);
        if (Build.VERSION.SDK_INT >= 21) {
            getWindow().setStatusBarColor(ContextCompat.getColor(this, colorPrimaryDark));
        }
        if (Build.VERSION.SDK_INT >= 23) {
            Window window = getWindow();
            int systemUiVisibility = window.getDecorView().getSystemUiVisibility();
            systemUiVisibility &= ~View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR;
            window.getDecorView().setSystemUiVisibility(systemUiVisibility);
        }
    }
}


================================================
FILE: app/src/main/java/com/scwang/refreshlayout/activity/style/DropboxStyleActivity.java
================================================
package com.scwang.refreshlayout.activity.style;

import android.os.Build;
import android.os.Bundle;
import android.support.v4.content.ContextCompat;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.DefaultItemAnimator;
import android.support.v7.widget.DividerItemDecoration;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.support.v7.widget.Toolbar;
import android.view.View;
import android.widget.AdapterView;

import com.scwang.refreshlayout.R;
import com.scwang.refreshlayout.adapter.BaseRecyclerAdapter;
import com.scwang.refreshlayout.adapter.SmartViewHolder;
import com.scwang.smartrefresh.layout.api.RefreshLayout;

import java.util.Arrays;

import static android.R.layout.simple_list_item_2;
import static android.support.v7.widget.DividerItemDecoration.VERTICAL;

public class DropboxStyleActivity extends AppCompatActivity implements AdapterView.OnItemClickListener {

    private enum Item {
        默认主题("更改为默认主题颜色"),
        橙色主题("更改为橙色主题颜色"),
        红色主题("更改为红色主题颜色"),
        绿色主题("更改为绿色主题颜色"),
        蓝色主题("更改为蓝色主题颜色"),
        ;
        public String name;
        Item(String name) {
            this.name = name;
        }
    }

    private Toolbar mToolbar;
    private RefreshLayout mRefreshLayout;
    private static boolean isFirstEnter = true;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_style_dropbox);

        mToolbar = (Toolbar)findViewById(R.id.toolbar);
        mToolbar.setNavigationOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                finish();
            }
        });

        mRefreshLayout = (RefreshLayout)findViewById(R.id.refreshLayout);
        if (isFirstEnter) {
            isFirstEnter = false;
            mRefreshLayout.autoRefresh();//第一次进入触发自动刷新,演示效果
        }

        View view = findViewById(R.id.recyclerView);
        if (view instanceof RecyclerView) {
            RecyclerView recyclerView = (RecyclerView) view;
            recyclerView.setLayoutManager(new LinearLayoutManager(this));
            recyclerView.addItemDecoration(new DividerItemDecoration(this, VERTICAL));
            recyclerView.setItemAnimator(new DefaultItemAnimator());
            recyclerView.setAdapter(new BaseRecyclerAdapter<Item>(Arrays.asList(Item.values()), simple_list_item_2,this) {
                @Override
                protected void onBindViewHolder(SmartViewHolder holder, Item model, int position) {
                    holder.text(android.R.id.text1, model.name());
                    holder.text(android.R.id.text2, model.name);
                    holder.textColorId(android.R.id.text2, R.color.colorTextAssistant);
                }
            });
        }
    }

    @Override
    public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
        switch (Item.values()[position]) {
            case 默认主题:
                setThemeColor(R.color.colorPrimary, R.color.colorPrimaryDark);
                mRefreshLayout.setPrimaryColors(0xff283645, 0xff6ea9ff);
                break;
            case 蓝色主题:
                setThemeColor(R.color.colorPrimary, R.color.colorPrimaryDark);
                break;
            case 绿色主题:
                setThemeColor(android.R.color.holo_green_light, android.R.color.holo_green_dark);
                break;
            case 红色主题:
                setThemeColor(android.R.color.holo_red_light, android.R.color.holo_red_dark);
                break;
            case 橙色主题:
                setThemeColor(android.R.color.holo_orange_light, android.R.color.holo_orange_dark);
                break;
        }
        mRefreshLayout.autoRefresh();
    }

    private void setThemeColor(int colorPrimary, int colorPrimaryDark) {
        mToolbar.setBackgroundResource(colorPrimary);
        mRefreshLayout.setPrimaryColorsId(colorPrimary, android.R.color.white);
        if (Build.VERSION.SDK_INT >= 21) {
            getWindow().setStatusBarColor(ContextCompat.getColor(this, colorPrimaryDark));
        }
    }


}


================================================
FILE: app/src/main/java/com/scwang/refreshlayout/activity/style/FlyRefreshStyleActivity.java
================================================
package com.scwang.refreshlayout.activity.style;

import android.animation.Animator;
import android.animation.AnimatorListenerAdapter;
import android.animation.AnimatorSet;
import android.animation.ObjectAnimator;
import android.animation.ValueAnimator;
import android.content.Context;
import android.content.res.ColorStateList;
import android.graphics.Color;
import android.graphics.drawable.ShapeDrawable;
import android.graphics.drawable.shapes.OvalShape;
import android.os.Bundle;
import android.support.design.widget.AppBarLayout;
import android.support.design.widget.CollapsingToolbarLayout;
import android.support.design.widget.FloatingActionButton;
import android.support.v4.content.ContextCompat;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.support.v7.widget.Toolbar;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.view.animation.AccelerateInterpolator;
import android.view.animation.DecelerateInterpolator;
import android.view.animation.Interpolator;
import android.view.animation.OvershootInterpolator;
import android.widget.ImageView;
import android.widget.TextView;

import com.scwang.refreshlayout.R;
import com.scwang.refreshlayout.util.StatusBarUtil;
import com.scwang.smartrefresh.header.FlyRefreshHeader;
import com.scwang.smartrefresh.header.flyrefresh.FlyView;
import com.scwang.smartrefresh.header.flyrefresh.MountanScenceView;
import com.scwang.smartrefresh.layout.api.RefreshHeader;
import com.scwang.smartrefresh.layout.api.RefreshLayout;
import com.scwang.smartrefresh.layout.listener.OnRefreshListener;
import com.scwang.smartrefresh.layout.listener.SimpleMultiPurposeListener;
import com.scwang.smartrefresh.layout.util.DensityUtil;

import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.Locale;

import jp.wasabeef.recyclerview.animators.BaseItemAnimator;

public class FlyRefreshStyleActivity extends AppCompatActivity {

    private RecyclerView mListView;
    private RefreshLayout mRefreshlayout;

    private ItemAdapter mAdapter;

    private FlyView mFlyView;
    private ArrayList<ItemData> mDataSet = new ArrayList<>();
        private LinearLayoutManager mLayoutManager;
    private MountanScenceView mScenceView;
    private FlyRefreshHeader mFlyRefreshHeader;
    private CollapsingToolbarLayout mToolbarLayout;
    private FloatingActionButton mActionButton;
    private View.OnClickListener mThemeListener;
    private static boolean isFirstEnter = true;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_fly_refresh);
        final Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
        setSupportActionBar(toolbar);
        toolbar.setNavigationOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                finish();
            }
        });

        /************************************************************
         * 关键代码-开始
         ************************************************************/

        mFlyView = (FlyView) findViewById(R.id.flyview);
        mScenceView = (MountanScenceView) findViewById(R.id.mountan);
        mFlyRefreshHeader = (FlyRefreshHeader)findViewById(R.id.flyrefresh);
        mFlyRefreshHeader.setUp(mScenceView, mFlyView);//绑定场景和纸飞机
        mRefreshlayout = (RefreshLayout) findViewById(R.id.refreshLayout);
        mRefreshlayout.setReboundInterpolator(new ElasticOutInterpolator());//设置回弹插值器,会带有弹簧震动效果
        mRefreshlayout.setReboundDuration(800);//设置回弹动画时长
        mRefreshlayout.setOnRefreshListener(new OnRefreshListener() {
            @Override
            public void onRefresh(RefreshLayout refreshlayout) {
                View child = mListView.getChildAt(0);
                if (child != null) {
                    //开始刷新的时候个第一个item设置动画效果
                    bounceAnimateView(child.findViewById(R.id.icon));
                }
                updateTheme();//改变主题颜色
                mRefreshlayout.getLayout().postDelayed(new Runnable() {
                    @Override
                    public void run() {
                        //通知刷新完成,这里改为通知Header,让纸飞机飞回来
                        mFlyRefreshHeader.finishRefresh(new AnimatorListenerAdapter() {
                            public void onAnimationEnd(Animator animation) {
                                addItemData();//在纸飞机回到原位之后添加数据效果更真实
                            }
                        });
                    }
                }, 2000);//模拟两秒的后台数据加载
            }
        });
        //设置 让 AppBarLayout 和 RefreshLayout 的滚动同步 并不保持 toolbar 位置不变
        final AppBarLayout appBar = (AppBarLayout) findViewById(R.id.app_bar);
        mRefreshlayout.setOnMultiPurposeListener(new SimpleMultiPurposeListener() {
            @Override
            public void onHeaderPulling(RefreshHeader header, float percent, int offset, int footerHeight, int extendHeight) {
                appBar.setTranslationY(offset);
                toolbar.setTranslationY(-offset);
            }
            @Override
            public void onHeaderReleasing(RefreshHeader header, float percent, int offset, int footerHeight, int extendHeight) {
                appBar.setTranslationY(offset);
                toolbar.setTranslationY(-offset);
            }
        });
        /************************************************************
         * 关键代码-结束
         ************************************************************/

        if (isFirstEnter) {
            isFirstEnter = false;
            mRefreshlayout.autoRefresh();//第一次进入触发自动刷新,演示效果
        }

        /**
         * 初始化列表数据
         */
        initDataSet();
        mAdapter = new ItemAdapter(this);
        mLayoutManager = new LinearLayoutManager(this);
        mListView = (RecyclerView) findViewById(R.id.recyclerView);
        mListView.setLayoutManager(mLayoutManager);
        mListView.setAdapter(mAdapter);
        mListView.setItemAnimator(new SampleItemAnimator());
        mToolbarLayout = (CollapsingToolbarLayout) findViewById(R.id.toolbar_layout);
        mActionButton = (FloatingActionButton) findViewById(R.id.fab);
        /**
         * 设置点击 ActionButton 时候触发自动刷新 并改变主题颜色
         */
        mActionButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                updateTheme();
                mRefreshlayout.autoRefresh();
            }
        });
        /**
         * 监听 AppBarLayout 的关闭和开启 给 FlyView(纸飞机) 和 ActionButton 设置关闭隐藏动画
         */
        appBar.addOnOffsetChangedListener(new AppBarLayout.OnOffsetChangedListener() {
            boolean misAppbarExpand = true;
            @Override
            public void onOffsetChanged(AppBarLayout appBarLayout, int verticalOffset) {
                int scrollRange = appBarLayout.getTotalScrollRange();
                float fraction = 1f * (scrollRange + verticalOffset) / scrollRange;
                if (fraction < 0.1 && misAppbarExpand) {
                    misAppbarExpand = false;
                    mActionButton.animate().scaleX(0).scaleY(0);
                    mFlyView.animate().scaleX(0).scaleY(0);
                    ValueAnimator animator = ValueAnimator.ofInt(mListView.getPaddingTop(), 0);
                    animator.setDuration(300);
                    animator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
                        @Override
                        public void onAnimationUpdate(ValueAnimator animation) {
                            mListView.setPadding(0, (int) animation.getAnimatedValue(), 0, 0);
                        }
                    });
                    animator.start();
                }
                if (fraction > 0.8 && !misAppbarExpand) {
                    misAppbarExpand = true;
                    mActionButton.animate().scaleX(1).scaleY(1);
                    mFlyView.animate().scaleX(1).scaleY(1);
                    ValueAnimator animator = ValueAnimator.ofInt(mListView.getPaddingTop(), DensityUtil.dp2px(25));
                    animator.setDuration(300);
                    animator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
                        @Override
                        public void onAnimationUpdate(ValueAnimator animation) {
                            mListView.setPadding(0, (int) animation.getAnimatedValue(), 0, 0);
                        }
                    });
                    animator.start();
                }
            }
        });


        //状态栏透明和间距处理
        StatusBarUtil.immersive(this);
        StatusBarUtil.setPaddingSmart(this, toolbar);
//        StatusBarUtil.setPaddingSmart(this, findViewById(R.id.profile));
//        StatusBarUtil.setPaddingSmart(this, findViewById(R.id.blurview));
    }

    private void updateTheme() {
        if (mThemeListener == null) {
            mThemeListener = new View.OnClickListener() {
                int index = 0;
                int[] ids = new int[]{
                        R.color.colorPrimary,
                        android.R.color.holo_green_light,
                        android.R.color.holo_red_light,
                        android.R.color.holo_orange_light,
                        android.R.color.holo_blue_bright,
                };
                @Override
                public void onClick(View v) {
                    int color = ContextCompat.getColor(getApplication(), ids[index % ids.length]);
                    mRefreshlayout.setPrimaryColors(color);
                    mActionButton.setBackgroundColor(color);
                    mActionButton.setBackgroundTintList(ColorStateList.valueOf(color));
                    mToolbarLayout.setContentScrimColor(color);
                    index++;
                }
            };
        }
        mThemeListener.onClick(null);
    }

    private void initDataSet() {
        mDataSet.add(new ItemData(Color.parseColor("#76A9FC"), R.drawable.ic_fly_refresh_poll, "Meeting Minutes", new Date(2014 - 1900, 2, 9)));
        mDataSet.add(new ItemData(Color.GRAY, R.drawable.ic_fly_refresh_folder, "Favorites Photos", new Date(2014 - 1900, 1, 3)));
        mDataSet.add(new ItemData(Color.GRAY, R.drawable.ic_fly_refresh_folder, "Photos", new Date(2014 - 1900, 0, 9)));
    }

    private void addItemData() {
        ItemData itemData = new ItemData(Color.parseColor("#FFC970"), R.drawable.ic_fly_refresh_smartphone, "Magic Cube Show", new Date());
        mDataSet.add(0, itemData);
        mAdapter.notifyItemInserted(0);
        mLayoutManager.scrollToPosition(0);
    }

    private void bounceAnimateView(final View view) {
        if (view == null) {
            return;
        }

        ValueAnimator swing = ValueAnimator.ofFloat(0, 60, -40, 0);
        swing.setDuration(400);
        swing.setInterpolator(new AccelerateInterpolator());
        swing.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
            @Override
            public void onAnimationUpdate(ValueAnimator animation) {
                view.setRotationX((float)animation.getAnimatedValue());
            }
        });
        swing.start();
    }

    private class ItemAdapter extends RecyclerView.Adapter<ItemViewHolder> {

        private LayoutInflater mInflater;
        private DateFormat dateFormat;

        public ItemAdapter(Context context) {
            mInflater = LayoutInflater.from(context);
            dateFormat = SimpleDateFormat.getDateInstance(DateFormat.DEFAULT, Locale.ENGLISH);
        }

        @Override
        public ItemViewHolder onCreateViewHolder(ViewGroup viewGroup, int i) {
            View view = mInflater.inflate(R.layout.activity_fly_refresh_item, viewGroup, false);
            return new ItemViewHolder(view);
        }

        @Override
        public void onBindViewHolder(ItemViewHolder itemViewHolder, int i) {
            final ItemData data = mDataSet.get(i);
            ShapeDrawable drawable = new ShapeDrawable(new OvalShape());
            drawable.getPaint().setColor(data.color);
            itemViewHolder.icon.setBackgroundDrawable(drawable);
            itemViewHolder.icon.setImageResource(data.icon);
            itemViewHolder.title.setText(data.title);
            itemViewHolder.subTitle.setText(dateFormat.format(data.time));
        }

        @Override
        public int getItemCount() {
            return mDataSet.size();
        }
    }

    private static class ItemViewHolder extends RecyclerView.ViewHolder {

        ImageView icon;
        TextView title;
        TextView subTitle;

        public ItemViewHolder(View itemView) {
            super(itemView);
            icon = (ImageView) itemView.findViewById(R.id.icon);
            title = (TextView) itemView.findViewById(R.id.title);
            subTitle = (TextView) itemView.findViewById(R.id.subtitle);
        }

    }

    public class ItemData {
        int color;
        public int icon;
        public String title;
        public Date time;

        public ItemData(int color, int icon, String title, Date time) {
            this.color = color;
            this.icon = icon;
            this.title = title;
            this.time = time;
        }

        public ItemData(int icon, String title) {
            this(Color.DKGRAY, icon, title, new Date());
        }
    }

    public class SampleItemAnimator extends BaseItemAnimator {

        @Override
        protected void preAnimateAddImpl(RecyclerView.ViewHolder holder) {
            View icon = holder.itemView.findViewById(R.id.icon);
            icon.setRotationX(30);
            View right = holder.itemView.findViewById(R.id.right);
            right.setPivotX(0);
            right.setPivotY(0);
            right.setRotationY(90);
        }

        @Override
        protected void animateRemoveImpl(RecyclerView.ViewHolder viewHolder) {
        }

        @Override
        protected void animateAddImpl(final RecyclerView.ViewHolder holder) {
            View target = holder.itemView;
            View icon = target.findViewById(R.id.icon);
            Animator swing = ObjectAnimator.ofFloat(icon, "rotationX", 45, 0);
            swing.setInterpolator(new OvershootInterpolator(5));

            View right = holder.itemView.findViewById(R.id.right);
            Animator rotateIn = ObjectAnimator.ofFloat(right, "rotationY", 90, 0);
            rotateIn.setInterpolator(new DecelerateInterpolator());

            AnimatorSet animator = new AnimatorSet();
            animator.setDuration(getAddDuration());
            animator.playTogether(swing, rotateIn);

            animator.start();
        }

    }

    public class ElasticOutInterpolator implements Interpolator {

        @Override
        public float getInterpolation(float t) {
            if (t == 0) return 0;
            if (t >= 1) return 1;
            float p=.3f;
            float s=p/4;
            return ((float)Math.pow(2,-10*t) * (float)Math.sin( (t-s)*(2*(float)Math.PI)/p) + 1);
        }
    }

}


================================================
FILE: app/src/main/java/com/scwang/refreshlayout/activity/style/FunGameBattleCityStyleActivity.java
================================================
package com.scwang.refreshlayout.activity.style;

import android.os.Build;
import android.os.Bundle;
import android.support.v4.content.ContextCompat;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.DefaultItemAnimator;
import android.support.v7.widget.DividerItemDecoration;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.support.v7.widget.Toolbar;
import android.view.View;
import android.widget.AdapterView;

import com.scwang.refreshlayout.R;
import com.scwang.refreshlayout.adapter.BaseRecyclerAdapter;
import com.scwang.refreshlayout.adapter.SmartViewHolder;
import com.scwang.smartrefresh.layout.api.RefreshLayout;

import java.util.Arrays;

import static android.R.layout.simple_list_item_2;
import static android.support.v7.widget.DividerItemDecoration.VERTICAL;

public class FunGameBattleCityStyleActivity extends AppCompatActivity implements AdapterView.OnItemClickListener {

    private enum Item {
        默认主题("更改为橙色默认颜色"),
        橙色主题("更改为橙色主题颜色"),
        红色主题("更改为红色主题颜色"),
        绿色主题("更改为绿色主题颜色"),
        蓝色主题("更改为蓝色主题颜色"),
        ;
        public String name;
        Item(String name) {
            this.name = name;
        }
    }

    private Toolbar mToolbar;
    private RefreshLayout mRefreshLayout;
    private static boolean isFirstEnter = true;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_style_fungame_battlecity);

        mToolbar = (Toolbar)findViewById(R.id.toolbar);
        mToolbar.setNavigationOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                finish();
            }
        });

        mRefreshLayout = (RefreshLayout)findViewById(R.id.refreshLayout);
        if (isFirstEnter) {
            isFirstEnter = false;
            mRefreshLayout.autoRefresh();//第一次进入触发自动刷新,演示效果
        }

        View view = findViewById(R.id.recyclerView);
        if (view instanceof RecyclerView) {
            RecyclerView recyclerView = (RecyclerView) view;
            recyclerView.setLayoutManager(new LinearLayoutManager(this));
            recyclerView.addItemDecoration(new DividerItemDecoration(this, VERTICAL));
            recyclerView.setItemAnimator(new DefaultItemAnimator());
            recyclerView.setAdapter(new BaseRecyclerAdapter<Item>(Arrays.asList(Item.values()), simple_list_item_2,this) {
                @Override
                protected void onBindViewHolder(SmartViewHolder holder, Item model, int position) {
                    holder.text(android.R.id.text1, model.name());
                    holder.text(android.R.id.text2, model.name);
                    holder.textColorId(android.R.id.text2, R.color.colorTextAssistant);
                }
            });
        }
    }

    @Override
    public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
        switch (Item.values()[position]) {
            case 默认主题:
                mRefreshLayout.setPrimaryColorsId(android.R.color.white, android.R.color.black);
                break;
            case 蓝色主题:
                setThemeColor(R.color.colorPrimary, R.color.colorPrimaryDark);
                break;
            case 绿色主题:
                setThemeColor(android.R.color.holo_green_light, android.R.color.holo_green_dark);
                break;
            case 红色主题:
                setThemeColor(android.R.color.holo_red_light, android.R.color.holo_red_dark);
                break;
            case 橙色主题:
                setThemeColor(android.R.color.holo_orange_light, android.R.color.holo_orange_dark);
                break;
        }
        mRefreshLayout.autoRefresh();
    }

    private void setThemeColor(int colorPrimary, int colorPrimaryDark) {
        mToolbar.setBackgroundResource(colorPrimary);
        mRefreshLayout.setPrimaryColorsId(colorPrimary, android.R.color.white);
        if (Build.VERSION.SDK_INT >= 21) {
            getWindow().setStatusBarColor(ContextCompat.getColor(this, colorPrimaryDark));
        }
    }


}


================================================
FILE: app/src/main/java/com/scwang/refreshlayout/activity/style/FunGameHitBlockStyleActivity.java
================================================
package com.scwang.refreshlayout.activity.style;

import android.os.Build;
import android.os.Bundle;
import android.support.v4.content.ContextCompat;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.DefaultItemAnimator;
import android.support.v7.widget.DividerItemDecoration;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.support.v7.widget.Toolbar;
import android.view.View;
import android.widget.AdapterView;

import com.scwang.refreshlayout.R;
import com.scwang.refreshlayout.adapter.BaseRecyclerAdapter;
import com.scwang.refreshlayout.adapter.SmartViewHolder;
import com.scwang.smartrefresh.layout.api.RefreshLayout;

import java.util.Arrays;

import static android.R.layout.simple_list_item_2;
import static android.support.v7.widget.DividerItemDecoration.VERTICAL;

public class FunGameHitBlockStyleActivity extends AppCompatActivity implements AdapterView.OnItemClickListener {

    private enum Item {
        默认主题("更改为橙色默认颜色"),
        橙色主题("更改为橙色主题颜色"),
        红色主题("更改为红色主题颜色"),
        绿色主题("更改为绿色主题颜色"),
        蓝色主题("更改为蓝色主题颜色"),
        ;
        public String name;
        Item(String name) {
            this.name = name;
        }
    }

    private Toolbar mToolbar;
    private RefreshLayout mRefreshLayout;
    private static boolean isFirstEnter = true;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_style_fungame_hitblock);

        mToolbar = (Toolbar)findViewById(R.id.toolbar);
        mToolbar.setNavigationOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                finish();
            }
        });

        mRefreshLayout = (RefreshLayout)findViewById(R.id.refreshLayout);
        if (isFirstEnter) {
            isFirstEnter = false;
            mRefreshLayout.autoRefresh();//第一次进入触发自动刷新,演示效果
        }

        View view = findViewById(R.id.recyclerView);
        if (view instanceof RecyclerView) {
            RecyclerView recyclerView = (RecyclerView) view;
            recyclerView.setLayoutManager(new LinearLayoutManager(this));
            recyclerView.addItemDecoration(new DividerItemDecoration(this, VERTICAL));
            recyclerView.setItemAnimator(new DefaultItemAnimator());
            recyclerView.setAdapter(new BaseRecyclerAdapter<Item>(Arrays.asList(Item.values()), simple_list_item_2,this) {
                @Override
                protected void onBindViewHolder(SmartViewHolder holder, Item model, int position) {
                    holder.text(android.R.id.text1, model.name());
                    holder.text(android.R.id.text2, model.name);
                    holder.textColorId(android.R.id.text2, R.color.colorTextAssistant);
                }
            });
        }

    }

    @Override
    public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
        switch (Item.values()[position]) {
            case 默认主题:
                mRefreshLayout.setPrimaryColorsId(android.R.color.white, android.R.color.black);
                break;
            case 蓝色主题:
                setThemeColor(R.color.colorPrimary, R.color.colorPrimaryDark);
                break;
            case 绿色主题:
                setThemeColor(android.R.color.holo_green_light, android.R.color.holo_green_dark);
                break;
            case 红色主题:
                setThemeColor(android.R.color.holo_red_light, android.R.color.holo_red_dark);
                break;
            case 橙色主题:
                setThemeColor(android.R.color.holo_orange_light, android.R.color.holo_orange_dark);
                break;
        }
        mRefreshLayout.autoRefresh();
    }

    private void setThemeColor(int colorPrimary, int colorPrimaryDark) {
        mToolbar.setBackgroundResource(colorPrimary);
        mRefreshLayout.setPrimaryColorsId(colorPrimary, android.R.color.white);
        if (Build.VERSION.SDK_INT >= 21) {
            getWindow().setStatusBarColor(ContextCompat.getColor(this, colorPrimaryDark));
        }
    }


}


================================================
FILE: app/src/main/java/com/scwang/refreshlayout/activity/style/MaterialStyleActivity.java
================================================
package com.scwang.refreshlayout.activity.style;

import android.os.Build;
import android.os.Bundle;
import android.support.v4.content.ContextCompat;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.DefaultItemAnimator;
import android.support.v7.widget.DividerItemDecoration;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.support.v7.widget.Toolbar;
import android.view.View;
import android.widget.AdapterView;

import com.scwang.refreshlayout.R;
import com.scwang.refreshlayout.adapter.BaseRecyclerAdapter;
import com.scwang.refreshlayout.adapter.SmartViewHolder;
import com.scwang.smartrefresh.header.MaterialHeader;
import com.scwang.smartrefresh.layout.api.RefreshLayout;

import java.util.Arrays;

import static android.R.layout.simple_list_item_2;
import static android.support.v7.widget.DividerItemDecoration.VERTICAL;

public class MaterialStyleActivity extends AppCompatActivity implements AdapterView.OnItemClickListener {



    private enum Item {
        内容不偏移("下拉的时候列表内容停留在原位不动"),
        内容跟随偏移("下拉的时候列表内容跟随向下偏移"),
        打开背景("下拉的时候绘制贝塞尔曲线背景"),
        关闭背景("下拉的时候不绘制贝塞尔曲线背景"),
        橙色主题("更改为橙色主题颜色"),
        红色主题("更改为红色主题颜色"),
        绿色主题("更改为绿色主题颜色"),
        蓝色主题("更改为蓝色主题颜色"),
        ;
        public String name;
        Item(String name) {
            this.name = name;
        }
    }

    private Toolbar mToolbar;
    private RefreshLayout mRefreshLayout;
    private MaterialHeader mMaterialHeader;
    private static boolean isFirstEnter = true;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_style_material);

        mToolbar = (Toolbar)findViewById(R.id.toolbar);
        mToolbar.setNavigationOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                finish();
            }
        });

        mRefreshLayout = (RefreshLayout)findViewById(R.id.refreshLayout);
        if (isFirstEnter) {
            isFirstEnter = false;
            mRefreshLayout.autoRefresh();//第一次进入触发自动刷新,演示效果
        }

        mMaterialHeader = (MaterialHeader)mRefreshLayout.getRefreshHeader();

        View view = findViewById(R.id.recyclerView);
        if (view instanceof RecyclerView) {
            RecyclerView recyclerView = (RecyclerView) view;
            recyclerView.setLayoutManager(new LinearLayoutManager(this));
            recyclerView.addItemDecoration(new DividerItemDecoration(this, VERTICAL));
            recyclerView.setItemAnimator(new DefaultItemAnimator());
            recyclerView.setAdapter(new BaseRecyclerAdapter<Item>(Arrays.asList(Item.values()), simple_list_item_2,this) {
                @Override
                protected void onBindViewHolder(SmartViewHolder holder, Item model, int position) {
                    holder.text(android.R.id.text1, model.name());
                    holder.text(android.R.id.text2, model.name);
                    holder.textColorId(android.R.id.text2, R.color.colorTextAssistant);
                }
            });
        }
    }

    @Override
    public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
        switch (Item.values()[position]) {
            case 内容不偏移:
                mRefreshLayout.setEnableHeaderTranslationContent(false);
                break;
            case 内容跟随偏移:
                mRefreshLayout.setEnableHeaderTranslationContent(true);
                break;
            case 打开背景:
                mMaterialHeader.setShowBezierWave(true);
                break;
            case 关闭背景:
                mMaterialHeader.setShowBezierWave(false);
                break;
            case 蓝色主题:
                setThemeColor(R.color.colorPrimary, R.color.colorPrimaryDark);
                break;
            case 绿色主题:
                setThemeColor(android.R.color.holo_green_light, android.R.color.holo_green_dark);
                break;
            case 红色主题:
                setThemeColor(android.R.color.holo_red_light, android.R.color.holo_red_dark);
                break;
            case 橙色主题:
                setThemeColor(android.R.color.holo_orange_light, android.R.color.holo_orange_dark);
                break;
        }
        mRefreshLayout.autoRefresh();
    }

    private void setThemeColor(int colorPrimary, int colorPrimaryDark) {
        mToolbar.setBackgroundResource(colorPrimary);
        mRefreshLayout.setPrimaryColorsId(colorPrimary, android.R.color.white);
        if (Build.VERSION.SDK_INT >= 21) {
            getWindow().setStatusBarColor(ContextCompat.getColor(this, colorPrimaryDark));
        }
    }

}


================================================
FILE: app/src/main/java/com/scwang/refreshlayout/activity/style/PhoenixStyleActivity.java
================================================
package com.scwang.refreshlayout.activity.style;

import android.content.res.ColorStateList;
import android.os.Build;
import android.os.Bundle;
import android.support.design.widget.AppBarLayout;
import android.support.design.widget.CollapsingToolbarLayout;
import android.support.design.widget.FloatingActionButton;
import android.support.v4.content.ContextCompat;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.DefaultItemAnimator;
import android.support.v7.widget.DividerItemDecoration;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.support.v7.widget.Toolbar;
import android.view.View;
import android.widget.AdapterView;

import com.scwang.refreshlayout.R;
import com.scwang.refreshlayout.adapter.BaseRecyclerAdapter;
import com.scwang.refreshlayout.adapter.SmartViewHolder;
import com.scwang.smartrefresh.layout.api.RefreshLayout;

import java.util.Arrays;

import static android.R.layout.simple_list_item_2;
import static android.support.v7.widget.DividerItemDecoration.VERTICAL;

public class PhoenixStyleActivity extends AppCompatActivity implements AdapterView.OnItemClickListener {

    private enum Item {
        折叠("折叠AppBarLayout,变成正常的列表页面"),
        展开("展开AppBarLayout,变成可伸展头部的页面"),
        橙色主题("更改为橙色主题颜色"),
        红色主题("更改为红色主题颜色"),
        绿色主题("更改为绿色主题颜色"),
        蓝色主题("更改为蓝色主题颜色"),
        ;
        public String name;
        Item(String name) {
            this.name = name;
        }
    }

    private Toolbar mToolbar;
    private RecyclerView mRecyclerView;
    private AppBarLayout mAppBarLayout;
    private RefreshLayout mRefreshLayout;
    private FloatingActionButton mActionButton;
    private CollapsingToolbarLayout mToolbarLayout;
    private static boolean isFirstEnter = true;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_style_phoenix);

        mToolbar = (Toolbar)findViewById(R.id.toolbar);
        mToolbar.setNavigationOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                finish();
            }
        });

        mRefreshLayout = (RefreshLayout)findViewById(R.id.refreshLayout);
        if (isFirstEnter) {
            isFirstEnter = false;
            mRefreshLayout.autoRefresh();//第一次进入触发自动刷新,演示效果
        }

        mAppBarLayout = (AppBarLayout) findViewById(R.id.app_bar);
        mToolbarLayout = (CollapsingToolbarLayout) findViewById(R.id.toolbar_layout);

        View view = findViewById(R.id.recyclerView);
        if (view instanceof RecyclerView) {
            RecyclerView recyclerView = (RecyclerView) view;
            recyclerView.setLayoutManager(new LinearLayoutManager(this));
            recyclerView.addItemDecoration(new DividerItemDecoration(this, VERTICAL));
            recyclerView.setItemAnimator(new DefaultItemAnimator());
            recyclerView.setAdapter(new BaseRecyclerAdapter<Item>(Arrays.asList(Item.values()), simple_list_item_2,this) {
                @Override
                protected void onBindViewHolder(SmartViewHolder holder, Item model, int position) {
                    holder.text(android.R.id.text1, model.name());
                    holder.text(android.R.id.text2, model.name);
                    holder.textColorId(android.R.id.text2, R.color.colorTextAssistant);
                }
            });
            mRecyclerView = recyclerView;
        }

        /**
         * 监听 AppBarLayout 的关闭和开启 给 FlyView(纸飞机) 和 ActionButton 设置关闭隐藏动画
         */
        mActionButton = (FloatingActionButton) findViewById(R.id.fab);
        mAppBarLayout.addOnOffsetChangedListener(new AppBarLayout.OnOffsetChangedListener() {
            boolean misAppbarExpand = true;
            View fab = findViewById(R.id.fab);
            @Override
            public void onOffsetChanged(AppBarLayout appBarLayout, int verticalOffset) {
                int scrollRange = appBarLayout.getTotalScrollRange();
                float fraction = 1f * (scrollRange + verticalOffset) / scrollRange;
                if (fraction < 0.1 && misAppbarExpand) {
                    misAppbarExpand = false;
                    fab.animate().scaleX(0).scaleY(0);
                }
                if (fraction > 0.8 && !misAppbarExpand) {
                    misAppbarExpand = true;
                    fab.animate().scaleX(1).scaleY(1);
                }
            }
        });
    }

    @Override
    public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
        switch (Item.values()[position]) {
            case 折叠:
                mAppBarLayout.setExpanded(false, true);
                mAppBarLayout.setEnabled(false);
                mRecyclerView.setNestedScrollingEnabled(false);
                break;
            case 展开:
                mAppBarLayout.setEnabled(true);
                mAppBarLayout.setExpanded(true, true);
                mRecyclerView.setNestedScrollingEnabled(true);
                break;
            case 蓝色主题:
                setThemeColor(R.color.colorPrimary, R.color.colorPrimaryDark);
                break;
            case 绿色主题:
                setThemeColor(android.R.color.holo_green_light, android.R.color.holo_green_dark);
                break;
            case 红色主题:
                setThemeColor(android.R.color.holo_red_light, android.R.color.holo_red_dark);
                break;
            case 橙色主题:
                setThemeColor(android.R.color.holo_orange_light, android.R.color.holo_orange_dark);
                break;
        }
        mRefreshLayout.autoRefresh();
    }

    private void setThemeColor(int colorPrimary, int colorPrimaryDark) {
        mToolbar.setBackgroundResource(colorPrimary);
        mAppBarLayout.setBackgroundResource(colorPrimary);
        mToolbarLayout.setContentScrimResource(colorPrimary);
        mRefreshLayout.setPrimaryColorsId(colorPrimary, android.R.color.white);
        mActionButton.setBackgroundColor(ContextCompat.getColor(this, colorPrimaryDark));
        mActionButton.setBackgroundTintList(ColorStateList.valueOf(ContextCompat.getColor(this, colorPrimaryDark)));
        if (Build.VERSION.SDK_INT >= 21) {
            getWindow().setStatusBarColor(ContextCompat.getColor(this, colorPrimaryDark));
        }
    }

}


================================================
FILE: app/src/main/java/com/scwang/refreshlayout/activity/style/StoreHouseStyleActivity.java
================================================
package com.scwang.refreshlayout.activity.style;

import android.os.Build;
import android.os.Bundle;
import android.support.v4.content.ContextCompat;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.DefaultItemAnimator;
import android.support.v7.widget.DividerItemDecoration;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.support.v7.widget.Toolbar;
import android.view.View;
import android.widget.AdapterView;

import com.scwang.refreshlayout.R;
import com.scwang.refreshlayout.adapter.BaseRecyclerAdapter;
import com.scwang.refreshlayout.adapter.SmartViewHolder;
import com.scwang.smartrefresh.layout.api.RefreshLayout;

import java.util.Arrays;

import static android.R.layout.simple_list_item_2;
import static android.support.v7.widget.DividerItemDecoration.VERTICAL;

public class StoreHouseStyleActivity extends AppCompatActivity implements AdapterView.OnItemClickListener {

    private enum Item {
        橙色主题("更改为橙色主题颜色"),
        红色主题("更改为红色主题颜色"),
        绿色主题("更改为绿色主题颜色"),
        蓝色主题("更改为蓝色主题颜色"),
        ;
        public String name;
        Item(String name) {
            this.name = name;
        }
    }

    private Toolbar mToolbar;
    private RefreshLayout mRefreshLayout;
    private static boolean isFirstEnter = true;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_style_storehouse);

        mToolbar = (Toolbar)findViewById(R.id.toolbar);
        mToolbar.setNavigationOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                finish();
            }
        });

        mRefreshLayout = (RefreshLayout)findViewById(R.id.refreshLayout);
        if (isFirstEnter) {
            isFirstEnter = false;
            mRefreshLayout.autoRefresh();//第一次进入触发自动刷新,演示效果
        }

        View view = findViewById(R.id.recyclerView);
        if (view instanceof RecyclerView) {
            RecyclerView recyclerView = (RecyclerView) view;
            recyclerView.addItemDecoration(new DividerItemDecoration(this, VERTICAL));
            recyclerView.setLayoutManager(new LinearLayoutManager(this));
            recyclerView.setItemAnimator(new DefaultItemAnimator());
            recyclerView.setAdapter(new BaseRecyclerAdapter<Item>(Arrays.asList(Item.values()), simple_list_item_2,this) {
                @Override
                protected void onBindViewHolder(SmartViewHolder holder, Item model, int position) {
                    holder.text(android.R.id.text1, model.name());
                    holder.text(android.R.id.text2, model.name);
                    holder.textColorId(android.R.id.text2, R.color.colorTextAssistant);
                }
            });
        }
    }

    @Override
    public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
        switch (Item.values()[position]) {
            case 蓝色主题:
                setThemeColor(R.color.colorPrimary, R.color.colorPrimaryDark);
                break;
            case 绿色主题:
                setThemeColor(android.R.color.holo_green_light, android.R.color.holo_green_dark);
                break;
            case 红色主题:
                setThemeColor(android.R.color.holo_red_light, android.R.color.holo_red_dark);
                break;
            case 橙色主题:
                setThemeColor(android.R.color.holo_orange_light, android.R.color.holo_orange_dark);
                break;
        }
        mRefreshLayout.autoRefresh();
    }

    private void setThemeColor(int colorPrimary, int colorPrimaryDark) {
        mToolbar.setBackgroundResource(colorPrimary);
        mRefreshLayout.setPrimaryColorsId(colorPrimary, android.R.color.white);
        if (Build.VERSION.SDK_INT >= 21) {
            getWindow().setStatusBarColor(ContextCompat.getColor(this, colorPrimaryDark));
        }
    }

}


================================================
FILE: app/src/main/java/com/scwang/refreshlayout/activity/style/TaurusStyleActivity.java
================================================
package com.scwang.refreshlayout.activity.style;

import android.content.res.ColorStateList;
import android.os.Build;
import android.os.Bundle;
import android.support.design.widget.AppBarLayout;
import android.support.design.widget.CollapsingToolbarLayout;
import android.support.design.widget.FloatingActionButton;
import android.support.v4.content.ContextCompat;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.DefaultItemAnimator;
import android.support.v7.widget.DividerItemDecoration;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.support.v7.widget.Toolbar;
import android.view.View;
import android.widget.AdapterView;

import com.scwang.refreshlayout.R;
import com.scwang.refreshlayout.adapter.BaseRecyclerAdapter;
import com.scwang.refreshlayout.adapter.SmartViewHolder;
import com.scwang.smartrefresh.layout.api.RefreshLayout;

import java.util.Arrays;

import static android.R.layout.simple_list_item_2;
import static android.support.v7.widget.DividerItemDecoration.VERTICAL;

public class TaurusStyleActivity extends AppCompatActivity implements AdapterView.OnItemClickListener {

    private enum Item {
        折叠("折叠AppBarLayout,变成正常的列表页面"),
        展开("展开AppBarLayout,变成可伸展头部的页面"),
        橙色主题("更改为橙色主题颜色"),
        红色主题("更改为红色主题颜色"),
        绿色主题("更改为绿色主题颜色"),
        蓝色主题("更改为蓝色主题颜色"),
        ;
        public String name;
        Item(String name) {
            this.name = name;
        }
    }

    private Toolbar mToolbar;
    private RecyclerView mRecyclerView;
    private AppBarLayout mAppBarLayout;
    private RefreshLayout mRefreshLayout;
    private FloatingActionButton mActionButton;
    private CollapsingToolbarLayout mToolbarLayout;
    private static boolean isFirstEnter = true;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_style_taurus);

        mToolbar = (Toolbar)findViewById(R.id.toolbar);
        mToolbar.setNavigationOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                finish();
            }
        });

        mRefreshLayout = (RefreshLayout)findViewById(R.id.refreshLayout);
        if (isFirstEnter) {
            isFirstEnter = false;
            mRefreshLayout.autoRefresh();//第一次进入触发自动刷新,演示效果
        }

        mAppBarLayout = (AppBarLayout) findViewById(R.id.app_bar);
        mToolbarLayout = (CollapsingToolbarLayout) findViewById(R.id.toolbar_layout);

        View view = findViewById(R.id.recyclerView);
        if (view instanceof RecyclerView) {
            RecyclerView recyclerView = (RecyclerView) view;
            recyclerView.setLayoutManager(new LinearLayoutManager(this));
            recyclerView.addItemDecoration(new DividerItemDecoration(this, VERTICAL));
            recyclerView.setItemAnimator(new DefaultItemAnimator());
            recyclerView.setAdapter(new BaseRecyclerAdapter<Item>(Arrays.asList(Item.values()), simple_list_item_2,this) {
                @Override
                protected void onBindViewHolder(SmartViewHolder holder, Item model, int position) {
                    holder.text(android.R.id.text1, model.name());
                    holder.text(android.R.id.text2, model.name);
                    holder.textColorId(android.R.id.text2, R.color.colorTextAssistant);
                }
            });
            mRecyclerView = recyclerView;
        }

        /**
         * 监听 AppBarLayout 的关闭和开启 给 FlyView(纸飞机) 和 ActionButton 设置关闭隐藏动画
         */
        mActionButton = (FloatingActionButton) findViewById(R.id.fab);
        mAppBarLayout.addOnOffsetChangedListener(new AppBarLayout.OnOffsetChangedListener() {
            boolean misAppbarExpand = true;
            View fab = findViewById(R.id.fab);
            @Override
            public void onOffsetChanged(AppBarLayout appBarLayout, int verticalOffset) {
                int scrollRange = appBarLayout.getTotalScrollRange();
                float fraction = 1f * (scrollRange + verticalOffset) / scrollRange;
                if (fraction < 0.1 && misAppbarExpand) {
                    misAppbarExpand = false;
                    fab.animate().scaleX(0).scaleY(0);
                }
                if (fraction > 0.8 && !misAppbarExpand) {
                    misAppbarExpand = true;
                    fab.animate().scaleX(1).scaleY(1);
                }
            }
        });
    }

    @Override
    public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
        switch (Item.values()[position]) {
            case 折叠:
                mAppBarLayout.setExpanded(false, true);
                mAppBarLayout.setEnabled(false);
                mRecyclerView.setNestedScrollingEnabled(false);
                break;
            case 展开:
                mAppBarLayout.setEnabled(true);
                mAppBarLayout.setExpanded(true, true);
                mRecyclerView.setNestedScrollingEnabled(true);
                break;
            case 蓝色主题:
                setThemeColor(R.color.colorPrimary, R.color.colorPrimaryDark);
                break;
            case 绿色主题:
                setThemeColor(android.R.color.holo_green_light, android.R.color.holo_green_dark);
                break;
            case 红色主题:
                setThemeColor(android.R.color.holo_red_light, android.R.color.holo_red_dark);
                break;
            case 橙色主题:
                setThemeColor(android.R.color.holo_orange_light, android.R.color.holo_orange_dark);
                break;
        }
        mRefreshLayout.autoRefresh();
    }

    private void setThemeColor(int colorPrimary, int colorPrimaryDark) {
        mToolbar.setBackgroundResource(colorPrimary);
        mAppBarLayout.setBackgroundResource(colorPrimary);
        mToolbarLayout.setContentScrimResource(colorPrimary);
        mRefreshLayout.setPrimaryColorsId(colorPrimary, android.R.color.white);
        mActionButton.setBackgroundColor(ContextCompat.getColor(this, colorPrimaryDark));
        mActionButton.setBackgroundTintList(ColorStateList.valueOf(ContextCompat.getColor(this, colorPrimaryDark)));
        if (Build.VERSION.SDK_INT >= 21) {
            getWindow().setStatusBarColor(ContextCompat.getColor(this, colorPrimaryDark));
        }
    }

}


================================================
FILE: app/src/main/java/com/scwang/refreshlayout/activity/style/WaterDropStyleActivity.java
================================================
package com.scwang.refreshlayout.activity.style;

import android.os.Build;
import android.os.Bundle;
import android.support.v4.content.ContextCompat;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.DefaultItemAnimator;
import android.support.v7.widget.DividerItemDecoration;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.support.v7.widget.Toolbar;
import android.view.View;
import android.widget.AdapterView;

import com.scwang.refreshlayout.R;
import com.scwang.refreshlayout.adapter.BaseRecyclerAdapter;
import com.scwang.refreshlayout.adapter.SmartViewHolder;
import com.scwang.smartrefresh.layout.api.RefreshLayout;

import java.util.Arrays;

import static android.R.layout.simple_list_item_2;
import static android.support.v7.widget.DividerItemDecoration.VERTICAL;

public class WaterDropStyleActivity extends AppCompatActivity implements AdapterView.OnItemClickListener {

    private enum Item {
        内容不偏移("下拉的时候列表内容停留在原位不动"),
        内容跟随偏移("下拉的时候列表内容跟随向下偏移"),
        默认主题("更改为默认主题颜色"),
        橙色主题("更改为橙色主题颜色"),
        红色主题("更改为红色主题颜色"),
        绿色主题("更改为绿色主题颜色"),
        蓝色主题("更改为蓝色主题颜色"),
        ;
        public String name;
        Item(String name) {
            this.name = name;
        }
    }

    private Toolbar mToolbar;
    private RefreshLayout mRefreshLayout;
    private static boolean isFirstEnter = true;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_style_water_drop);

        mToolbar = (Toolbar)findViewById(R.id.toolbar);
        mToolbar.setNavigationOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                finish();
            }
        });

        mRefreshLayout = (RefreshLayout)findViewById(R.id.refreshLayout);
        if (isFirstEnter) {
            isFirstEnter = false;
            mRefreshLayout.autoRefresh();//第一次进入触发自动刷新,演示效果
        }

        View view = findViewById(R.id.recyclerView);
        if (view instanceof RecyclerView) {
            RecyclerView recyclerView = (RecyclerView) view;
            recyclerView.setLayoutManager(new LinearLayoutManager(this));
            recyclerView.addItemDecoration(new DividerItemDecoration(this, VERTICAL));
            recyclerView.setItemAnimator(new DefaultItemAnimator());
            recyclerView.setAdapter(new BaseRecyclerAdapter<Item>(Arrays.asList(Item.values()), simple_list_item_2,this) {
                @Override
                protected void onBindViewHolder(SmartViewHolder holder, Item model, int position) {
                    holder.text(android.R.id.text1, model.name());
                    holder.text(android.R.id.text2, model.name);
                    holder.textColorId(android.R.id.text2, R.color.colorTextAssistant);
                }
            });
        }
    }

    @Override
    public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
        switch (Item.values()[position]) {
            case 内容不偏移:
                mRefreshLayout.setEnableHeaderTranslationContent(false);
                break;
            case 内容跟随偏移:
                mRefreshLayout.setEnableHeaderTranslationContent(true);
                break;
            case 默认主题:
                setThemeColor(R.color.colorPrimary, R.color.colorPrimaryDark);
                mRefreshLayout.setPrimaryColorsId(android.R.color.darker_gray);
                break;
            case 蓝色主题:
                setThemeColor(R.color.colorPrimary, R.color.colorPrimaryDark);
                break;
            case 绿色主题:
                setThemeColor(android.R.color.holo_green_light, android.R.color.holo_green_dark);
                break;
            case 红色主题:
                setThemeColor(android.R.color.holo_red_light, android.R.color.holo_red_dark);
                break;
            case 橙色主题:
                setThemeColor(android.R.color.holo_orange_light, android.R.color.holo_orange_dark);
                break;
        }
        mRefreshLayout.autoRefresh();
    }

    private void setThemeColor(int colorPrimary, int colorPrimaryDark) {
        mToolbar.setBackgroundResource(colorPrimary);
        mRefreshLayout.setPrimaryColorsId(colorPrimary, android.R.color.white);
        if (Build.VERSION.SDK_INT >= 21) {
            getWindow().setStatusBarColor(ContextCompat.getColor(this, colorPrimaryDark));
        }
    }

}


================================================
FILE: app/src/main/java/com/scwang/refreshlayout/activity/style/WaveSwipStyleActivity.java
================================================
package com.scwang.refreshlayout.activity.style;

import android.os.Build;
import android.os.Bundle;
import android.support.v4.content.ContextCompat;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.DefaultItemAnimator;
import android.support.v7.widget.DividerItemDecoration;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.support.v7.widget.Toolbar;
import android.view.View;
import android.widget.AdapterView;

import com.scwang.refreshlayout.R;
import com.scwang.refreshlayout.adapter.BaseRecyclerAdapter;
import com.scwang.refreshlayout.adapter.SmartViewHolder;
import com.scwang.smartrefresh.layout.api.RefreshLayout;

import java.util.Arrays;

import static android.R.layout.simple_list_item_2;
import static android.support.v7.widget.DividerItemDecoration.VERTICAL;

public class WaveSwipStyleActivity extends AppCompatActivity implements AdapterView.OnItemClickListener {

    private enum Item {
        内容不偏移("下拉的时候列表内容停留在原位不动"),
        内容跟随偏移("下拉的时候列表内容跟随向下偏移"),
        橙色主题("更改为橙色主题颜色"),
        红色主题("更改为红色主题颜色"),
        绿色主题("更改为绿色主题颜色"),
        蓝色主题("更改为蓝色主题颜色"),
        ;
        public String name;
        Item(String name) {
            this.name = name;
        }
    }

    private Toolbar mToolbar;
    private RefreshLayout mRefreshLayout;
    private static boolean isFirstEnter = true;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_style_wave_swip);

        mToolbar = (Toolbar)findViewById(R.id.toolbar);
        mToolbar.setNavigationOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                finish();
            }
        });

        mRefreshLayout = (RefreshLayout)findViewById(R.id.refreshLayout);
        if (isFirstEnter) {
            isFirstEnter = false;
            mRefreshLayout.autoRefresh();//第一次进入触发自动刷新,演示效果
        }

        View view = findViewById(R.id.recyclerView);
        if (view instanceof RecyclerView) {
            RecyclerView recyclerView = (RecyclerView) view;
            recyclerView.setLayoutManager(new LinearLayoutManager(this));
            recyclerView.addItemDecoration(new DividerItemDecoration(this, VERTICAL));
            recyclerView.setItemAnimator(new DefaultItemAnimator());
            recyclerView.setAdapter(new BaseRecyclerAdapter<Item>(Arrays.asList(Item.values()), simple_list_item_2,this) {
                @Override
                protected void onBindViewHolder(SmartViewHolder holder, Item model, int position) {
                    holder.text(android.R.id.text1, model.name());
                    holder.text(android.R.id.text2, model.name);
                    holder.textColorId(android.R.id.text2, R.color.colorTextAssistant);
                }
            });
        }
    }

    @Override
    public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
        switch (Item.values()[position]) {
            case 内容不偏移:
                mRefreshLayout.setEnableHeaderTranslationContent(false);
                break;
            case 内容跟随偏移:
                mRefreshLayout.setEnableHeaderTranslationContent(true);
                break;
            case 蓝色主题:
                setThemeColor(R.color.colorPrimary, R.color.colorPrimaryDark);
                break;
            case 绿色主题:
                setThemeColor(android.R.color.holo_green_light, android.R.color.holo_green_dark);
                break;
            case 红色主题:
                setThemeColor(android.R.color.holo_red_light, android.R.color.holo_red_dark);
                break;
            case 橙色主题:
                setThemeColor(android.R.color.holo_orange_light, android.R.color.holo_orange_dark);
                break;
        }
        mRefreshLayout.autoRefresh();
    }

    private void setThemeColor(int colorPrimary, int colorPrimaryDark) {
        mToolbar.setBackgroundResource(colorPrimary);
        mRefreshLayout.setPrimaryColorsId(colorPrimary, android.R.color.white);
        if (Build.VERSION.SDK_INT >= 21) {
            getWindow().setStatusBarColor(ContextCompat.getColor(this, colorPrimaryDark));
        }
    }

}


================================================
FILE: app/src/main/java/com/scwang/refreshlayout/activity/using/AssignCodeUsingActivity.java
================================================
package com.scwang.refreshlayout.activity.using;

import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.Toolbar;
import android.view.View;

import com.scwang.refreshlayout.R;
import com.scwang.smartrefresh.header.MaterialHeader;
import com.scwang.smartrefresh.layout.api.RefreshLayout;
import com.scwang.smartrefresh.layout.constant.RefreshState;
import com.scwang.smartrefresh.layout.constant.SpinnerStyle;
import com.scwang.smartrefresh.layout.footer.BallPulseFooter;
import com.scwang.smartrefresh.layout.listener.SimpleMultiPurposeListener;

/**
 * 在Java代码中指定Header和Footer
 */
public class AssignCodeUsingActivity extends AppCompatActivity {

    private static boolean isFirstEnter = true;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_using_assign_code);

        final Toolbar toolbar = (Toolbar)findViewById(R.id.toolbar);
        toolbar.setNavigationOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                finish();
            }
        });


        final RefreshLayout refreshLayout = (RefreshLayout) findViewById(R.id.refreshLayout);
        //设置 Header 为 Material风格
        refreshLayout.setRefreshHeader(new MaterialHeader(this).setShowBezierWave(true));
        //设置 Footer 为 球脉冲
        refreshLayout.setRefreshFooter(new BallPulseFooter(this).setSpinnerStyle(SpinnerStyle.Scale));

        /**
         * 以下代码仅仅为了演示效果而已,不是必须的
         */
        //设置主题颜色
        refreshLayout.setPrimaryColorsId(R.color.colorPrimary, android.R.color.white);

        if (isFirstEnter) {
            isFirstEnter = false;
            //触发上啦加载
            refreshLayout.autoLoadmore();
            //通过多功能监听接口实现 在第一次加载完成之后 自动刷新
            refreshLayout.setOnMultiPurposeListener(new SimpleMultiPurposeListener(){
                @Override
                public void onStateChanged(RefreshLayout refreshLayout, RefreshState oldState, RefreshState newState) {
                    if (oldState == RefreshState.LoadFinish && newState == RefreshState.None) {
                        refreshLayout.autoRefresh();
                        refreshLayout.setOnMultiPurposeListener(null);
                    }
                }
            });
        }
    }

}


================================================
FILE: app/src/main/java/com/scwang/refreshlayout/activity/using/AssignDefaultUsingActivity.java
================================================
package com.scwang.refreshlayout.activity.using;

import android.content.Context;
import android.os.Bundle;
import android.support.annotation.NonNull;
import android.support.v4.content.ContextCompat;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.Toolbar;
import android.view.View;

import com.scwang.refreshlayout.R;
import com.scwang.smartrefresh.layout.SmartRefreshLayout;
import com.scwang.smartrefresh.layout.api.DefaultRefreshFooterCreater;
import com.scwang.smartrefresh.layout.api.DefaultRefreshHeaderCreater;
import com.scwang.smartrefresh.layout.api.RefreshFooter;
import com.scwang.smartrefresh.layout.api.RefreshHeader;
import com.scwang.smartrefresh.layout.api.RefreshLayout;
import com.scwang.smartrefresh.layout.constant.RefreshState;
import com.scwang.smartrefresh.layout.constant.SpinnerStyle;
import com.scwang.smartrefresh.layout.footer.ClassicsFooter;
import com.scwang.smartrefresh.layout.header.ClassicsHeader;
import com.scwang.smartrefresh.layout.listener.SimpleMultiPurposeListener;

/**
 * 全局指定默认的Header和Footer
 */
public class AssignDefaultUsingActivity extends AppCompatActivity {

   private static boolean isFirstEnter = true;

    /*
     * 关键代码,需要在布局生成之前设置,建议代码放在 Application 中
     */
    static {
        //设置全局的Header构建器
        SmartRefreshLayout.setDefaultRefreshHeaderCreater(new DefaultRefreshHeaderCreater() {
            @NonNull
            @Override
            public RefreshHeader createRefreshHeader(Context context, RefreshLayout layout) {
                ClassicsHeader header = new ClassicsHeader(context).setSpinnerStyle(SpinnerStyle.FixedBehind);
                header.setPrimaryColors(ContextCompat.getColor(context, R.color.colorPrimary), ContextCompat.getColor(context, android.R.color.white));
                return header;//指定为经典Header,默认是 贝塞尔雷达Header
            }
        });
        //设置全局的Footer构建器
        SmartRefreshLayout.setDefaultRefreshFooterCreater(new DefaultRefreshFooterCreater() {
            @NonNull
            @Override
            public RefreshFooter createRefreshFooter(Context context, RefreshLayout layout) {
                layout.setEnableLoadmoreWhenContentNotFull(true);
                ClassicsFooter footer = new ClassicsFooter(context);
                footer.setBackgroundResource(android.R.color.white);
                footer.setSpinnerStyle(SpinnerStyle.Scale);//设置为拉伸模式
                return footer;//指定为经典Footer,默认是 BallPulseFooter
            }
        });
    }

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_using_assign_default);

        final Toolbar toolbar = (Toolbar)findViewById(R.id.toolbar);
        toolbar.setNavigationOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                finish();
            }
        });

        /**
         * 以下代码仅仅为了演示效果而已,不是必须的
         * 关键代码在构造函数中
         */
        final RefreshLayout refreshLayout = (RefreshLayout) findViewById(R.id.refreshLayout);
        if (isFirstEnter) {
            isFirstEnter = false;
            //触发上啦加载
            refreshLayout.autoLoadmore();
            //通过多功能监听接口实现 在第一次加载完成之后 自动刷新
            refreshLayout.setOnMultiPurposeListener(new SimpleMultiPurposeListener(){
                @Override
                public void onStateChanged(RefreshLayout refreshLayout, RefreshState oldState, RefreshState newState) {
                    if (oldState == RefreshState.LoadFinish
                            && newState == RefreshState.None) {
                        refreshLayout.autoRefresh();
                        refreshLayout.setOnMultiPurposeListener(null);
                    }
                }
            });
        }
    }

}


================================================
FILE: app/src/main/java/com/scwang/refreshlayout/activity/using/AssignXmlUsingActivity.java
================================================
package com.scwang.refreshlayout.activity.using;

import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.Toolbar;
import android.view.View;

import com.scwang.refreshlayout.R;
import com.scwang.smartrefresh.layout.api.RefreshLayout;
import com.scwang.smartrefresh.layout.constant.RefreshState;
import com.scwang.smartrefresh.layout.listener.SimpleMultiPurposeListener;

/**
 * 在XML中指定Header和Footer
 */
public class AssignXmlUsingActivity extends AppCompatActivity {

    private static boolean isFirstEnter = true;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_using_assign_xml);

        final Toolbar toolbar = (Toolbar)findViewById(R.id.toolbar);
        toolbar.setNavigationOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                finish();
            }
        });


        /**
         * 以下代码仅仅为了演示效果而已,不是必须的
         * 关键代码在 activity_using_assign_xml 中
         */
        final RefreshLayout refreshLayout = (RefreshLayout) findViewById(R.id.refreshLayout);
        if (isFirstEnter) {
            isFirstEnter = false;
            //触发上啦加载
            refreshLayout.autoLoadmore();
            //通过多功能监听接口实现 在第一次加载完成之后 自动刷新
            refreshLayout.setOnMultiPurposeListener(new SimpleMultiPurposeListener(){
                @Override
                public void onStateChanged(RefreshLayout refreshLayout, RefreshState oldState, RefreshState newState) {
                    if (oldState == RefreshState.LoadFinish && newState == RefreshState.None) {
                        refreshLayout.autoRefresh();
                        refreshLayout.setOnMultiPurposeListener(null);
                    }
                }
            });
        }
    }

}


================================================
FILE: app/src/main/java/com/scwang/refreshlayout/activity/using/BasicUsingActivity.java
================================================
package com.scwang.refreshlayout.activity.using;

import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.Toolbar;
import android.view.View;
import android.widget.ListView;
import android.widget.Toast;

import com.scwang.refreshlayout.R;
import com.scwang.refreshlayout.adapter.BaseRecyclerAdapter;
import com.scwang.refreshlayout.adapter.SmartViewHolder;
import com.scwang.smartrefresh.layout.api.RefreshLayout;
import com.scwang.smartrefresh.layout.listener.OnLoadmoreListener;
import com.scwang.smartrefresh.layout.listener.OnRefreshListener;

import java.util.Arrays;
import java.util.Collection;
import java.util.Locale;

import static android.R.layout.simple_list_item_2;

/**
 * 基本的功能使用
 */
public class BasicUsingActivity extends AppCompatActivity {

    private BaseRecyclerAdapter<Void> mAdapter;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_using_basic);

        final Toolbar toolbar = (Toolbar)findViewById(R.id.toolbar);
        toolbar.setNavigationOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                finish();
            }
        });

        ListView listView = (ListView) findViewById(R.id.listview);
        listView.setAdapter(mAdapter = new BaseRecyclerAdapter<Void>(simple_list_item_2) {
            @Override
            protected void onBindViewHolder(SmartViewHolder holder, Void model, int position) {
                holder.text(android.R.id.text1, String.format(Locale.CHINA, "第%02d条数据", position));
                holder.text(android.R.id.text2, String.format(Locale.CHINA, "这是测试的第%02d条数据", position));
                holder.textColorId(android.R.id.text2, R.color.colorTextAssistant);
            }
        });

        final RefreshLayout refreshLayout = (RefreshLayout) findViewById(R.id.refreshLayout);
        refreshLayout.setEnableAutoLoadmore(true);//开启自动加载功能(非必须)
        refreshLayout.setOnRefreshListener(new OnRefreshListener() {
            @Override
            public void onRefresh(final RefreshLayout refreshlayout) {
                refreshlayout.getLayout().postDelayed(new Runnable() {
                    @Override
                    public void run() {
                        mAdapter.refresh(initData());
                        refreshlayout.finishRefresh();
                        refreshlayout.setLoadmoreFinished(false);
                    }
                }, 2000);
            }
        });
        refreshLayout.setOnLoadmoreListener(new OnLoadmoreListener() {
            @Override
            public void onLoadmore(final RefreshLayout refreshlayout) {
                refreshlayout.getLayout().postDelayed(new Runnable() {
                    @Override
                    public void run() {
                        mAdapter.loadmore(initData());
                        refreshlayout.finishLoadmore();
                        if (mAdapter.getItemCount() > 60) {
                            Toast.makeText(getApplication(), "数据全部加载完毕", Toast.LENGTH_SHORT).show();
                            refreshlayout.setLoadmoreFinished(true);//将不会再次触发加载更多事件
                        }
                    }
                }, 2000);
            }
        });

        //触发自动刷新
        refreshLayout.autoRefresh();

    }

    private Collection<Void> initData() {
        return Arrays.asList(null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null);
    }
}


================================================
FILE: app/src/main/java/com/scwang/refreshlayout/activity/using/CustomUsingActivity.java
================================================
package com.scwang.refreshlayout.activity.using;

import android.content.Context;
import android.os.Bundle;
import android.support.annotation.NonNull;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.Toolbar;
import android.util.AttributeSet;
import android.view.Gravity;
import android.view.View;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.ListView;
import android.widget.TextView;

import com.scwang.refreshlayout.R;
import com.scwang.refreshlayout.adapter.BaseRecyclerAdapter;
import com.scwang.refreshlayout.adapter.SmartViewHolder;
import com.scwang.smartrefresh.layout.api.RefreshHeader;
import com.scwang.smartrefresh.layout.api.RefreshKernel;
import com.scwang.smartrefresh.layout.api.RefreshLayout;
import com.scwang.smartrefresh.layout.constant.RefreshState;
import com.scwang.smartrefresh.layout.constant.SpinnerStyle;
import com.scwang.smartrefresh.layout.internal.ProgressDrawable;
import com.scwang.smartrefresh.layout.internal.pathview.PathsView;
import com.scwang.smartrefresh.layout.listener.OnRefreshListener;
import com.scwang.smartrefresh.layout.util.DensityUtil;

import java.util.Arrays;
import java.util.Collection;
import java.util.Locale;

import static android.R.layout.simple_list_item_2;

/**
 * 自定义Header功能使用
 */
public class CustomUsingActivity extends AppCompatActivity {

    private BaseRecyclerAdapter<Void> mAdapter;

    private static boolean isFirstEnter = true;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_using_custom);

        final Toolbar toolbar = (Toolbar)findViewById(R.id.toolbar);
        toolbar.setNavigationOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                finish();
            }
        });

        ListView listView = (ListView) findViewById(R.id.listview);
        listView.setAdapter(mAdapter = new BaseRecyclerAdapter<Void>(simple_list_item_2) {
            @Override
            protected void onBindViewHolder(SmartViewHolder holder, Void model, int position) {
                holder.text(android.R.id.text1, String.format(Locale.CHINA, "第%02d条数据", position));
                holder.text(android.R.id.text2, String.format(Locale.CHINA, "这是测试的第%02d条数据", position));
                holder.textColorId(android.R.id.text2, R.color.colorTextAssistant);
            }
        });

        final RefreshLayout refreshLayout = (RefreshLayout) findViewById(R.id.refreshLayout);
        refreshLayout.setOnRefreshListener(new OnRefreshListener() {
            @Override
            public void onRefresh(final RefreshLayout refreshlayout) {
                refreshlayout.getLayout().postDelayed(new Runnable() {
                    @Override
                    public void run() {
                        mAdapter.refresh(initData());
                        refreshlayout.finishRefresh();
                    }
                }, 2000);
            }
        });

        refreshLayout.setRefreshHeader(new ClassicsHeader(this));
        refreshLayout.setHeaderHeight(60);

        //触发自动刷新
        if (isFirstEnter) {
            isFirstEnter = false;
            refreshLayout.autoRefresh();
        } else {
            mAdapter.refresh(initData());
        }

    }

    private Collection<Void> initData() {
        return Arrays.asList(null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null);
    }

    public static class ClassicsHeader extends LinearLayout implements RefreshHeader {

        private TextView mHeaderText;//标题文本
        private PathsView mArrowView;//下拉箭头
        private ImageView mProgressView;//刷新动画视图
        private ProgressDrawable mProgressDrawable;//刷新动画

        public ClassicsHeader(Context context) {
            super(context);
            initView(context);
        }
        public ClassicsHeader(Context context, AttributeSet attrs) {
            super(context, attrs);
            this.initView(context);
        }
        public ClassicsHeader(Context context, AttributeSet attrs, int defStyleAttr) {
            super(context, attrs, defStyleAttr);
            this.initView(context);
        }
        private void initView(Context context) {
            setGravity(Gravity.CENTER);
            mHeaderText = new TextView(context);
            mProgressDrawable = new ProgressDrawable();
            mArrowView = new PathsView(context);
            mProgressView = new ImageView(context);
            mProgressView.setImageDrawable(mProgressDrawable);
            mArrowView.parserPaths("M20,12l-1.41,-1.41L13,16.17V4h-2v12.17l-5.58,-5.59L4,12l8,8 8,-8z");
            addView(mProgressView, DensityUtil.dp2px(20), DensityUtil.dp2px(20));
            addView(mArrowView, DensityUtil.dp2px(20), DensityUtil.dp2px(20));
            addView(new View(context), DensityUtil.dp2px(20), DensityUtil.dp2px(20));
            addView(mHeaderText, LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);
            setMinimumHeight(DensityUtil.dp2px(60));
        }
        @NonNull
        public View getView() {
            return this;//真实的视图就是自己,不能返回null
        }
        @Override
        public SpinnerStyle getSpinnerStyle() {
            return SpinnerStyle.Translate;//指定为平移,不能null
        }
        @Override
        public void onStartAnimator(RefreshLayout layout, int headHeight, int extendHeight) {
            mProgressDrawable.start();//开始动画
        }
        @Override
        public int onFinish(RefreshLayout layout, boolean success) {
            mProgressDrawable.stop();//停止动画
            if (success){
                mHeaderText.setText("刷新完成");
            } else {
                mHeaderText.setText("刷新失败");
            }
            return 500;//延迟500毫秒之后再弹回
        }
        @Override
        public void onStateChanged(RefreshLayout refreshLayout, RefreshState oldState, RefreshState newState) {
            switch (newState) {
                case None:
                case PullDownToRefresh:
                    mHeaderText.setText("下拉开始刷新");
                    mArrowView.setVisibility(VISIBLE);//显示下拉箭头
                    mProgressView.setVisibility(GONE);//隐藏动画
                    mArrowView.animate().rotation(0);//还原箭头方向
                    break;
                case Refreshing:
                    mHeaderText.setText("正在刷新");
                    mProgressView.setVisibility(VISIBLE);//显示加载动画
                    mArrowView.setVisibility(GONE);//隐藏箭头
                    break;
                case ReleaseToRefresh:
                    mHeaderText.setText("释放立即刷新");
                    mArrowView.animate().rotation(180);//显示箭头改为朝上
                    break;
            }
        }
        @Override
        public boolean isSupportHorizontalDrag() {
            return false;
        }
        @Override
        public void onInitialized(RefreshKernel kernel, int height, int extendHeight) {
        }
        @Override
        public void onHorizontalDrag(float percentX, int offsetX, int offsetMax) {
        }
        @Override
        public void onPullingDown(float percent, int offset, int headHeight, int extendHeight) {
        }
        @Override
        public void onReleasing(float percent, int offset, int headHeight, int extendHeight) {
        }
        @Override
        public void setPrimaryColors(int... colors){
        }
    }
}


================================================
FILE: app/src/main/java/com/scwang/refreshlayout/activity/using/ListenerUsingActivity.java
================================================
package com.scwang.refreshlayout.activity.using;

import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.Toolbar;
import android.text.method.ScrollingMovementMethod;
import android.view.View;
import android.widget.TextView;

import com.scwang.refreshlayout.R;
import com.scwang.smartrefresh.layout.api.RefreshFooter;
import com.scwang.smartrefresh.layout.api.RefreshHeader;
import com.scwang.smartrefresh.layout.api.RefreshLayout;
import com.scwang.smartrefresh.layout.constant.RefreshState;
import com.scwang.smartrefresh.layout.listener.SimpleMultiPurposeListener;

import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Locale;

/**
 * 多功能监听器的使用
 */
public class ListenerUsingActivity extends AppCompatActivity {

    private static DateFormat FORMAT = new SimpleDateFormat("HH:mm sss", Locale.CHINA);

    private TextView mTvContent;
    private String mHeaderPulling;
    private String mHeaderReleasing;
    private String mFooterPulling;
    private String mFooterReleasing;
    private String mFooterStartAnimator;
    private String mHeaderStartAnimator;
    private String mFooterFinish;
    private String mHeaderFinish;
    private String mRefresh;
    private String mLoadmore;
    private String mStateChanged;

    private static boolean isFirstEnter = true;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_using_listener);

        final Toolbar toolbar = (Toolbar)findViewById(R.id.toolbar);
        toolbar.setNavigationOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                finish();
            }
        });

        mTvContent = (TextView) findViewById(R.id.content);
        mTvContent.setMovementMethod(ScrollingMovementMethod.getInstance());

        final RefreshLayout refreshLayout = (RefreshLayout) findViewById(R.id.refreshLayout);
        refreshLayout.setOnMultiPurposeListener(new SimpleMultiPurposeListener() {

            @Override
            public void onHeaderPulling(RefreshHeader header, float percent, int offset, int headerHeight, int extendHeight) {
                mHeaderPulling = String.format(Locale.CHINA, "%s\npercent=%.02f offset=%03d\nheight=%03d extend=%03d",
                        FORMAT.format(new Date()),
                        percent,offset,headerHeight,extendHeight);
                updateContent();
            }

            @Override
            public void onHeaderReleasing(RefreshHeader header, float percent, int offset, int headerHeight, int extendHeight) {
                mHeaderReleasing = String.format(Locale.CHINA, "%s\npercent=%.02f offset=%03d\nheight=%03d extend=%03d",
                        FORMAT.format(new Date()),
                        percent,offset,headerHeight,extendHeight);
                updateContent();
            }

            @Override
            public void onHeaderStartAnimator(RefreshHeader header, int headerHeight, int extendHeight) {
                mHeaderStartAnimator = String.format(Locale.CHINA, "%s\nheight=%03d extend=%03d",
                        FORMAT.format(new Date()),
                        headerHeight,extendHeight);
                updateContent();
            }

            @Override
            public void onHeaderFinish(RefreshHeader header, boolean success) {
                mHeaderFinish = String.format(Locale.CHINA, "%s - " + success,FORMAT.format(new Date()));
                updateContent();
            }

            @Override
            public void onFooterPulling(RefreshFooter footer, float percent, int offset, int footerHeight, int extendHeight) {
                mFooterPulling = String.format(Locale.CHINA, "%s\npercent=%.02f\noffset=%03d height=%03d\nextend=%03d",
                        FORMAT.format(new Date()),
                        percent,offset,footerHeight,extendHeight);
                updateContent();
            }

            @Override
            public void onFooterReleasing(RefreshFooter footer, float percent, int offset, int footerHeight, int extendHeight) {
                mFooterReleasing = String.format(Locale.CHINA, "%s\npercent=%.02f\noffset=%03d height=%03d\nextend=%03d",
                        FORMAT.format(new Date()),
                        percent,offset,footerHeight,extendHeight);
                updateContent();
            }

            @Override
            public void onFooterStartAnimator(RefreshFooter footer, int footerHeight, int extendHeight) {
                mFooterStartAnimator = String.format(Locale.CHINA, "%s\nheight=%03d extend=%03d",
                        FORMAT.format(new Date()),
                        footerHeight,extendHeight);
                updateContent();
            }

            @Override
            public void onFooterFinish(RefreshFooter footer, boolean success) {
                mFooterFinish = String.format(Locale.CHINA, "%s - " + success,FORMAT.format(new Date()));
                updateContent();
            }

            @Override
            public void onRefresh(RefreshLayout refreshlayout) {
                mRefresh = String.format(Locale.CHINA, "%s",FORMAT.format(new Date()));
                updateContent();
            }

            @Override
            public void onLoadmore(RefreshLayout refreshlayout) {
                mLoadmore = String.format(Locale.CHINA, "%s",FORMAT.format(new Date()));
                updateContent();
            }

            @Override
            public void onStateChanged(RefreshLayout refreshLayout, RefreshState oldState, RefreshState newState) {
                mStateChanged = String.format(Locale.CHINA, "%s\nnew=%s\nold=%s",
                        FORMAT.format(new Date()),
                        newState.name(),
                        oldState.name());
                updateContent();
            }
        });

        if (isFirstEnter) {
            isFirstEnter = false;
            //触发自动刷新
            refreshLayout.autoRefresh();
        } else {
            updateContent();
        }
    }

    private void updateContent() {
        mTvContent.setText(String.format(Locale.CHINA,
                "onStateChanged:%s\n\n" +
                        "onHeaderPulling:%s\n\n" +
                        "onHeaderReleasing:%s\n\n" +
                        "onHeaderStartAnimator:%s\n\n" +
                        "onHeaderFinish:%s\n\n" +
                        "onFooterPulling:%s\n\n" +
                        "onFooterReleasing:%s\n\n" +
                        "onFooterStartAnimator:%s\n\n" +
                        "onFooterFinish:%s\n\n" +
                        "onRefresh:%s\n\n" +
                        "onLoadmore:%s\n\n",
                mStateChanged,
                mHeaderPulling,
                mHeaderReleasing,
                mHeaderStartAnimator,
                mHeaderFinish,
                mFooterPulling,
                mFooterReleasing,
                mFooterStartAnimator,
                mFooterFinish,
                mRefresh,
                mLoadmore));
    }

}


================================================
FILE: app/src/main/java/com/scwang/refreshlayout/activity/using/NestLayoutUsingActivity.java
================================================
package com.scwang.refreshlayout.activity.using;

import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.DefaultItemAnimator;
import android.support.v7.widget.DividerItemDecoration;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.support.v7.widget.Toolbar;
import android.view.View;
import android.widget.AdapterView;
import android.widget.TextView;

import com.scwang.refreshlayout.R;
import com.scwang.refreshlayout.adapter.BaseRecyclerAdapter;
import com.scwang.refreshlayout.adapter.SmartViewHolder;
import com.scwang.smartrefresh.layout.api.RefreshLayout;

import java.util.Arrays;

public class NestLayoutUsingActivity extends AppCompatActivity implements AdapterView.OnItemClickListener {

    private static String[] provinces = new String[]{
            "北京","天津","上海","重庆",
            "黑龙江","吉林","辽宁","河北","河南","山东","江苏","山西","陕西","甘肃","四川","青海","湖南","湖北","江西","安徽","浙江","福建","广东","广西","贵州","云南","海南",
            "内蒙古","新疆维吾尔族自治区","宁夏回族自治区","西藏","宁夏回族自治区",
            "香港","澳门"
    };

    private static boolean isFirstEnter = true;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_using_region);

        final Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
        if (toolbar != null) {
            toolbar.setNavigationOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    finish();
                }
            });
        }

        View view = findViewById(R.id.recyclerView);
        if (view instanceof RecyclerView) {
            RecyclerView recyclerView = (RecyclerView) view;
            recyclerView.setLayoutManager(new LinearLayoutManager(this));
            recyclerView.setItemAnimator(new DefaultItemAnimator());
            recyclerView.addItemDecoration(new DividerItemDecoration(this,DividerItemDecoration.VERTICAL));
            recyclerView.setAdapter(new BaseRecyclerAdapter<String>(Arrays.asList(provinces),android.R.layout.simple_list_item_1) {
                @Override
                protected void onBindViewHolder(SmartViewHolder holder, String model, int position) {
                    holder.text(android.R.id.text1, model);
                }
            }.setOnItemClickListener(this));
        }
        /**
         * 以下代码仅仅为了演示效果而已,不是必须的
         * 关键代码在 activity_using_assign_xml 中
         */
        final RefreshLayout refreshLayout = (RefreshLayout) findViewById(R.id.refreshLayout);
        if (isFirstEnter && refreshLayout != null) {
            isFirstEnter = false;
            //触发上啦加载
            refreshLayout.autoRefresh();
        }
    }

    @Override
    public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
        String province = provinces[position];
        view = findViewById(R.id.region);
        if (view instanceof TextView) {
            ((TextView) view).setText(province);
        }
    }
}


================================================
FILE: app/src/main/java/com/scwang/refreshlayout/activity/using/OverScrollUsingActivity.java
================================================
package com.scwang.refreshlayout.activity.using;

import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.Toolbar;
import android.view.View;
import android.webkit.WebView;
import android.webkit.WebViewClient;

import com.scwang.refreshlayout.R;
import com.scwang.smartrefresh.layout.api.RefreshLayout;
import com.scwang.smartrefresh.layout.listener.OnRefreshListener;

/**
 * 越界回弹使用演示
 */
public class OverScrollUsingActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_using_overscroll);

        final Toolbar toolbar = (Toolbar)findViewById(R.id.toolbar);
        toolbar.setNavigationOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                finish();
            }
        });

        final WebView webView = (WebView) findViewById(R.id.webView);
        final RefreshLayout refreshLayout = (RefreshLayout) findViewById(R.id.refreshLayout);
        refreshLayout.setOnRefreshListener(new OnRefreshListener() {
            @Override
            public void onRefresh(RefreshLayout refreshlayout) {
                webView.loadUrl("http://github.com");
            }
        });
        refreshLayout.autoRefresh();


        webView.setWebViewClient(new WebViewClient(){
            @Override
            public boolean shouldOverrideUrlLoading(WebView view, String url) {
                view.loadUrl(url);
                return true;
            }
            @Override
            public void onPageCommitVisible(WebView view, String url) {
                refreshLayout.finishRefresh();
            }
        });
//        TextView textView = (TextView) findViewById(R.id.textView);
//        textView.setMovementMethod(new ScrollingMovementMethod());
    }

}


================================================
FILE: app/src/main/java/com/scwang/refreshlayout/activity/using/SnapHelperUsingActivity.java
================================================
package com.scwang.refreshlayout.activity.using;

import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.DefaultItemAnimator;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.PagerSnapHelper;
import android.support.v7.widget.RecyclerView;
import android.support.v7.widget.SnapHelper;
import android.support.v7.widget.Toolbar;
import android.view.View;

import com.scwang.refreshlayout.R;
import com.scwang.refreshlayout.adapter.BaseRecyclerAdapter;
import com.scwang.refreshlayout.adapter.SmartViewHolder;

import java.util.Arrays;
import java.util.Collection;

/**
 * 结合 SnapHelper 使用
 * Created by SCWANG on 2017/8/4.
 */

public class SnapHelperUsingActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_using_snaphelper);

        final Toolbar toolbar = (Toolbar)findViewById(R.id.toolbar);
        toolbar.setNavigationOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                finish();
            }
        });

        //初始化列表和监听
        View view = findViewById(R.id.recyclerView);
        if (view instanceof RecyclerView) {
            RecyclerView recyclerView = (RecyclerView) view;
            recyclerView.setLayoutManager(new LinearLayoutManager(this, LinearLayoutManager.VERTICAL, false));
            recyclerView.setItemAnimator(new DefaultItemAnimator());
            recyclerView.setAdapter(new BaseRecyclerAdapter<Integer>(loadModels(), R.layout.listitem_using_snaphelper) {
                @Override
                protected void onBindViewHolder(SmartViewHolder holder, Integer model, int position) {
                    holder.image(R.id.imageView, model);
                }
            });
            SnapHelper snapHelper = new PagerSnapHelper();
            snapHelper.attachToRecyclerView(recyclerView);
        }

    }

    private Collection<Integer> loadModels() {
        return Arrays.asList(
                R.mipmap.image_weibo_home_1,
                R.mipmap.image_weibo_home_2,
     
Download .txt
gitextract_vxfl1tfg/

├── .gitignore
├── LICENSE
├── README.md
├── README_EN.md
├── app/
│   ├── .gitignore
│   ├── build.gradle
│   ├── debug.keystore
│   ├── proguard-rules.pro
│   └── src/
│       ├── androidTest/
│       │   └── java/
│       │       └── com/
│       │           └── scwang/
│       │               └── refreshlayout/
│       │                   └── ExampleInstrumentedTest.java
│       ├── main/
│       │   ├── AndroidManifest.xml
│       │   ├── java/
│       │   │   └── com/
│       │   │       └── scwang/
│       │   │           └── refreshlayout/
│       │   │               ├── App.java
│       │   │               ├── activity/
│       │   │               │   ├── ExperimentActivity.java
│       │   │               │   ├── IndexMainActivity.java
│       │   │               │   ├── practice/
│       │   │               │   │   ├── BannerPracticeActivity.java
│       │   │               │   │   ├── FeedlistPracticeActivity.java
│       │   │               │   │   ├── ProfilePracticeActivity.java
│       │   │               │   │   ├── QQBrowserPracticeActivity.java
│       │   │               │   │   ├── RepastPracticeActivity.java
│       │   │               │   │   ├── WebviewPracticeActivity.java
│       │   │               │   │   └── WeiboPracticeActivity.java
│       │   │               │   ├── style/
│       │   │               │   │   ├── BezierStyleActivity.java
│       │   │               │   │   ├── CircleStyleActivity.java
│       │   │               │   │   ├── ClassicsStyleActivity.java
│       │   │               │   │   ├── DeliveryStyleActivity.java
│       │   │               │   │   ├── DropboxStyleActivity.java
│       │   │               │   │   ├── FlyRefreshStyleActivity.java
│       │   │               │   │   ├── FunGameBattleCityStyleActivity.java
│       │   │               │   │   ├── FunGameHitBlockStyleActivity.java
│       │   │               │   │   ├── MaterialStyleActivity.java
│       │   │               │   │   ├── PhoenixStyleActivity.java
│       │   │               │   │   ├── StoreHouseStyleActivity.java
│       │   │               │   │   ├── TaurusStyleActivity.java
│       │   │               │   │   ├── WaterDropStyleActivity.java
│       │   │               │   │   └── WaveSwipStyleActivity.java
│       │   │               │   └── using/
│       │   │               │       ├── AssignCodeUsingActivity.java
│       │   │               │       ├── AssignDefaultUsingActivity.java
│       │   │               │       ├── AssignXmlUsingActivity.java
│       │   │               │       ├── BasicUsingActivity.java
│       │   │               │       ├── CustomUsingActivity.java
│       │   │               │       ├── ListenerUsingActivity.java
│       │   │               │       ├── NestLayoutUsingActivity.java
│       │   │               │       ├── OverScrollUsingActivity.java
│       │   │               │       └── SnapHelperUsingActivity.java
│       │   │               ├── adapter/
│       │   │               │   ├── BaseRecyclerAdapter.java
│       │   │               │   └── SmartViewHolder.java
│       │   │               ├── fragment/
│       │   │               │   ├── RefreshPractiveFragment.java
│       │   │               │   ├── RefreshStylesFragment.java
│       │   │               │   └── RefreshUsingFragment.java
│       │   │               ├── util/
│       │   │               │   ├── DynamicTimeFormat.java
│       │   │               │   └── StatusBarUtil.java
│       │   │               └── widget/
│       │   │                   └── RefreshLayout.java
│       │   └── res/
│       │       ├── drawable/
│       │       │   ├── bc_background_panel.xml
│       │       │   ├── ic_arrow_back_dark_24dp.xml
│       │       │   ├── ic_arrow_back_gray_24dp.xml
│       │       │   ├── ic_arrow_back_white_24dp.xml
│       │       │   ├── ic_chevron_right.xml
│       │       │   ├── ic_chevron_right_gray.xml
│       │       │   ├── ic_feed_list_favorite.xml
│       │       │   ├── ic_feed_list_mail.xml
│       │       │   ├── ic_feed_list_photo.xml
│       │       │   ├── ic_fly_refresh_folder.xml
│       │       │   ├── ic_fly_refresh_info.xml
│       │       │   ├── ic_fly_refresh_poll.xml
│       │       │   ├── ic_fly_refresh_send.xml
│       │       │   ├── ic_fly_refresh_smartphone.xml
│       │       │   ├── ic_index_dashboard.xml
│       │       │   ├── ic_index_home.xml
│       │       │   ├── ic_index_notifications.xml
│       │       │   ├── ic_list_divider.xml
│       │       │   └── ic_progress_hojder.xml
│       │       ├── layout/
│       │       │   ├── activity_experiment.xml
│       │       │   ├── activity_fly_refresh.xml
│       │       │   ├── activity_fly_refresh_item.xml
│       │       │   ├── activity_index_main.xml
│       │       │   ├── activity_practice_banner.xml
│       │       │   ├── activity_practice_feedlist.xml
│       │       │   ├── activity_practice_profile.xml
│       │       │   ├── activity_practice_qqbrowser.xml
│       │       │   ├── activity_practice_repast.xml
│       │       │   ├── activity_practice_webview.xml
│       │       │   ├── activity_practice_weibo.xml
│       │       │   ├── activity_style_bezier.xml
│       │       │   ├── activity_style_circle.xml
│       │       │   ├── activity_style_classics.xml
│       │       │   ├── activity_style_delivery.xml
│       │       │   ├── activity_style_dropbox.xml
│       │       │   ├── activity_style_fungame_battlecity.xml
│       │       │   ├── activity_style_fungame_hitblock.xml
│       │       │   ├── activity_style_material.xml
│       │       │   ├── activity_style_phoenix.xml
│       │       │   ├── activity_style_storehouse.xml
│       │       │   ├── activity_style_taurus.xml
│       │       │   ├── activity_style_water_drop.xml
│       │       │   ├── activity_style_wave_swip.xml
│       │       │   ├── activity_using_assign_code.xml
│       │       │   ├── activity_using_assign_default.xml
│       │       │   ├── activity_using_assign_xml.xml
│       │       │   ├── activity_using_basic.xml
│       │       │   ├── activity_using_custom.xml
│       │       │   ├── activity_using_listener.xml
│       │       │   ├── activity_using_overscroll.xml
│       │       │   ├── activity_using_region.xml
│       │       │   ├── activity_using_snaphelper.xml
│       │       │   ├── fragment_refresh_practive.xml
│       │       │   ├── fragment_refresh_styles.xml
│       │       │   ├── fragment_refresh_using.xml
│       │       │   ├── listitem_movie_banner.xml
│       │       │   ├── listitem_movie_header.xml
│       │       │   ├── listitem_movie_item.xml
│       │       │   ├── listitem_practive_repast.xml
│       │       │   ├── listitem_style_delivery.xml
│       │       │   └── listitem_using_snaphelper.xml
│       │       ├── menu/
│       │       │   └── navigation.xml
│       │       ├── values/
│       │       │   ├── colors.xml
│       │       │   ├── dimens.xml
│       │       │   ├── strings.xml
│       │       │   └── styles.xml
│       │       ├── values-v19/
│       │       │   └── styles.xml
│       │       └── values-v21/
│       │           └── styles.xml
│       └── test/
│           └── java/
│               └── com/
│                   └── scwang/
│                       └── refreshlayout/
│                           └── ExampleUnitTest.java
├── art/
│   ├── UMLRefreshLayout.classdiagram
│   ├── app-debug.apk
│   ├── md_custom.md
│   ├── md_donationlist.md
│   ├── md_multitouch.md
│   ├── md_property.md
│   ├── md_smart.md
│   └── md_update.md
├── bintrayUpload.bat
├── build.gradle
├── refresh-footer/
│   ├── .gitignore
│   ├── build.gradle
│   ├── proguard-rules.pro
│   └── src/
│       ├── androidTest/
│       │   └── java/
│       │       └── com/
│       │           └── scwang/
│       │               └── smartrefresh/
│       │                   └── footer/
│       │                       └── ExampleInstrumentedTest.java
│       ├── main/
│       │   ├── AndroidManifest.xml
│       │   └── res/
│       │       └── values/
│       │           ├── attrs.xml
│       │           └── strings.xml
│       └── test/
│           └── java/
│               └── com/
│                   └── scwang/
│                       └── smartrefresh/
│                           └── footer/
│                               └── ExampleUnitTest.java
├── refresh-header/
│   ├── .gitignore
│   ├── build.gradle
│   ├── proguard-rules.pro
│   └── src/
│       ├── androidTest/
│       │   └── java/
│       │       └── com/
│       │           └── scwang/
│       │               └── smartrefresh/
│       │                   └── header/
│       │                       └── ExampleInstrumentedTest.java
│       ├── main/
│       │   ├── AndroidManifest.xml
│       │   ├── java/
│       │   │   └── com/
│       │   │       └── scwang/
│       │   │           └── smartrefresh/
│       │   │               └── header/
│       │   │                   ├── CircleHeader.java
│       │   │                   ├── DeliveryHeader.java
│       │   │                   ├── DropboxHeader.java
│       │   │                   ├── FlyRefreshHeader.java
│       │   │                   ├── FunGameBattleCityHeader.java
│       │   │                   ├── FunGameHitBlockHeader.java
│       │   │                   ├── MaterialHeader.java
│       │   │                   ├── PhoenixHeader.java
│       │   │                   ├── StoreHouseHeader.java
│       │   │                   ├── TaurusHeader.java
│       │   │                   ├── WaterDropHeader.java
│       │   │                   ├── WaveSwipeHeader.java
│       │   │                   ├── flyrefresh/
│       │   │                   │   ├── FlyView.java
│       │   │                   │   ├── MountanScenceView.java
│       │   │                   │   ├── PathInterpolatorCompat.java
│       │   │                   │   ├── PathInterpolatorCompatApi21.java
│       │   │                   │   ├── PathInterpolatorCompatBase.java
│       │   │                   │   └── PathInterpolatorGingerbread.java
│       │   │                   ├── fungame/
│       │   │                   │   ├── FunGameBase.java
│       │   │                   │   ├── FunGameHeader.java
│       │   │                   │   └── FunGameView.java
│       │   │                   ├── internal/
│       │   │                   │   ├── FastOutSlowInInterpolator.java
│       │   │                   │   ├── LookupTableInterpolator.java
│       │   │                   │   └── MaterialProgressDrawable.java
│       │   │                   ├── material/
│       │   │                   │   └── CircleImageView.java
│       │   │                   ├── storehouse/
│       │   │                   │   ├── StoreHouseBarItem.java
│       │   │                   │   └── StoreHousePath.java
│       │   │                   ├── waterdrop/
│       │   │                   │   ├── Circle.java
│       │   │                   │   └── WaterDropView.java
│       │   │                   └── waveswipe/
│       │   │                       ├── AnimationImageView.java
│       │   │                       ├── DisplayUtil.java
│       │   │                       ├── DropBounceInterpolator.java
│       │   │                       └── WaveView.java
│       │   └── res/
│       │       └── values/
│       │           ├── attrs.xml
│       │           └── strings.xml
│       └── test/
│           └── java/
│               └── com/
│                   └── scwang/
│                       └── smartrefresh/
│                           └── header/
│                               └── ExampleUnitTest.java
├── refresh-layout/
│   ├── .gitignore
│   ├── build.gradle
│   ├── proguard-rules.pro
│   └── src/
│       ├── androidTest/
│       │   └── java/
│       │       └── com/
│       │           └── scwang/
│       │               └── smartrefresh/
│       │                   └── layout/
│       │                       └── ExampleInstrumentedTest.java
│       ├── main/
│       │   ├── AndroidManifest.xml
│       │   ├── java/
│       │   │   ├── android/
│       │   │   │   └── support/
│       │   │   │       └── v4/
│       │   │   │           └── view/
│       │   │   │               └── PagerAdapterWrapper.java
│       │   │   └── com/
│       │   │       └── scwang/
│       │   │           └── smartrefresh/
│       │   │               └── layout/
│       │   │                   ├── SmartRefreshLayout.java
│       │   │                   ├── api/
│       │   │                   │   ├── DefaultRefreshFooterCreater.java
│       │   │                   │   ├── DefaultRefreshHeaderCreater.java
│       │   │                   │   ├── RefreshContent.java
│       │   │                   │   ├── RefreshFooter.java
│       │   │                   │   ├── RefreshHeader.java
│       │   │                   │   ├── RefreshInternal.java
│       │   │                   │   ├── RefreshKernel.java
│       │   │                   │   ├── RefreshLayout.java
│       │   │                   │   └── ScrollBoundaryDecider.java
│       │   │                   ├── constant/
│       │   │                   │   ├── DimensionStatus.java
│       │   │                   │   ├── RefreshState.java
│       │   │                   │   └── SpinnerStyle.java
│       │   │                   ├── footer/
│       │   │                   │   ├── BallPulseFooter.java
│       │   │                   │   ├── ClassicsFooter.java
│       │   │                   │   ├── FalsifyFooter.java
│       │   │                   │   └── ballpulse/
│       │   │                   │       └── BallPulseView.java
│       │   │                   ├── header/
│       │   │                   │   ├── BezierRadarHeader.java
│       │   │                   │   ├── ClassicsHeader.java
│       │   │                   │   ├── FalsifyHeader.java
│       │   │                   │   └── bezierradar/
│       │   │                   │       ├── RippleView.java
│       │   │                   │       ├── RoundDotView.java
│       │   │                   │       ├── RoundProgressView.java
│       │   │                   │       └── WaveView.java
│       │   │                   ├── impl/
│       │   │                   │   ├── RefreshContentWrapper.java
│       │   │                   │   ├── RefreshFooterWrapper.java
│       │   │                   │   ├── RefreshHeaderWrapper.java
│       │   │                   │   └── ScrollBoundaryDeciderAdapter.java
│       │   │                   ├── internal/
│       │   │                   │   ├── ProgressDrawable.java
│       │   │                   │   └── pathview/
│       │   │                   │       ├── PathParser.java
│       │   │                   │       ├── PathsDrawable.java
│       │   │                   │       └── PathsView.java
│       │   │                   ├── listener/
│       │   │                   │   ├── AnimationEndListener.java
│       │   │                   │   ├── OnLoadmoreListener.java
│       │   │                   │   ├── OnMultiPurposeListener.java
│       │   │                   │   ├── OnRefreshListener.java
│       │   │                   │   ├── OnRefreshLoadmoreListener.java
│       │   │                   │   ├── OnStateChangedListener.java
│       │   │                   │   └── SimpleMultiPurposeListener.java
│       │   │                   └── util/
│       │   │                       ├── ColorUtils.java
│       │   │                       ├── DelayedRunable.java
│       │   │                       ├── DensityUtil.java
│       │   │                       ├── ScrollBoundaryUtil.java
│       │   │                       └── ViscousFluidInterpolator.java
│       │   └── res/
│       │       └── values/
│       │           ├── attrs.xml
│       │           └── strings.xml
│       └── test/
│           └── java/
│               └── com/
│                   └── scwang/
│                       └── smartrefresh/
│                           └── layout/
│                               └── ExampleUnitTest.java
└── settings.gradle
Download .txt
SYMBOL INDEX (1644 symbols across 127 files)

FILE: app/src/androidTest/java/com/scwang/refreshlayout/ExampleInstrumentedTest.java
  class ExampleInstrumentedTest (line 17) | @RunWith(AndroidJUnit4.class)
    method useAppContext (line 19) | @Test

FILE: app/src/main/java/com/scwang/refreshlayout/App.java
  class App (line 21) | public class App extends Application {
    method createRefreshHeader (line 26) | @NonNull
    method onCreate (line 35) | @Override

FILE: app/src/main/java/com/scwang/refreshlayout/activity/ExperimentActivity.java
  class ExperimentActivity (line 20) | public class ExperimentActivity extends AppCompatActivity {
    method onCreate (line 22) | @Override
    method buildData (line 42) | protected Collection<Void> buildData() {

FILE: app/src/main/java/com/scwang/refreshlayout/activity/IndexMainActivity.java
  class IndexMainActivity (line 19) | public class IndexMainActivity extends AppCompatActivity implements OnNa...
    type TabFragment (line 21) | private enum TabFragment {
      method TabFragment (line 31) | TabFragment(@IdRes int menuId, Class<? extends Fragment> clazz) {
      method fragment (line 36) | @NonNull
      method from (line 49) | public static TabFragment from(int itemId) {
      method onDestroy (line 58) | public static void onDestroy() {
    method onCreate (line 65) | @Override
    method onDestroy (line 78) | @Override
    method onNavigationItemSelected (line 84) | @Override

FILE: app/src/main/java/com/scwang/refreshlayout/activity/practice/BannerPracticeActivity.java
  class BannerPracticeActivity (line 34) | @SuppressWarnings("ALL")
    method onCreate (line 39) | @Override
    class QuickAdapter (line 92) | public class QuickAdapter extends BaseQuickAdapter<Movie, BaseViewHold...
      method QuickAdapter (line 93) | public QuickAdapter() {
      method convert (line 97) | @Override
    class GlideImageLoader (line 107) | public class GlideImageLoader extends ImageLoader {
      method displayImage (line 108) | @Override
    class Movie (line 114) | public static class Movie {
    class BannerItem (line 123) | public static class BannerItem {
      method BannerItem (line 128) | public BannerItem() {
      method BannerItem (line 131) | public BannerItem(String title, int pic) {

FILE: app/src/main/java/com/scwang/refreshlayout/activity/practice/FeedlistPracticeActivity.java
  class FeedlistPracticeActivity (line 14) | public class FeedlistPracticeActivity extends AppCompatActivity {
    method onCreate (line 18) | @Override

FILE: app/src/main/java/com/scwang/refreshlayout/activity/practice/ProfilePracticeActivity.java
  class ProfilePracticeActivity (line 14) | public class ProfilePracticeActivity extends AppCompatActivity {
    method onCreate (line 17) | @Override

FILE: app/src/main/java/com/scwang/refreshlayout/activity/practice/QQBrowserPracticeActivity.java
  class QQBrowserPracticeActivity (line 17) | public class QQBrowserPracticeActivity extends AppCompatActivity {
    method onCreate (line 19) | @SuppressLint("SetJavaScriptEnabled")

FILE: app/src/main/java/com/scwang/refreshlayout/activity/practice/RepastPracticeActivity.java
  class RepastPracticeActivity (line 25) | public class RepastPracticeActivity extends AppCompatActivity {
    class Model (line 28) | private class Model {
    method onCreate (line 38) | @Override
    method loadModels (line 114) | private Collection<Model> loadModels() {

FILE: app/src/main/java/com/scwang/refreshlayout/activity/practice/WebviewPracticeActivity.java
  class WebviewPracticeActivity (line 22) | public class WebviewPracticeActivity extends AppCompatActivity {
    method onCreate (line 24) | @SuppressLint("SetJavaScriptEnabled")

FILE: app/src/main/java/com/scwang/refreshlayout/activity/practice/WeiboPracticeActivity.java
  class WeiboPracticeActivity (line 21) | public class WeiboPracticeActivity extends AppCompatActivity {
    method onCreate (line 26) | @Override

FILE: app/src/main/java/com/scwang/refreshlayout/activity/style/BezierStyleActivity.java
  class BezierStyleActivity (line 26) | public class BezierStyleActivity extends AppCompatActivity implements Ad...
    type Item (line 28) | private enum Item {
      method Item (line 39) | Item(String name) {
    method onCreate (line 49) | @Override
    method onItemClick (line 86) | @Override
    method setThemeColor (line 117) | private void setThemeColor(int colorPrimary, int colorPrimaryDark) {

FILE: app/src/main/java/com/scwang/refreshlayout/activity/style/CircleStyleActivity.java
  class CircleStyleActivity (line 25) | public class CircleStyleActivity extends AppCompatActivity implements Ad...
    type Item (line 27) | private enum Item {
      method Item (line 36) | Item(String name) {
    method onCreate (line 45) | @Override
    method onItemClick (line 81) | @Override
    method setThemeColor (line 106) | private void setThemeColor(int colorPrimary, int colorPrimaryDark) {

FILE: app/src/main/java/com/scwang/refreshlayout/activity/style/ClassicsStyleActivity.java
  class ClassicsStyleActivity (line 35) | public class ClassicsStyleActivity extends AppCompatActivity implements ...
    type Item (line 39) | private enum Item {
      method Item (line 53) | Item(String name) {
    method onCreate (line 65) | @Override
    method onItemClick (line 116) | @Override
    method setThemeColor (line 174) | private void setThemeColor(int colorPrimary, int colorPrimaryDark) {

FILE: app/src/main/java/com/scwang/refreshlayout/activity/style/DeliveryStyleActivity.java
  class DeliveryStyleActivity (line 24) | public class DeliveryStyleActivity extends AppCompatActivity implements ...
    type Item (line 26) | private enum Item {
      method Item (line 34) | Item(String name) {
    method onCreate (line 43) | @Override
    method onItemClick (line 84) | @Override
    method setThemeColor (line 118) | private void setThemeColor(int colorPrimary, int colorPrimaryDark) {

FILE: app/src/main/java/com/scwang/refreshlayout/activity/style/DropboxStyleActivity.java
  class DropboxStyleActivity (line 25) | public class DropboxStyleActivity extends AppCompatActivity implements A...
    type Item (line 27) | private enum Item {
      method Item (line 35) | Item(String name) {
    method onCreate (line 44) | @Override
    method onItemClick (line 80) | @Override
    method setThemeColor (line 103) | private void setThemeColor(int colorPrimary, int colorPrimaryDark) {

FILE: app/src/main/java/com/scwang/refreshlayout/activity/style/FlyRefreshStyleActivity.java
  class FlyRefreshStyleActivity (line 51) | public class FlyRefreshStyleActivity extends AppCompatActivity {
    method onCreate (line 68) | @Override
    method updateTheme (line 207) | private void updateTheme() {
    method initDataSet (line 232) | private void initDataSet() {
    method addItemData (line 238) | private void addItemData() {
    method bounceAnimateView (line 245) | private void bounceAnimateView(final View view) {
    class ItemAdapter (line 262) | private class ItemAdapter extends RecyclerView.Adapter<ItemViewHolder> {
      method ItemAdapter (line 267) | public ItemAdapter(Context context) {
      method onCreateViewHolder (line 272) | @Override
      method onBindViewHolder (line 278) | @Override
      method getItemCount (line 289) | @Override
    class ItemViewHolder (line 295) | private static class ItemViewHolder extends RecyclerView.ViewHolder {
      method ItemViewHolder (line 301) | public ItemViewHolder(View itemView) {
    class ItemData (line 310) | public class ItemData {
      method ItemData (line 316) | public ItemData(int color, int icon, String title, Date time) {
      method ItemData (line 323) | public ItemData(int icon, String title) {
    class SampleItemAnimator (line 328) | public class SampleItemAnimator extends BaseItemAnimator {
      method preAnimateAddImpl (line 330) | @Override
      method animateRemoveImpl (line 340) | @Override
      method animateAddImpl (line 344) | @Override
    class ElasticOutInterpolator (line 364) | public class ElasticOutInterpolator implements Interpolator {
      method getInterpolation (line 366) | @Override

FILE: app/src/main/java/com/scwang/refreshlayout/activity/style/FunGameBattleCityStyleActivity.java
  class FunGameBattleCityStyleActivity (line 25) | public class FunGameBattleCityStyleActivity extends AppCompatActivity im...
    type Item (line 27) | private enum Item {
      method Item (line 35) | Item(String name) {
    method onCreate (line 44) | @Override
    method onItemClick (line 80) | @Override
    method setThemeColor (line 102) | private void setThemeColor(int colorPrimary, int colorPrimaryDark) {

FILE: app/src/main/java/com/scwang/refreshlayout/activity/style/FunGameHitBlockStyleActivity.java
  class FunGameHitBlockStyleActivity (line 25) | public class FunGameHitBlockStyleActivity extends AppCompatActivity impl...
    type Item (line 27) | private enum Item {
      method Item (line 35) | Item(String name) {
    method onCreate (line 44) | @Override
    method onItemClick (line 81) | @Override
    method setThemeColor (line 103) | private void setThemeColor(int colorPrimary, int colorPrimaryDark) {

FILE: app/src/main/java/com/scwang/refreshlayout/activity/style/MaterialStyleActivity.java
  class MaterialStyleActivity (line 26) | public class MaterialStyleActivity extends AppCompatActivity implements ...
    type Item (line 30) | private enum Item {
      method Item (line 41) | Item(String name) {
    method onCreate (line 51) | @Override
    method onItemClick (line 89) | @Override
    method setThemeColor (line 120) | private void setThemeColor(int colorPrimary, int colorPrimaryDark) {

FILE: app/src/main/java/com/scwang/refreshlayout/activity/style/PhoenixStyleActivity.java
  class PhoenixStyleActivity (line 29) | public class PhoenixStyleActivity extends AppCompatActivity implements A...
    type Item (line 31) | private enum Item {
      method Item (line 40) | Item(String name) {
    method onCreate (line 53) | @Override
    method onItemClick (line 115) | @Override
    method setThemeColor (line 144) | private void setThemeColor(int colorPrimary, int colorPrimaryDark) {

FILE: app/src/main/java/com/scwang/refreshlayout/activity/style/StoreHouseStyleActivity.java
  class StoreHouseStyleActivity (line 25) | public class StoreHouseStyleActivity extends AppCompatActivity implement...
    type Item (line 27) | private enum Item {
      method Item (line 34) | Item(String name) {
    method onCreate (line 43) | @Override
    method onItemClick (line 79) | @Override
    method setThemeColor (line 98) | private void setThemeColor(int colorPrimary, int colorPrimaryDark) {

FILE: app/src/main/java/com/scwang/refreshlayout/activity/style/TaurusStyleActivity.java
  class TaurusStyleActivity (line 29) | public class TaurusStyleActivity extends AppCompatActivity implements Ad...
    type Item (line 31) | private enum Item {
      method Item (line 40) | Item(String name) {
    method onCreate (line 53) | @Override
    method onItemClick (line 115) | @Override
    method setThemeColor (line 144) | private void setThemeColor(int colorPrimary, int colorPrimaryDark) {

FILE: app/src/main/java/com/scwang/refreshlayout/activity/style/WaterDropStyleActivity.java
  class WaterDropStyleActivity (line 25) | public class WaterDropStyleActivity extends AppCompatActivity implements...
    type Item (line 27) | private enum Item {
      method Item (line 37) | Item(String name) {
    method onCreate (line 46) | @Override
    method onItemClick (line 82) | @Override
    method setThemeColor (line 111) | private void setThemeColor(int colorPrimary, int colorPrimaryDark) {

FILE: app/src/main/java/com/scwang/refreshlayout/activity/style/WaveSwipStyleActivity.java
  class WaveSwipStyleActivity (line 25) | public class WaveSwipStyleActivity extends AppCompatActivity implements ...
    type Item (line 27) | private enum Item {
      method Item (line 36) | Item(String name) {
    method onCreate (line 45) | @Override
    method onItemClick (line 81) | @Override
    method setThemeColor (line 106) | private void setThemeColor(int colorPrimary, int colorPrimaryDark) {

FILE: app/src/main/java/com/scwang/refreshlayout/activity/using/AssignCodeUsingActivity.java
  class AssignCodeUsingActivity (line 19) | public class AssignCodeUsingActivity extends AppCompatActivity {
    method onCreate (line 23) | @Override

FILE: app/src/main/java/com/scwang/refreshlayout/activity/using/AssignDefaultUsingActivity.java
  class AssignDefaultUsingActivity (line 27) | public class AssignDefaultUsingActivity extends AppCompatActivity {
    method createRefreshHeader (line 37) | @NonNull
    method createRefreshFooter (line 47) | @NonNull
    method onCreate (line 59) | @Override

FILE: app/src/main/java/com/scwang/refreshlayout/activity/using/AssignXmlUsingActivity.java
  class AssignXmlUsingActivity (line 16) | public class AssignXmlUsingActivity extends AppCompatActivity {
    method onCreate (line 20) | @Override

FILE: app/src/main/java/com/scwang/refreshlayout/activity/using/BasicUsingActivity.java
  class BasicUsingActivity (line 26) | public class BasicUsingActivity extends AppCompatActivity {
    method onCreate (line 30) | @Override
    method initData (line 90) | private Collection<Void> initData() {

FILE: app/src/main/java/com/scwang/refreshlayout/activity/using/CustomUsingActivity.java
  class CustomUsingActivity (line 38) | public class CustomUsingActivity extends AppCompatActivity {
    method onCreate (line 44) | @Override
    method initData (line 94) | private Collection<Void> initData() {
    class ClassicsHeader (line 98) | public static class ClassicsHeader extends LinearLayout implements Ref...
      method ClassicsHeader (line 105) | public ClassicsHeader(Context context) {
      method ClassicsHeader (line 109) | public ClassicsHeader(Context context, AttributeSet attrs) {
      method ClassicsHeader (line 113) | public ClassicsHeader(Context context, AttributeSet attrs, int defSt...
      method initView (line 117) | private void initView(Context context) {
      method getView (line 131) | @NonNull
      method getSpinnerStyle (line 135) | @Override
      method onStartAnimator (line 139) | @Override
      method onFinish (line 143) | @Override
      method onStateChanged (line 153) | @Override
      method isSupportHorizontalDrag (line 174) | @Override
      method onInitialized (line 178) | @Override
      method onHorizontalDrag (line 181) | @Override
      method onPullingDown (line 184) | @Override
      method onReleasing (line 187) | @Override
      method setPrimaryColors (line 190) | @Override

FILE: app/src/main/java/com/scwang/refreshlayout/activity/using/ListenerUsingActivity.java
  class ListenerUsingActivity (line 25) | public class ListenerUsingActivity extends AppCompatActivity {
    method onCreate (line 44) | @Override
    method updateContent (line 154) | private void updateContent() {

FILE: app/src/main/java/com/scwang/refreshlayout/activity/using/NestLayoutUsingActivity.java
  class NestLayoutUsingActivity (line 21) | public class NestLayoutUsingActivity extends AppCompatActivity implement...
    method onCreate (line 32) | @Override
    method onItemClick (line 72) | @Override

FILE: app/src/main/java/com/scwang/refreshlayout/activity/using/OverScrollUsingActivity.java
  class OverScrollUsingActivity (line 17) | public class OverScrollUsingActivity extends AppCompatActivity {
    method onCreate (line 19) | @Override

FILE: app/src/main/java/com/scwang/refreshlayout/activity/using/SnapHelperUsingActivity.java
  class SnapHelperUsingActivity (line 25) | public class SnapHelperUsingActivity extends AppCompatActivity {
    method onCreate (line 27) | @Override
    method loadModels (line 58) | private Collection<Integer> loadModels() {

FILE: app/src/main/java/com/scwang/refreshlayout/adapter/BaseRecyclerAdapter.java
  class BaseRecyclerAdapter (line 22) | public abstract class BaseRecyclerAdapter<T> extends RecyclerView.Adapte...
    method BaseRecyclerAdapter (line 31) | public BaseRecyclerAdapter(@LayoutRes int layoutId) {
    method BaseRecyclerAdapter (line 37) | public BaseRecyclerAdapter(Collection<T> collection, @LayoutRes int la...
    method BaseRecyclerAdapter (line 43) | public BaseRecyclerAdapter(Collection<T> collection, @LayoutRes int la...
    method onCreateViewHolder (line 52) | @Override
    method onBindViewHolder (line 57) | @Override
    method onBindViewHolder (line 62) | protected abstract void onBindViewHolder(SmartViewHolder holder, T mod...
    method getItemCount (line 64) | @Override
    method setOnItemClickListener (line 72) | public BaseRecyclerAdapter<T> setOnItemClickListener(AdapterView.OnIte...
    method refresh (line 77) | public BaseRecyclerAdapter<T> refresh(Collection<T> collection) {
    method loadmore (line 85) | public BaseRecyclerAdapter<T> loadmore(Collection<T> collection) {
    method registerDataSetObserver (line 101) | public void registerDataSetObserver(DataSetObserver observer) {
    method unregisterDataSetObserver (line 105) | public void unregisterDataSetObserver(DataSetObserver observer) {
    method notifyListDataSetChanged (line 113) | public void notifyListDataSetChanged() {
    method notifyDataSetInvalidated (line 122) | public void notifyDataSetInvalidated() {
    method areAllItemsEnabled (line 126) | public boolean areAllItemsEnabled() {
    method isEnabled (line 130) | public boolean isEnabled(int position) {
    method getView (line 134) | @Override
    method getItemViewType (line 148) | public int getItemViewType(int position) {
    method getViewTypeCount (line 152) | public int getViewTypeCount() {
    method isEmpty (line 156) | public boolean isEmpty() {
    method getItem (line 160) | @Override
    method getCount (line 165) | @Override

FILE: app/src/main/java/com/scwang/refreshlayout/adapter/SmartViewHolder.java
  class SmartViewHolder (line 13) | public class SmartViewHolder extends RecyclerView.ViewHolder implements ...
    method SmartViewHolder (line 17) | public SmartViewHolder(View itemView, AdapterView.OnItemClickListener ...
    method onClick (line 39) | @Override
    method findViewById (line 49) | private View findViewById(int id) {
    method text (line 53) | public SmartViewHolder text(int id, CharSequence sequence) {
    method text (line 61) | public SmartViewHolder text(int id,@StringRes int stringRes) {
    method textColorId (line 69) | public SmartViewHolder textColorId(int id, int colorId) {
    method image (line 77) | public SmartViewHolder image(int id, int imageId) {

FILE: app/src/main/java/com/scwang/refreshlayout/fragment/RefreshPractiveFragment.java
  class RefreshPractiveFragment (line 38) | public class RefreshPractiveFragment extends Fragment implements Adapter...
    type Item (line 40) | private enum Item {
      method Item (line 51) | Item(String name, Class<?> clazz) {
    method onCreateView (line 58) | @Override
    method onViewCreated (line 63) | @Override
    method onItemClick (line 86) | @Override

FILE: app/src/main/java/com/scwang/refreshlayout/fragment/RefreshStylesFragment.java
  class RefreshStylesFragment (line 48) | public class RefreshStylesFragment extends Fragment implements AdapterVi...
    type Item (line 50) | private enum Item {
      method Item (line 68) | Item(@StringRes int nameId, Class<?> clazz) {
    method onCreateView (line 75) | @Override
    method onViewCreated (line 80) | @Override
    method onItemClick (line 111) | @Override

FILE: app/src/main/java/com/scwang/refreshlayout/fragment/RefreshUsingFragment.java
  class RefreshUsingFragment (line 39) | public class RefreshUsingFragment extends Fragment implements AdapterVie...
    type Item (line 41) | private enum Item {
      method Item (line 53) | Item(String name, Class<?> clazz) {
    method onCreateView (line 59) | @Override
    method onViewCreated (line 64) | @Override
    method onItemClick (line 86) | @Override

FILE: app/src/main/java/com/scwang/refreshlayout/util/DynamicTimeFormat.java
  class DynamicTimeFormat (line 16) | public class DynamicTimeFormat extends SimpleDateFormat {
    method DynamicTimeFormat (line 24) | public DynamicTimeFormat() {
    method DynamicTimeFormat (line 28) | public DynamicTimeFormat(String format) {
    method DynamicTimeFormat (line 33) | public DynamicTimeFormat(String yearFormat, String dateFormat, String ...
    method DynamicTimeFormat (line 37) | public DynamicTimeFormat(String format, String yearFormat, String date...
    method format (line 42) | @Override

FILE: app/src/main/java/com/scwang/refreshlayout/util/StatusBarUtil.java
  class StatusBarUtil (line 25) | @SuppressWarnings("unused")
    method immersive (line 33) | public static void immersive(Activity activity) {
    method immersive (line 37) | public static void immersive(Activity activity, int color, @FloatRange...
    method immersive (line 41) | public static void immersive(Activity activity, int color) {
    method immersive (line 45) | public static void immersive(Window window) {
    method immersive (line 49) | public static void immersive(Window window, int color) {
    method immersive (line 53) | public static void immersive(Window window, int color, @FloatRange(fro...
    method darkMode (line 76) | public static void darkMode(Activity activity, boolean dark) {
    method darkMode (line 87) | public static void darkMode(Activity activity) {
    method darkMode (line 91) | public static void darkMode(Activity activity, int color, @FloatRange(...
    method darkMode (line 96) | public static void darkMode(Window window, int color, @FloatRange(from...
    method darkModeForM (line 126) | @RequiresApi(Build.VERSION_CODES.M)
    method darkModeForFlyme4 (line 145) | public static boolean darkModeForFlyme4(Window window, boolean dark) {
    method darkModeForMIUI6 (line 177) | public static boolean darkModeForMIUI6(Window window, boolean darkmode) {
    method isFlyme4Later (line 194) | public static boolean isFlyme4Later() {
    method isMIUI6Later (line 201) | public static boolean isMIUI6Later() {
    method setPadding (line 217) | public static void setPadding(Context context, View view) {
    method setPaddingSmart (line 224) | public static void setPaddingSmart(Context context, View view) {
    method setHeightAndPadding (line 236) | public static void setHeightAndPadding(Context context, View view) {
    method setMargin (line 245) | public static void setMargin(Context context, View view) {
    method setTranslucentView (line 257) | public static void setTranslucentView(ViewGroup container, int color, ...
    method mixtureColor (line 274) | public static int mixtureColor(int color, @FloatRange(from = 0.0, to =...
    method getStatusBarHeight (line 280) | public static int getStatusBarHeight(Context context) {

FILE: app/src/main/java/com/scwang/refreshlayout/widget/RefreshLayout.java
  class RefreshLayout (line 35) | public class RefreshLayout extends ViewGroup implements GestureDetector....
    method RefreshLayout (line 54) | public RefreshLayout(Context context) {
    method RefreshLayout (line 59) | public RefreshLayout(Context context, AttributeSet attrs) {
    method RefreshLayout (line 64) | public RefreshLayout(Context context, AttributeSet attrs, int defStyle...
    method RefreshLayout (line 69) | @TargetApi(Build.VERSION_CODES.LOLLIPOP)
    method initView (line 75) | private void initView(Context context) {
    method onFinishInflate (line 84) | @Override
    method onMeasure (line 99) | @Override
    method onLayout (line 139) | @Override
    method generateDefaultLayoutParams (line 161) | @Override
    method generateLayoutParams (line 166) | @Override
    method generateLayoutParams (line 171) | @Override
    class LayoutParams (line 176) | public static class LayoutParams extends MarginLayoutParams {
      method LayoutParams (line 178) | public LayoutParams(Context c, AttributeSet attrs) {
      method LayoutParams (line 182) | public LayoutParams(int width, int height) {
      method LayoutParams (line 186) | public LayoutParams(MarginLayoutParams source) {
      method LayoutParams (line 190) | public LayoutParams(ViewGroup.LayoutParams source) {
    method dispatchTouchEvent (line 213) | @Override
    method computeScroll (line 235) | @Override
    method scrollTo (line 260) | @Override
    method onDown (line 267) | @Override
    method onShowPress (line 272) | @Override
    method onSingleTapUp (line 277) | @Override
    method onScroll (line 282) | @Override
    method onLongPress (line 288) | @Override
    method onFling (line 293) | @Override

FILE: app/src/test/java/com/scwang/refreshlayout/ExampleUnitTest.java
  class ExampleUnitTest (line 12) | public class ExampleUnitTest {
    method addition_isCorrect (line 13) | @Test

FILE: refresh-footer/src/androidTest/java/com/scwang/smartrefresh/footer/ExampleInstrumentedTest.java
  class ExampleInstrumentedTest (line 17) | @RunWith(AndroidJUnit4.class)
    method useAppContext (line 19) | @Test

FILE: refresh-footer/src/test/java/com/scwang/smartrefresh/footer/ExampleUnitTest.java
  class ExampleUnitTest (line 12) | public class ExampleUnitTest {
    method addition_isCorrect (line 13) | @Test

FILE: refresh-header/src/androidTest/java/com/scwang/smartrefresh/header/ExampleInstrumentedTest.java
  class ExampleInstrumentedTest (line 17) | @RunWith(AndroidJUnit4.class)
    method useAppContext (line 19) | @Test

FILE: refresh-header/src/main/java/com/scwang/smartrefresh/header/CircleHeader.java
  class CircleHeader (line 31) | public class CircleHeader extends View implements RefreshHeader {
    method CircleHeader (line 63) | public CircleHeader(Context context) {
    method CircleHeader (line 68) | public CircleHeader(Context context, AttributeSet attrs) {
    method CircleHeader (line 73) | public CircleHeader(Context context, AttributeSet attrs, int defStyleA...
    method CircleHeader (line 78) | @RequiresApi(Build.VERSION_CODES.LOLLIPOP)
    method initView (line 84) | private void initView(Context context, AttributeSet attrs) {
    method onMeasure (line 100) | @Override
    method onDraw (line 109) | @Override
    method drawWave (line 131) | private void drawWave(Canvas canvas, int viewWidth, int viewHeight) {
    method drawSpringUp (line 145) | private void drawSpringUp(Canvas canvas, int viewWidth) {
    method drawBoll (line 160) | private void drawBoll(Canvas canvas, int viewWidth) {
    method drawBollTail (line 168) | private void drawBollTail(Canvas canvas, int viewWidth, float fraction) {
    method drawOuter (line 185) | private void drawOuter(Canvas canvas, int viewWidth) {
    method drawFinish (line 209) | private void drawFinish(Canvas canvas, int viewWidth) {
    method onInitialized (line 251) | @Override
    method isSupportHorizontalDrag (line 255) | @Override
    method onHorizontalDrag (line 260) | @Override
    method onPullingDown (line 264) | @Override
    method onReleasing (line 270) | @Override
    method onStateChanged (line 277) | @Override
    method onStartAnimator (line 282) | @Override
    method onFinish (line 344) | @Override
    method setPrimaryColors (line 362) | @Override@Deprecated
    method getView (line 373) | @NonNull
    method getSpinnerStyle (line 379) | @Override

FILE: refresh-header/src/main/java/com/scwang/smartrefresh/header/DeliveryHeader.java
  class DeliveryHeader (line 28) | public class DeliveryHeader extends View implements RefreshHeader {
    method DeliveryHeader (line 45) | public DeliveryHeader(Context context) {
    method DeliveryHeader (line 50) | public DeliveryHeader(Context context, @Nullable AttributeSet attrs) {
    method DeliveryHeader (line 55) | public DeliveryHeader(Context context, @Nullable AttributeSet attrs, i...
    method DeliveryHeader (line 60) | @SuppressWarnings("unused")
    method onMeasure (line 67) | @Override
    method initView (line 73) | private void initView(Context context, AttributeSet attrs) {
    method onDraw (line 133) | @Override
    method calculateFrame (line 172) | private void calculateFrame(int width) {
    method isSupportHorizontalDrag (line 196) | @Override
    method onHorizontalDrag (line 201) | @Override
    method onPullingDown (line 205) | @Override
    method onReleasing (line 212) | @Override
    method onStateChanged (line 219) | @Override
    method getView (line 228) | @NonNull
    method getSpinnerStyle (line 234) | @Override
    method setPrimaryColors (line 239) | @Override@Deprecated
    method onInitialized (line 249) | @Override
    method onStartAnimator (line 254) | @Override
    method onFinish (line 260) | @Override

FILE: refresh-header/src/main/java/com/scwang/smartrefresh/header/DropboxHeader.java
  class DropboxHeader (line 36) | public class DropboxHeader extends View implements RefreshHeader {
    method DropboxHeader (line 56) | public DropboxHeader(Context context) {
    method DropboxHeader (line 61) | public DropboxHeader(Context context, @Nullable AttributeSet attrs) {
    method DropboxHeader (line 66) | public DropboxHeader(Context context, @Nullable AttributeSet attrs, in...
    method DropboxHeader (line 71) | @RequiresApi(Build.VERSION_CODES.LOLLIPOP)
    method onMeasure (line 77) | @Override
    method initView (line 83) | private void initView(Context context, AttributeSet attrs) {
    method onAttachedToWindow (line 138) | @Override
    method onDetachedFromWindow (line 144) | @Override
    method initAnimator (line 159) | private void initAnimator() {
    method onDraw (line 211) | @Override
    method generateSideLength (line 263) | private int generateSideLength() {
    method generateClipPath (line 267) | @NonNull
    method generateBoxBody (line 280) | @NonNull
    method generateBoxCoverPath (line 286) | @NonNull
    method generateBoxBodyPath (line 340) | @NonNull
    method isSupportHorizontalDrag (line 359) | @Override
    method onHorizontalDrag (line 364) | @Override
    method onPullingDown (line 368) | @Override
    method onReleasing (line 375) | @Override
    method onStateChanged (line 380) | @Override
    method getView (line 388) | @NonNull
    method getSpinnerStyle (line 394) | @Override
    method setPrimaryColors (line 399) | @Override@Deprecated
    method onInitialized (line 409) | @Override
    method onStartAnimator (line 418) | @Override
    method onFinish (line 425) | @Override
    class BoxBody (line 432) | private static class BoxBody {
      method measure (line 444) | BoxBody measure(int width, int height, int sideLength, int margin) {

FILE: refresh-header/src/main/java/com/scwang/smartrefresh/header/FlyRefreshHeader.java
  class FlyRefreshHeader (line 31) | public class FlyRefreshHeader extends FalsifyHeader implements RefreshHe...
    method FlyRefreshHeader (line 43) | public FlyRefreshHeader(Context context) {
    method FlyRefreshHeader (line 47) | public FlyRefreshHeader(Context context, AttributeSet attrs) {
    method FlyRefreshHeader (line 51) | public FlyRefreshHeader(Context context, AttributeSet attrs, int defSt...
    method FlyRefreshHeader (line 55) | @RequiresApi(Build.VERSION_CODES.LOLLIPOP)
    method onDetachedFromWindow (line 60) | @Override
    method isSupportHorizontalDrag (line 71) | @Override
    method onHorizontalDrag (line 76) | @Override
    method onPullingDown (line 80) | @Override
    method onReleasing (line 105) | @Override
    method onStartAnimator (line 112) | @Override
    method setPrimaryColors (line 165) | @Override@Deprecated
    method onInitialized (line 174) | @Override
    method onFinish (line 180) | @Override
    method setUpMountanScenceView (line 191) | public void setUpMountanScenceView(MountanScenceView scenceView){
    method setUpFlyView (line 195) | public void setUpFlyView(FlyView flyView) {
    method setUp (line 199) | public void setUp(MountanScenceView scenceView, FlyView flyView) {
    method finishRefresh (line 204) | public void finishRefresh() {
    method finishRefresh (line 208) | public void finishRefresh(final AnimatorListenerAdapter listenerAdapte...

FILE: refresh-header/src/main/java/com/scwang/smartrefresh/header/FunGameBattleCityHeader.java
  class FunGameBattleCityHeader (line 24) | public class FunGameBattleCityHeader extends FunGameView {
    method FunGameBattleCityHeader (line 123) | public FunGameBattleCityHeader(Context context) {
    method FunGameBattleCityHeader (line 127) | public FunGameBattleCityHeader(Context context, AttributeSet attrs) {
    method FunGameBattleCityHeader (line 131) | public FunGameBattleCityHeader(Context context, AttributeSet attrs, in...
    method FunGameBattleCityHeader (line 135) | @RequiresApi(Build.VERSION_CODES.LOLLIPOP)
    method initConcreteView (line 140) | @Override
    method drawGame (line 151) | @Override
    method resetConfigParams (line 165) | @Override
    method generateEnemyTank (line 195) | private RectF generateEnemyTank(int index) {
    method makeBulletPath (line 205) | private void makeBulletPath(Canvas canvas, int width) {
    method getTrackIndex (line 244) | private int getTrackIndex(int y) {
    method checkWipeOutETank (line 256) | private boolean checkWipeOutETank(Point point) {
    method upLevel (line 273) | private void upLevel() {
    method drawBullet (line 291) | private void drawBullet(Canvas canvas, Point point) {
    method checkTankCrash (line 303) | private boolean checkTankCrash(int index, float selfX, float selfY) {
    method drawSelfTank (line 316) | private void drawSelfTank(Canvas canvas, int width) {
    method drawEnemyTank (line 343) | private void drawEnemyTank(Canvas canvas, int width) {
    method drawTank (line 386) | private void drawTank(Canvas canvas, RectF rectF) {
    method apperanceOption (line 398) | private int apperanceOption() {

FILE: refresh-header/src/main/java/com/scwang/smartrefresh/header/FunGameHitBlockHeader.java
  class FunGameHitBlockHeader (line 25) | public class FunGameHitBlockHeader extends FunGameView {
    method FunGameHitBlockHeader (line 93) | public FunGameHitBlockHeader(Context context) {
    method FunGameHitBlockHeader (line 98) | public FunGameHitBlockHeader(Context context, AttributeSet attrs) {
    method FunGameHitBlockHeader (line 103) | public FunGameHitBlockHeader(Context context, AttributeSet attrs, int ...
    method FunGameHitBlockHeader (line 108) | @RequiresApi(Build.VERSION_CODES.LOLLIPOP)
    method initView (line 114) | private void initView(Context context, AttributeSet attrs) {
    method initConcreteView (line 125) | @Override
    method drawGame (line 139) | @Override
    method resetConfigParams (line 151) | @Override
    method drawRacket (line 173) | private void drawRacket(Canvas canvas) {
    method makeBallPath (line 183) | private void makeBallPath(Canvas canvas, int width) {
    method checkTouchRacket (line 231) | private boolean checkTouchRacket(float y) {
    method checkTouchBlock (line 246) | private boolean checkTouchBlock(float x, float y) {
    method drawColorBlock (line 272) | private void drawColorBlock(Canvas canvas) {

FILE: refresh-header/src/main/java/com/scwang/smartrefresh/header/MaterialHeader.java
  class MaterialHeader (line 33) | @SuppressWarnings("unused")
    method MaterialHeader (line 64) | public MaterialHeader(Context context) {
    method MaterialHeader (line 69) | public MaterialHeader(Context context, AttributeSet attrs) {
    method MaterialHeader (line 74) | public MaterialHeader(Context context, AttributeSet attrs, int defStyl...
    method MaterialHeader (line 79) | @RequiresApi(Build.VERSION_CODES.LOLLIPOP)
    method initView (line 85) | private void initView(Context context, AttributeSet attrs) {
    method onMeasure (line 118) | @Override
    method onLayout (line 127) | @Override
    method dispatchDraw (line 152) | @Override
    method setSize (line 172) | public MaterialHeader setSize(int size) {
    method setShowBezierWave (line 191) | public MaterialHeader setShowBezierWave(boolean show) {
    method onInitialized (line 200) | @Override
    method isSupportHorizontalDrag (line 207) | @Override
    method onHorizontalDrag (line 212) | @Override
    method onPullingDown (line 216) | @Override
    method onReleasing (line 248) | @Override
    method onStartAnimator (line 261) | @Override
    method onStateChanged (line 269) | @Override
    method onFinish (line 288) | @Override
    method setPrimaryColors (line 296) | @Override@Deprecated
    method getView (line 303) | @NonNull
    method getSpinnerStyle (line 309) | @Override
    method setColorSchemeColors (line 317) | public MaterialHeader setColorSchemeColors(int... colors) {

FILE: refresh-header/src/main/java/com/scwang/smartrefresh/header/PhoenixHeader.java
  class PhoenixHeader (line 33) | public class PhoenixHeader extends View implements RefreshHeader/*, Size...
    method PhoenixHeader (line 113) | public PhoenixHeader(Context context) {
    method PhoenixHeader (line 118) | public PhoenixHeader(Context context, AttributeSet attrs) {
    method PhoenixHeader (line 123) | public PhoenixHeader(Context context, AttributeSet attrs, int defStyle...
    method PhoenixHeader (line 128) | @RequiresApi(Build.VERSION_CODES.LOLLIPOP)
    method initView (line 134) | private void initView(Context context, AttributeSet attrs) {
    method onMeasure (line 158) | @Override
    method setupAnimation (line 164) | private void setupAnimation() {
    method setupPathsDrawable (line 178) | private void setupPathsDrawable() {
    method onInitialized (line 200) | @Override
    method isSupportHorizontalDrag (line 205) | @Override
    method onHorizontalDrag (line 210) | @Override
    method onPullingDown (line 214) | @Override
    method onReleasing (line 220) | @Override
    method onStartAnimator (line 226) | @Override
    method onStateChanged (line 232) | @Override
    method onFinish (line 237) | @Override
    method setPrimaryColors (line 244) | @Override@Deprecated
    method getView (line 257) | @NonNull
    method getSpinnerStyle (line 263) | @Override
    method onDraw (line 280) | @Override
    method drawSky (line 290) | private void drawSky(Canvas canvas, int width, int height) {
    method drawTown (line 313) | private void drawTown(Canvas canvas, int width, int height) {
    method drawSun (line 341) | private void drawSun(Canvas canvas, int width, int height) {

FILE: refresh-header/src/main/java/com/scwang/smartrefresh/header/StoreHouseHeader.java
  class StoreHouseHeader (line 29) | public class  StoreHouseHeader extends View implements RefreshHeader {
    method StoreHouseHeader (line 64) | public StoreHouseHeader(Context context) {
    method StoreHouseHeader (line 69) | public StoreHouseHeader(Context context, AttributeSet attrs) {
    method StoreHouseHeader (line 74) | public StoreHouseHeader(Context context, AttributeSet attrs, int defSt...
    method StoreHouseHeader (line 79) | @RequiresApi(Build.VERSION_CODES.LOLLIPOP)
    method initView (line 85) | private void initView(Context context, AttributeSet attrs) {
    method onMeasure (line 107) | @Override
    method onDraw (line 119) | @Override
    method onDetachedFromWindow (line 180) | @Override
    method getLoadingAniDuration (line 189) | public int getLoadingAniDuration() {
    method setLoadingAniDuration (line 193) | public StoreHouseHeader setLoadingAniDuration(int duration) {
    method setLineWidth (line 199) | public StoreHouseHeader setLineWidth(int width) {
    method setTextColor (line 207) | public StoreHouseHeader setTextColor(int color) {
    method setDropHeight (line 215) | public StoreHouseHeader setDropHeight(int height) {
    method initWithString (line 220) | public StoreHouseHeader initWithString(String str) {
    method initWithString (line 225) | public StoreHouseHeader initWithString(String str, int fontSize) {
    method initWithStringArray (line 231) | public StoreHouseHeader initWithStringArray(int id) {
    method getScale (line 246) | public float getScale() {
    method setScale (line 250) | public StoreHouseHeader setScale(float scale) {
    method initWithPointList (line 255) | public StoreHouseHeader initWithPointList(ArrayList<float[]> pointList) {
    method restoreRefreshLayoutBackground (line 288) | private void restoreRefreshLayoutBackground() {
    method replaceRefreshLayoutBackground (line 294) | private void replaceRefreshLayoutBackground(RefreshLayout refreshLayou...
    method setProgress (line 309) | private void setProgress(float progress) {
    method getTopOffset (line 313) | private int getTopOffset() {
    method getBottomOffset (line 317) | private int getBottomOffset() {
    method beginLoading (line 321) | private void beginLoading() {
    method loadFinish (line 327) | private void loadFinish() {
    method onInitialized (line 335) | @Override
    method isSupportHorizontalDrag (line 343) | @Override
    method onHorizontalDrag (line 348) | @Override
    method onPullingDown (line 352) | @Override
    method onReleasing (line 358) | @Override
    method onStartAnimator (line 364) | @Override
    method onStateChanged (line 369) | @Override
    method onFinish (line 378) | @Override
    method setPrimaryColors (line 387) | @Override@Deprecated
    method getView (line 400) | @NonNull
    method getSpinnerStyle (line 406) | @Override
    class AniController (line 412) | private class AniController implements Runnable {
      method start (line 420) | private void start() {
      method run (line 430) | @Override
      method stop (line 457) | private void stop() {

FILE: refresh-header/src/main/java/com/scwang/smartrefresh/header/TaurusHeader.java
  class TaurusHeader (line 36) | public class TaurusHeader extends View implements RefreshHeader/*, SizeD...
    type AnimationPart (line 86) | private enum AnimationPart {
    method TaurusHeader (line 95) | public TaurusHeader(Context context) {
    method TaurusHeader (line 100) | public TaurusHeader(Context context, AttributeSet attrs) {
    method TaurusHeader (line 105) | public TaurusHeader(Context context, AttributeSet attrs, int defStyleA...
    method TaurusHeader (line 110) | @RequiresApi(Build.VERSION_CODES.LOLLIPOP)
    method initView (line 116) | private void initView(Context context, AttributeSet attrs) {
    method onInitialized (line 143) | @Override
    method isSupportHorizontalDrag (line 148) | @Override
    method onHorizontalDrag (line 153) | @Override
    method onPullingDown (line 157) | @Override
    method onReleasing (line 164) | @Override
    method onStartAnimator (line 170) | @Override
    method onStateChanged (line 176) | @Override
    method onFinish (line 180) | @Override
    method setPrimaryColors (line 188) | @Override@Deprecated
    method getView (line 193) | @NonNull
    method getSpinnerStyle (line 199) | @Override
    method onDraw (line 206) | @Override
    method drawWind (line 267) | private void drawWind(Canvas canvas, float y, float xOffset, int width) {
    method drawSideClouds (line 293) | private void drawSideClouds(Canvas canvas, int width, int height) {
    method drawCenterClouds (line 381) | private void drawCenterClouds(Canvas canvas, int width, int height) {
    method drawAirplane (line 456) | private void drawAirplane(Canvas canvas, int width, int height) {
    method setupPathDrawable (line 521) | private void setupPathDrawable() {
    method random (line 542) | private float random(int min, int max) {
    method getAnimationPartValue (line 555) | private float getAnimationPartValue(AnimationPart part) {
    method checkCurrentAnimationPart (line 580) | private boolean checkCurrentAnimationPart(AnimationPart part) {
    method getAnimationTimePart (line 603) | private int getAnimationTimePart(AnimationPart part) {
    method setupAnimations (line 619) | private void setupAnimations() {
    method setLoadingAnimationTime (line 632) | private void setLoadingAnimationTime(float loadingAnimationTime) {

FILE: refresh-header/src/main/java/com/scwang/smartrefresh/header/WaterDropHeader.java
  class WaterDropHeader (line 38) | public class WaterDropHeader extends ViewGroup implements RefreshHeader {
    method WaterDropHeader (line 52) | public WaterDropHeader(Context context) {
    method WaterDropHeader (line 57) | public WaterDropHeader(Context context, AttributeSet attrs) {
    method WaterDropHeader (line 62) | public WaterDropHeader(Context context, AttributeSet attrs, int defSty...
    method WaterDropHeader (line 67) | @RequiresApi(Build.VERSION_CODES.LOLLIPOP)
    method initView (line 73) | private void initView(Context context) {
    method onMeasure (line 91) | @Override
    method onLayout (line 108) | @Override
    method dispatchDraw (line 130) | @Override
    method onInitialized (line 149) | @Override
    method isSupportHorizontalDrag (line 154) | @Override
    method onHorizontalDrag (line 159) | @Override
    method onPullingDown (line 163) | @Override
    method onReleasing (line 185) | @Override
    method onStateChanged (line 193) | @Override
    method onStartAnimator (line 216) | @Override
    method onFinish (line 243) | @Override
    method setPrimaryColors (line 248) | @Override@Deprecated
    method getView (line 255) | @NonNull
    method getSpinnerStyle (line 261) | @Override

FILE: refresh-header/src/main/java/com/scwang/smartrefresh/header/WaveSwipeHeader.java
  class WaveSwipeHeader (line 39) | public class WaveSwipeHeader extends ViewGroup implements RefreshHeader {
    type VERTICAL_DRAG_THRESHOLD (line 46) | private enum VERTICAL_DRAG_THRESHOLD {
      method VERTICAL_DRAG_THRESHOLD (line 50) | VERTICAL_DRAG_THRESHOLD(float val) {
    method WaveSwipeHeader (line 61) | public WaveSwipeHeader(Context context) {
    method WaveSwipeHeader (line 66) | public WaveSwipeHeader(Context context, AttributeSet attrs) {
    method WaveSwipeHeader (line 71) | public WaveSwipeHeader(Context context, AttributeSet attrs, int defSty...
    method WaveSwipeHeader (line 76) | @RequiresApi(Build.VERSION_CODES.LOLLIPOP)
    method initView (line 82) | private void initView(Context context, AttributeSet attrs) {
    method onMeasure (line 105) | @Override
    method onLayout (line 112) | @Override
    method setColorSchemeColors (line 133) | public void setColorSchemeColors(int... colors) {
    method onInitialized (line 141) | @Override
    method isSupportHorizontalDrag (line 146) | @Override
    method onHorizontalDrag (line 151) | @Override
    method onPullingDown (line 155) | @Override
    method onReleasing (line 201) | @Override
    method onStartAnimator (line 205) | @Override
    method onStateChanged (line 224) | @Override
    method onFinish (line 249) | @Override
    method setPrimaryColors (line 272) | @Override@Deprecated
    method getView (line 282) | @NonNull
    method getSpinnerStyle (line 288) | @Override
    class ProgressAnimationImageView (line 301) | private class ProgressAnimationImageView extends AnimationImageView {
      method ProgressAnimationImageView (line 308) | public ProgressAnimationImageView(Context context) {
      method measure (line 318) | public void measure() {
      method makeMeasureSpecExactly (line 323) | private int makeMeasureSpecExactly(int length) {
      method makeProgressTransparent (line 327) | public void makeProgressTransparent() {
      method showArrow (line 331) | public void showArrow(boolean show) {
      method setArrowScale (line 335) | public void setArrowScale(float scale) {
      method setProgressAlpha (line 339) | public void setProgressAlpha(int alpha) {
      method setProgressStartEndTrim (line 343) | public void setProgressStartEndTrim(float startAngle, float endAngle) {
      method setProgressRotation (line 347) | public void setProgressRotation(float rotation) {
      method startProgress (line 351) | public void startProgress() {
      method stopProgress (line 355) | public void stopProgress() {
      method setProgressColorSchemeColors (line 359) | public void setProgressColorSchemeColors(@NonNull int... colors) {
      method setProgressColorSchemeColorsFromResource (line 363) | public void setProgressColorSchemeColorsFromResource(@IdRes int... r...
      method scaleWithKeepingAspectRatio (line 374) | public void scaleWithKeepingAspectRatio(float scale) {

FILE: refresh-header/src/main/java/com/scwang/smartrefresh/header/flyrefresh/FlyView.java
  class FlyView (line 14) | public class FlyView extends PathsView {
    method FlyView (line 16) | public FlyView(Context context) {
    method FlyView (line 21) | public FlyView(Context context, AttributeSet attrs) {
    method FlyView (line 26) | public FlyView(Context context, AttributeSet attrs, int defStyleAttr) {
    method initView (line 31) | private void initView(Context context, AttributeSet attrs, int defStyl...
    method onMeasure (line 38) | @Override

FILE: refresh-header/src/main/java/com/scwang/smartrefresh/header/flyrefresh/MountanScenceView.java
  class MountanScenceView (line 24) | public class MountanScenceView extends View {
    method MountanScenceView (line 63) | public MountanScenceView(Context context) {
    method MountanScenceView (line 68) | public MountanScenceView(Context context, AttributeSet attrs) {
    method MountanScenceView (line 73) | public MountanScenceView(Context context, AttributeSet attrs, int defS...
    method MountanScenceView (line 78) | @RequiresApi(Build.VERSION_CODES.LOLLIPOP)
    method initView (line 84) | private void initView(Context context, AttributeSet attrs, int defStyl...
    method onMeasure (line 106) | @Override
    method updateMountainPath (line 118) | private void updateMountainPath(float factor,int height) {
    method updateTreePath (line 157) | private void updateTreePath(float factor, boolean force) {
    method drawTree (line 227) | private void drawTree(Canvas canvas, float scale, float baseX, float b...
    method onDraw (line 246) | @Override
    method setPrimaryColor (line 279) | public void setPrimaryColor(int color) {
    method updatePercent (line 302) | public void updatePercent(float percent) {

FILE: refresh-header/src/main/java/com/scwang/smartrefresh/header/flyrefresh/PathInterpolatorCompat.java
  class PathInterpolatorCompat (line 28) | public final class PathInterpolatorCompat {
    method PathInterpolatorCompat (line 30) | private PathInterpolatorCompat() {
    method create (line 46) | public static Interpolator create(Path path) {
    method create (line 61) | public static Interpolator create(float controlX, float controlY) {
    method create (line 78) | public static Interpolator create(float controlX1, float controlY1,

FILE: refresh-header/src/main/java/com/scwang/smartrefresh/header/flyrefresh/PathInterpolatorCompatApi21.java
  class PathInterpolatorCompatApi21 (line 29) | @RequiresApi(21)
    method PathInterpolatorCompatApi21 (line 33) | private PathInterpolatorCompatApi21() {
    method create (line 37) | public static Interpolator create(Path path) {
    method create (line 41) | public static Interpolator create(float controlX, float controlY) {
    method create (line 45) | public static Interpolator create(float controlX1, float controlY1,

FILE: refresh-header/src/main/java/com/scwang/smartrefresh/header/flyrefresh/PathInterpolatorCompatBase.java
  class PathInterpolatorCompatBase (line 28) | @RequiresApi(9)
    method PathInterpolatorCompatBase (line 32) | private PathInterpolatorCompatBase() {
    method create (line 36) | public static Interpolator create(Path path) {
    method create (line 40) | public static Interpolator create(float controlX, float controlY) {
    method create (line 44) | public static Interpolator create(float controlX1, float controlY1,

FILE: refresh-header/src/main/java/com/scwang/smartrefresh/header/flyrefresh/PathInterpolatorGingerbread.java
  class PathInterpolatorGingerbread (line 29) | @RequiresApi(9)
    method PathInterpolatorGingerbread (line 41) | public PathInterpolatorGingerbread(Path path) {
    method PathInterpolatorGingerbread (line 60) | public PathInterpolatorGingerbread(float controlX, float controlY) {
    method PathInterpolatorGingerbread (line 64) | public PathInterpolatorGingerbread(float controlX1, float controlY1,
    method getInterpolation (line 69) | @Override
    method createQuad (line 103) | private static Path createQuad(float controlX, float controlY) {
    method createCubic (line 110) | private static Path createCubic(float controlX1, float controlY1,

FILE: refresh-header/src/main/java/com/scwang/smartrefresh/header/fungame/FunGameBase.java
  class FunGameBase (line 27) | public class FunGameBase extends FrameLayout implements RefreshHeader {
    method FunGameBase (line 43) | public FunGameBase(Context context) {
    method FunGameBase (line 48) | public FunGameBase(Context context, @Nullable AttributeSet attrs) {
    method FunGameBase (line 53) | public FunGameBase(Context context, @Nullable AttributeSet attrs, int ...
    method FunGameBase (line 58) | @RequiresApi(Build.VERSION_CODES.LOLLIPOP)
    method initView (line 64) | private void initView(Context context) {
    method setTranslationY (line 68) | @Override
    method onInterceptTouchEvent (line 75) | @Override
    method onTouchEvent (line 80) | @Override
    method onDetachedFromWindow (line 121) | @Override
    method onManualOperationStart (line 132) | protected void onManualOperationStart() {
    method onManualOperationMove (line 145) | protected void onManualOperationMove(float percent, int offset, int he...
    method onManualOperationRelease (line 149) | protected void onManualOperationRelease() {
    method isSupportHorizontalDrag (line 173) | @Override
    method onHorizontalDrag (line 178) | @Override
    method onPullingDown (line 182) | @Override
    method onReleasing (line 191) | @Override
    method onStartAnimator (line 196) | @Override
    method onStateChanged (line 201) | @Override
    method onInitialized (line 206) | @Override
    method onFinish (line 214) | @Override
    method setPrimaryColors (line 231) | @Override@Deprecated
    method getView (line 235) | @NonNull
    method getSpinnerStyle (line 241) | @Override

FILE: refresh-header/src/main/java/com/scwang/smartrefresh/header/fungame/FunGameHeader.java
  class FunGameHeader (line 34) | public class FunGameHeader extends FunGameBase implements RefreshHeader {
    method FunGameHeader (line 60) | public FunGameHeader(Context context) {
    method FunGameHeader (line 65) | public FunGameHeader(Context context, @Nullable AttributeSet attrs) {
    method FunGameHeader (line 70) | public FunGameHeader(Context context, @Nullable AttributeSet attrs, in...
    method FunGameHeader (line 75) | @RequiresApi(Build.VERSION_CODES.LOLLIPOP)
    method initView (line 81) | private void initView(Context context, AttributeSet attrs) {
    method createMaskTextView (line 111) | private TextView createMaskTextView(Context context, String text, int ...
    method coverMaskView (line 121) | private void coverMaskView() {
    method doStart (line 139) | private void doStart(long delay) {
    method onGameStart (line 161) | protected void onGameStart() {
    method postStart (line 165) | public void postStart() {
    method postEnd (line 172) | public void postEnd() {
    method setTopMaskViewText (line 184) | public void setTopMaskViewText(String topMaskViewText) {
    method setBottomMaskViewText (line 189) | public void setBottomMaskViewText(String bottomMaskViewText) {
    method setPrimaryColors (line 197) | @Override@Deprecated
    method onInitialized (line 211) | @Override
    method onStartAnimator (line 217) | @Override
    method onFinish (line 223) | @Override

FILE: refresh-header/src/main/java/com/scwang/smartrefresh/header/fungame/FunGameView.java
  class FunGameView (line 27) | public abstract class FunGameView extends FunGameHeader {
    method FunGameView (line 67) | public FunGameView(Context context) {
    method FunGameView (line 72) | public FunGameView(Context context, @Nullable AttributeSet attrs) {
    method FunGameView (line 77) | public FunGameView(Context context, AttributeSet attrs, int defStyleAt...
    method FunGameView (line 82) | @RequiresApi(Build.VERSION_CODES.LOLLIPOP)
    method initView (line 88) | private void initView(Context context, AttributeSet attrs) {
    method initBaseTools (line 110) | protected void initBaseTools() {
    method initBaseConfigParams (line 118) | protected void initBaseConfigParams() {
    method initConcreteView (line 122) | protected abstract void initConcreteView();
    method drawGame (line 124) | protected abstract void drawGame(Canvas canvas, int width, int height);
    method resetConfigParams (line 126) | protected abstract void resetConfigParams();
    method drawBoundary (line 132) | private void drawBoundary(Canvas canvas,int width,int height) {
    method dispatchDraw (line 142) | @Override
    method drawText (line 156) | private void drawText(Canvas canvas, int width, int height) {
    method promptText (line 183) | private void promptText(Canvas canvas, String text, int width, int hei...
    method getCurrStatus (line 193) | public int getCurrStatus() {
    method getTextGameOver (line 197) | public String getTextGameOver() {
    method setTextGameOver (line 201) | public void setTextGameOver(String textGameOver) {
    method getTextLoading (line 205) | public String getTextLoading() {
    method setTextLoading (line 209) | public void setTextLoading(String textLoading) {
    method getTextLoadingFinished (line 213) | public String getTextLoadingFinished() {
    method setTextLoadingFinished (line 217) | public void setTextLoadingFinished(String textLoadingFinished) {
    method getScreenMetrics (line 227) | private DisplayMetrics getScreenMetrics(Context context) {
    method onGameStart (line 238) | @Override
    method onManualOperationMove (line 243) | @Override
    method moveController (line 251) | public void moveController(float distance) {
    method postStatus (line 266) | public void postStatus(int status) {
    method onInitialized (line 278) | @Override
    method onFinish (line 285) | @Override
    method setPrimaryColors (line 295) | @Override@Deprecated

FILE: refresh-header/src/main/java/com/scwang/smartrefresh/header/internal/FastOutSlowInInterpolator.java
  class FastOutSlowInInterpolator (line 28) | public class FastOutSlowInInterpolator extends LookupTableInterpolator {
    method FastOutSlowInInterpolator (line 66) | public FastOutSlowInInterpolator() {

FILE: refresh-header/src/main/java/com/scwang/smartrefresh/header/internal/LookupTableInterpolator.java
  class LookupTableInterpolator (line 25) | abstract class LookupTableInterpolator implements Interpolator {
    method LookupTableInterpolator (line 30) | public LookupTableInterpolator(float[] values) {
    method getInterpolation (line 35) | @Override

FILE: refresh-header/src/main/java/com/scwang/smartrefresh/header/internal/MaterialProgressDrawable.java
  class MaterialProgressDrawable (line 48) | public class MaterialProgressDrawable extends Drawable implements Animat...
    method MaterialProgressDrawable (line 117) | public MaterialProgressDrawable(Context context, View parent) {
    method setSizeParameters (line 128) | private void setSizeParameters(double progressCircleWidth, double prog...
    method updateSizes (line 147) | public void updateSizes(@ProgressDrawableSize int size) {
    method showArrow (line 160) | public void showArrow(boolean show) {
    method setArrowScale (line 167) | public void setArrowScale(float scale) {
    method setStartEndTrim (line 177) | public void setStartEndTrim(float startAngle, float endAngle) {
    method setProgressRotation (line 187) | public void setProgressRotation(float rotation) {
    method setBackgroundColor (line 194) | public void setBackgroundColor(int color) {
    method setColorSchemeColors (line 205) | public void setColorSchemeColors(int... colors) {
    method getIntrinsicHeight (line 210) | @Override
    method getIntrinsicWidth (line 215) | @Override
    method draw (line 220) | @Override
    method setAlpha (line 229) | @Override
    method getAlpha (line 234) | public int getAlpha() {
    method setColorFilter (line 238) | @Override
    method setRotation (line 243) | @SuppressWarnings("unused")
    method getRotation (line 249) | @SuppressWarnings("unused")
    method getOpacity (line 254) | @Override
    method isRunning (line 259) | @Override
    method start (line 272) | @Override
    method stop (line 289) | @Override
    method getMinProgressArc (line 298) | float getMinProgressArc(Ring ring) {
    method evaluateColorChange (line 304) | private int evaluateColorChange(float fraction, int startValue, int en...
    method updateRingColor (line 328) | void updateRingColor(float interpolatedTime, Ring ring) {
    method applyFinishTranslation (line 339) | void applyFinishTranslation(float interpolatedTime, Ring ring) {
    method setupAnimators (line 357) | private void setupAnimators() {
    method invalidateDrawable (line 446) | @Override
    method scheduleDrawable (line 451) | @Override
    method unscheduleDrawable (line 456) | @Override
    class Ring (line 462) | private static class Ring {
      method Ring (line 494) | Ring(Callback callback) {
      method setBackgroundColor (line 505) | public void setBackgroundColor(int color) {
      method setArrowDimensions (line 515) | public void setArrowDimensions(float width, float height) {
      method draw (line 523) | public void draw(Canvas c, Rect bounds) {
      method drawTriangle (line 547) | private void drawTriangle(Canvas c, float startAngle, float sweepAng...
      method setColors (line 585) | public void setColors(@NonNull int[] colors) {
      method setColor (line 598) | public void setColor(int color) {
      method setColorIndex (line 606) | public void setColorIndex(int index) {
      method getNextColor (line 614) | public int getNextColor() {
      method getNextColorIndex (line 618) | private int getNextColorIndex() {
      method goToNextColor (line 626) | public void goToNextColor() {
      method setColorFilter (line 630) | public void setColorFilter(ColorFilter filter) {
      method setAlpha (line 638) | public void setAlpha(int alpha) {
      method getAlpha (line 645) | public int getAlpha() {
      method setStrokeWidth (line 652) | public void setStrokeWidth(float strokeWidth) {
      method getStrokeWidth (line 658) | @SuppressWarnings("unused")
      method setStartTrim (line 663) | @SuppressWarnings("unused")
      method getStartTrim (line 669) | @SuppressWarnings("unused")
      method getStartingStartTrim (line 674) | public float getStartingStartTrim() {
      method getStartingEndTrim (line 678) | public float getStartingEndTrim() {
      method getStartingColor (line 682) | public int getStartingColor() {
      method setEndTrim (line 686) | @SuppressWarnings("unused")
      method getEndTrim (line 692) | @SuppressWarnings("unused")
      method setRotation (line 697) | @SuppressWarnings("unused")
      method getRotation (line 703) | @SuppressWarnings("unused")
      method setInsets (line 708) | public void setInsets(int width, int height) {
      method getInsets (line 719) | @SuppressWarnings("unused")
      method setCenterRadius (line 728) | public void setCenterRadius(double centerRadius) {
      method getCenterRadius (line 732) | public double getCenterRadius() {
      method setShowArrow (line 739) | public void setShowArrow(boolean show) {
      method setArrowScale (line 749) | public void setArrowScale(float scale) {
      method getStartingRotation (line 759) | public float getStartingRotation() {
      method storeOriginals (line 767) | public void storeOriginals() {
      method resetOriginals (line 776) | public void resetOriginals() {
      method invalidateSelf (line 785) | private void invalidateSelf() {

FILE: refresh-header/src/main/java/com/scwang/smartrefresh/header/material/CircleImageView.java
  class CircleImageView (line 36) | public class CircleImageView extends ImageView {
    method CircleImageView (line 49) | public CircleImageView(Context context, int color) {
    method elevationSupported (line 80) | private boolean elevationSupported() {
    method onMeasure (line 84) | @Override
    method setAnimationListener (line 93) | public void setAnimationListener(Animation.AnimationListener listener) {
    method onAnimationStart (line 97) | @Override
    method onAnimationEnd (line 105) | @Override
    method setBackgroundColorRes (line 118) | public void setBackgroundColorRes(int colorRes) {
    method setBackgroundColor (line 128) | @Override
    class OvalShadow (line 135) | private class OvalShadow extends OvalShape {
      method OvalShadow (line 139) | OvalShadow(int shadowRadius) {
      method onResize (line 146) | @Override
      method draw (line 152) | @Override
      method updateRadialGradient (line 160) | private void updateRadialGradient(int diameter) {

FILE: refresh-header/src/main/java/com/scwang/smartrefresh/header/storehouse/StoreHouseBarItem.java
  class StoreHouseBarItem (line 15) | public class StoreHouseBarItem extends Animation {
    method StoreHouseBarItem (line 27) | public StoreHouseBarItem(int index, PointF start, PointF end, int colo...
    method setLineWidth (line 41) | public void setLineWidth(int width) {
    method setColor (line 45) | public void setColor(int color) {
    method resetPosition (line 49) | public void resetPosition(int horizontalRandomness) {
    method applyTransformation (line 55) | @Override
    method start (line 62) | public void start(float fromAlpha, float toAlpha) {
    method setAlpha (line 68) | public void setAlpha(float alpha) {
    method draw (line 72) | public void draw(Canvas canvas) {

FILE: refresh-header/src/main/java/com/scwang/smartrefresh/header/storehouse/StoreHousePath.java
  class StoreHousePath (line 11) | public class StoreHousePath {
    method addChar (line 325) | public static void addChar(char c, float[] points) {
    method getPath (line 329) | public static ArrayList<float[]> getPath(String str) {
    method getPath (line 339) | public static ArrayList<float[]> getPath(String str, float scale, int ...

FILE: refresh-header/src/main/java/com/scwang/smartrefresh/header/waterdrop/Circle.java
  class Circle (line 7) | public class Circle {

FILE: refresh-header/src/main/java/com/scwang/smartrefresh/header/waterdrop/WaterDropView.java
  class WaterDropView (line 21) | public class WaterDropView extends View {
    method WaterDropView (line 33) | public WaterDropView(Context context) {
    method WaterDropView (line 38) | public WaterDropView(Context context, AttributeSet attrs) {
    method WaterDropView (line 43) | public WaterDropView(Context context, AttributeSet attrs, int defStyle...
    method initView (line 48) | private void initView(Context context, AttributeSet attrs) {
    method getMaxCircleRadius (line 78) | public int getMaxCircleRadius() {
    method onMeasure (line 82) | @Override
    method onLayout (line 92) | @Override
    method onDraw (line 98) | @Override
    method makeBezierPath (line 121) | private void makeBezierPath() {
    method getAngle (line 162) | private double getAngle() {
    method createAnimator (line 175) | public Animator createAnimator() {
    method updateComleteState (line 191) | public void updateComleteState(int offset, int maxHeight) {
    method updateComleteState (line 199) | public void updateComleteState(float percent) {
    method updateComleteState (line 212) | public void updateComleteState(int height) {
    method getTopCircle (line 231) | public Circle getTopCircle() {
    method getBottomCircle (line 235) | public Circle getBottomCircle() {
    method setIndicatorColor (line 239) | public void setIndicatorColor(int color) {
    method getIndicatorColor (line 243) | public int getIndicatorColor() {

FILE: refresh-header/src/main/java/com/scwang/smartrefresh/header/waveswipe/AnimationImageView.java
  class AnimationImageView (line 26) | public class AnimationImageView extends ImageView {
    method AnimationImageView (line 37) | public AnimationImageView(Context context) {
    method setAnimationListener (line 46) | public void setAnimationListener(Animation.AnimationListener listener) {
    method onAnimationStart (line 54) | @Override public void onAnimationStart() {
    method onAnimationEnd (line 65) | @Override public void onAnimationEnd() {

FILE: refresh-header/src/main/java/com/scwang/smartrefresh/header/waveswipe/DisplayUtil.java
  class DisplayUtil (line 26) | public class DisplayUtil {
    method DisplayUtil (line 28) | private DisplayUtil(){}
    method isOver600dp (line 36) | public static boolean isOver600dp(Context context) {

FILE: refresh-header/src/main/java/com/scwang/smartrefresh/header/waveswipe/DropBounceInterpolator.java
  class DropBounceInterpolator (line 28) | public class DropBounceInterpolator implements Interpolator {
    method DropBounceInterpolator (line 30) | public DropBounceInterpolator() {
    method DropBounceInterpolator (line 33) | @SuppressWarnings({"UnusedDeclaration"})
    method getInterpolation (line 43) | @Override

FILE: refresh-header/src/main/java/com/scwang/smartrefresh/header/waveswipe/WaveView.java
  class WaveView (line 38) | public class WaveView extends View implements ViewTreeObserver.OnPreDraw...
    method onAnimationUpdate (line 218) | @Override
    method WaveView (line 228) | public WaveView(Context context) {
    method onSizeChanged (line 238) | @Override
    method onPreDraw (line 250) | @Override
    method onDraw (line 259) | @Override
    method onDetachedFromWindow (line 314) | @Override
    method initView (line 343) | private void initView() {
    method setUpPaint (line 352) | private void setUpPaint() {
    method setUpPath (line 366) | private void setUpPath() {
    method resetAnimator (line 373) | private void resetAnimator() {
    method onPreDragWave (line 384) | private void onPreDragWave() {
    method manualRefresh (line 392) | public void manualRefresh() {
    method beginPhase (line 406) | public void beginPhase(float move1) {
    method postInvalidateOnAnimation (line 429) | public void postInvalidateOnAnimation() {
    method appearPhase (line 437) | public void appearPhase(float move1, float move2) {
    method expandPhase (line 471) | public void expandPhase(float move1, float move2, float move3) {
    method updateMaxDropHeight (line 526) | private void updateMaxDropHeight(int height) {
    method startDropAnimation (line 538) | public void startDropAnimation() {
    method startDisappearCircleAnimation (line 577) | public void startDisappearCircleAnimation() {
    method startWaveAnimation (line 610) | public void startWaveAnimation(float h) {
    method animationDropCircle (line 629) | public void animationDropCircle() {
    method getCurrentCircleCenterY (line 637) | public float getCurrentCircleCenterY() {
    method setMaxDropHeight (line 644) | public void setMaxDropHeight(int maxDropHeight) {
    method isDisappearCircleAnimatorRunning (line 657) | public boolean isDisappearCircleAnimatorRunning() {
    method setShadowRadius (line 664) | public void setShadowRadius(int radius) {
    method setShadow (line 672) | public void setShadow(int radius, int color) {
    method setWaveColor (line 682) | public void setWaveColor(int color) {
    method setWaveARGBColor (line 687) | public void setWaveARGBColor(int a, int r, int g, int b) {

FILE: refresh-header/src/test/java/com/scwang/smartrefresh/header/ExampleUnitTest.java
  class ExampleUnitTest (line 12) | public class ExampleUnitTest {
    method addition_isCorrect (line 13) | @Test

FILE: refresh-layout/src/androidTest/java/com/scwang/smartrefresh/layout/ExampleInstrumentedTest.java
  class ExampleInstrumentedTest (line 17) | @RunWith(AndroidJUnit4.class)
    method useAppContext (line 19) | @Test

FILE: refresh-layout/src/main/java/android/support/v4/view/PagerAdapterWrapper.java
  class PagerAdapterWrapper (line 10) | @SuppressWarnings("deprecation")
    method PagerAdapterWrapper (line 15) | public PagerAdapterWrapper(PagerAdapter wrapped) {
    method attachViewPager (line 19) | public void attachViewPager(ViewPager viewPager) {
    method setViewPagerObserver (line 37) | @Override
    method getCount (line 42) | @Override
    method startUpdate (line 47) | @Override
    method instantiateItem (line 52) | @Override
    method destroyItem (line 57) | @Override
    method setPrimaryItem (line 62) | @Override
    method finishUpdate (line 67) | @Override
    method startUpdate (line 72) | @Override
    method instantiateItem (line 78) | @Override
    method destroyItem (line 84) | @Override
    method setPrimaryItem (line 90) | @Override
    method finishUpdate (line 96) | @Override
    method isViewFromObject (line 102) | @Override
    method saveState (line 107) | @Override
    method restoreState (line 112) | @Override
    method getItemPosition (line 117) | @Override
    method notifyDataSetChanged (line 122) | @Override
    method registerDataSetObserver (line 127) | @Override
    method unregisterDataSetObserver (line 132) | @Override
    method getPageTitle (line 137) | @Override
    method getPageWidth (line 142) | @Override

FILE: refresh-layout/src/main/java/com/scwang/smartrefresh/layout/SmartRefreshLayout.java
  class SmartRefreshLayout (line 82) | @SuppressWarnings({"unused", "WeakerAccess"})
    method createRefreshFooter (line 202) | @NonNull
    method createRefreshHeader (line 209) | @NonNull
    method SmartRefreshLayout (line 219) | public SmartRefreshLayout(Context context) {
    method SmartRefreshLayout (line 224) | public SmartRefreshLayout(Context context, AttributeSet attrs) {
    method SmartRefreshLayout (line 229) | public SmartRefreshLayout(Context context, AttributeSet attrs, int def...
    method SmartRefreshLayout (line 234) | @RequiresApi(Build.VERSION_CODES.LOLLIPOP)
    method initView (line 240) | private void initView(Context context, AttributeSet attrs) {
    method onFinishInflate (line 300) | @Override
    method onAttachedToWindow (line 385) | @Override
    method onMeasure (line 512) | @Override
    method onLayout (line 647) | @Override
    method dispatchDraw (line 706) | @Override
    method onDetachedFromWindow (line 720) | @Override
    method dispatchTouchEvent (line 741) | @Override
    method interceptAnimator (line 906) | protected boolean interceptAnimator(int action) {
    method requestDisallowInterceptTouchEvent (line 923) | @Override
    method notifyStateChanged (line 941) | protected void notifyStateChanged(RefreshState state) {
    method setStatePullUpToLoad (line 958) | protected void setStatePullUpToLoad() {
    method setStateReleaseToLoad (line 966) | protected void setStateReleaseToLoad() {
    method setStateReleaseToRefresh (line 974) | protected void setStateReleaseToRefresh() {
    method setStatePullDownToRefresh (line 982) | protected void setStatePullDownToRefresh() {
    method setStatePullDownCanceled (line 990) | protected void setStatePullDownCanceled() {
    method setStatePullUpCanceled (line 999) | protected void setStatePullUpCanceled() {
    method setStateLodingFinish (line 1008) | protected void setStateLodingFinish() {
    method setStateRefresingFinish (line 1012) | protected void setStateRefresingFinish() {
    method setStateLoding (line 1016) | protected void setStateLoding() {
    method setStateRefresing (line 1032) | protected void setStateRefresing() {
    method resetStatus (line 1051) | protected void resetStatus() {
    method getViceState (line 1063) | protected RefreshState getViceState() {
    method setViceState (line 1067) | protected void setViceState(RefreshState state) {
    method onAnimationEnd (line 1082) | @Override
    method onAnimationUpdate (line 1094) | @Override
    method animSpinner (line 1101) | protected ValueAnimator animSpinner(int endSpinner) {
    method animSpinner (line 1105) | protected ValueAnimator animSpinner(int endSpinner, int startDelay) {
    method animSpinner (line 1112) | protected ValueAnimator animSpinner(int endSpinner, int startDelay, In...
    method animSpinnerBounce (line 1131) | protected ValueAnimator animSpinnerBounce(int bounceSpinner) {
    method overSpinner (line 1182) | protected boolean overSpinner() {
    method moveSpinnerInfinitely (line 1221) | protected void moveSpinnerInfinitely(float dy) {
    method moveSpinner (line 1261) | protected void moveSpinner(int spinner, boolean isAnimator) {
    method checkLayoutParams (line 1366) | @Override
    method generateDefaultLayoutParams (line 1371) | @Override
    method generateLayoutParams (line 1376) | @Override
    method generateLayoutParams (line 1381) | @Override
    class LayoutParams (line 1386) | public static class LayoutParams extends MarginLayoutParams {
      method LayoutParams (line 1388) | public LayoutParams(Context context, AttributeSet attrs) {
      method LayoutParams (line 1398) | public LayoutParams(int width, int height) {
      method LayoutParams (line 1402) | public LayoutParams(MarginLayoutParams source) {
      method LayoutParams (line 1406) | public LayoutParams(ViewGroup.LayoutParams source) {
    method onStartNestedScroll (line 1418) | @Override
    method onNestedScrollAccepted (line 1425) | @Override
    method onNestedPreScroll (line 1436) | @Override
    method getNestedScrollAxes (line 1542) | @Override
    method onStopNestedScroll (line 1547) | @Override
    method onNestedScroll (line 1561) | @Override
    method onNestedPreFling (line 1601) | @Override
    method onNestedFling (line 1606) | @Override
    method setNestedScrollingEnabled (line 1613) | @Override
    method isNestedScrollingEnabled (line 1619) | @Override
    method startNestedScroll (line 1624) | @Override
    method stopNestedScroll (line 1629) | @Override
    method hasNestedScrollingParent (line 1634) | @Override
    method dispatchNestedScroll (line 1639) | @Override
    method dispatchNestedPreScroll (line 1646) | @Override
    method dispatchNestedFling (line 1652) | @Override
    method dispatchNestedPreFling (line 1657) | @Override
    method setFooterHeight (line 1666) | @Override
    method setFooterHeightPx (line 1671) | @Override
    method setHeaderHeight (line 1684) | @Override
    method setHeaderHeightPx (line 1689) | @Override
    method setDragRate (line 1702) | @Override
    method setHeaderMaxDragRate (line 1711) | @Override
    method setFooterMaxDragRate (line 1726) | @Override
    method setReboundInterpolator (line 1741) | @Override
    method setReboundDuration (line 1750) | @Override
    method setEnableLoadmore (line 1759) | @Override
    method setEnableRefresh (line 1769) | @Override
    method setEnableHeaderTranslationContent (line 1778) | @Override
    method setEnableFooterTranslationContent (line 1787) | @Override
    method setDisableContentWhenRefresh (line 1796) | @Override
    method setDisableContentWhenLoading (line 1805) | @Override
    method setEnableAutoLoadmore (line 1814) | @Override
    method setEnableOverScrollBounce (line 1823) | @Override
    method setEnablePureScrollMode (line 1832) | @Override
    method setEnableScrollContentWhenLoaded (line 1844) | @Override
    method setEnableLoadmoreWhenContentNotFull (line 1853) | @Override
    method setEnableNestedScroll (line 1865) | @Override
    method setRefreshHeader (line 1874) | @Override
    method setRefreshHeader (line 1894) | @Override
    method setRefreshFooter (line 1914) | @Override
    method setRefreshFooter (line 1935) | @Override
    method getRefreshFooter (line 1956) | @Nullable
    method getRefreshHeader (line 1965) | @Nullable
    method getState (line 1974) | @Override
    method getLayout (line 1982) | @Override
    method setOnRefreshListener (line 1990) | @Override
    method setOnLoadmoreListener (line 1999) | @Override
    method setOnRefreshLoadmoreListener (line 2009) | @Override
    method setOnMultiPurposeListener (line 2020) | @Override
    method setPrimaryColorsId (line 2029) | @Override
    method setPrimaryColors (line 2042) | @Override
    method setScrollBoundaryDecider (line 2057) | @Override
    method setLoadmoreFinished (line 2069) | @Override
    method finishRefresh (line 2081) | @Override
    method finishLoadmore (line 2090) | @Override
    method finishRefresh (line 2099) | @Override
    method finishRefresh (line 2107) | @Override
    method finishRefresh (line 2116) | @Override
    method finishLoadmore (line 2147) | @Override
    method finishLoadmore (line 2155) | @Override
    method finishLoadmore (line 2164) | @Override
    method isRefreshing (line 2200) | @Override
    method isLoading (line 2208) | @Override
    method autoRefresh (line 2216) | @Override
    method autoRefresh (line 2224) | @Override
    method autoRefresh (line 2232) | @Override
    method autoLoadmore (line 2284) | @Override
    method autoLoadmore (line 2292) | @Override
    method autoLoadmore (line 2300) | @Override
    method isEnableLoadmore (line 2349) | @Override
    method isLoadmoreFinished (line 2354) | @Override
    method isEnableAutoLoadmore (line 2359) | @Override
    method isEnableRefresh (line 2364) | @Override
    method isEnableOverScrollBounce (line 2369) | @Override
    method isEnablePureScrollMode (line 2374) | @Override
    method isEnableScrollContentWhenLoaded (line 2379) | @Override
    method setDefaultRefreshHeaderCreater (line 2387) | public static void setDefaultRefreshHeaderCreater(@NonNull DefaultRefr...
    method setDefaultRefreshFooterCreater (line 2394) | public static void setDefaultRefreshFooterCreater(@NonNull DefaultRefr...
    class RefreshKernelImpl (line 2402) | protected class RefreshKernelImpl implements RefreshKernel {
      method getRefreshLayout (line 2403) | @NonNull
      method getRefreshContent (line 2409) | @NonNull
      method setStatePullUpToLoad (line 2416) | public RefreshKernel setStatePullUpToLoad() {
      method setStateReleaseToLoad (line 2421) | public RefreshKernel setStateReleaseToLoad() {
      method setStateReleaseToRefresh (line 2426) | public RefreshKernel setStateReleaseToRefresh() {
      method setStatePullDownToRefresh (line 2431) | public RefreshKernel setStatePullDownToRefresh() {
      method setStatePullDownCanceled (line 2436) | public RefreshKernel setStatePullDownCanceled() {
      method setStatePullUpCanceled (line 2441) | public RefreshKernel setStatePullUpCanceled() {
      method setStateLoding (line 2446) | public RefreshKernel setStateLoding() {
      method setStateRefresing (line 2451) | public RefreshKernel setStateRefresing() {
      method setStateLodingFinish (line 2456) | @Override
      method setStateRefresingFinish (line 2462) | @Override
      method resetStatus (line 2468) | public RefreshKernel resetStatus() {
      method overSpinner (line 2475) | public RefreshKernel overSpinner() {
      method moveSpinnerInfinitely (line 2480) | public RefreshKernel moveSpinnerInfinitely(float dy) {
      method moveSpinner (line 2485) | public RefreshKernel moveSpinner(int spinner, boolean isAnimator) {
      method animSpinner (line 2490) | public RefreshKernel animSpinner(int endSpinner) {
      method animSpinnerBounce (line 2495) | @Override
      method getSpinner (line 2501) | @Override
      method requestDrawBackgoundForHeader (line 2508) | @Override
      method requestDrawBackgoundForFooter (line 2517) | @Override
      method requestHeaderNeedTouchEventWhenRefreshing (line 2525) | @Override
      method requestFooterNeedTouchEventWhenLoading (line 2530) | @Override
      method requestRemeasureHeightForHeader (line 2535) | @Override
      method requestRemeasureHeightForFooter (line 2542) | @Override
    method post (line 2555) | @Override
    method postDelayed (line 2565) | @Override

FILE: refresh-layout/src/main/java/com/scwang/smartrefresh/layout/api/DefaultRefreshFooterCreater.java
  type DefaultRefreshFooterCreater (line 11) | public interface DefaultRefreshFooterCreater {
    method createRefreshFooter (line 12) | @NonNull

FILE: refresh-layout/src/main/java/com/scwang/smartrefresh/layout/api/DefaultRefreshHeaderCreater.java
  type DefaultRefreshHeaderCreater (line 11) | public interface DefaultRefreshHeaderCreater {
    method createRefreshHeader (line 12) | @NonNull

FILE: refresh-layout/src/main/java/com/scwang/smartrefresh/layout/api/RefreshContent.java
  type RefreshContent (line 13) | public interface RefreshContent {
    method moveSpinner (line 14) | void moveSpinner(int spinner);
    method canRefresh (line 15) | boolean canRefresh();
    method canLoadmore (line 16) | boolean canLoadmore();
    method getMeasuredWidth (line 17) | int getMeasuredWidth();
    method getMeasuredHeight (line 18) | int getMeasuredHeight();
    method measure (line 19) | void measure(int widthSpec, int heightSpec);
    method layout (line 20) | void layout(int left, int top, int right, int bottom);
    method getView (line 22) | View getView();
    method getScrollableView (line 23) | View getScrollableView();
    method getLayoutParams (line 24) | ViewGroup.LayoutParams getLayoutParams();
    method onActionDown (line 26) | void onActionDown(MotionEvent e);
    method onActionUpOrCancel (line 27) | void onActionUpOrCancel();
    method setupComponent (line 29) | void setupComponent(RefreshKernel kernel, View fixedHeader, View fixed...
    method onInitialHeaderAndFooter (line 30) | void onInitialHeaderAndFooter(int headerHeight, int footerHeight);
    method setScrollBoundaryDecider (line 31) | void setScrollBoundaryDecider(ScrollBoundaryDecider boundary);
    method setEnableLoadmoreWhenContentNotFull (line 32) | void setEnableLoadmoreWhenContentNotFull(boolean enable);
    method onLoadingFinish (line 34) | AnimatorUpdateListener onLoadingFinish(RefreshKernel kernel, int foote...

FILE: refresh-layout/src/main/java/com/scwang/smartrefresh/layout/api/RefreshFooter.java
  type RefreshFooter (line 8) | public interface RefreshFooter extends RefreshInternal {
    method onPullingUp (line 16) | void onPullingUp(float percent, int offset, int footerHeight, int exte...
    method onPullReleasing (line 24) | void onPullReleasing(float percent, int offset, int footerHeight, int ...
    method setLoadmoreFinished (line 30) | boolean setLoadmoreFinished(boolean finished);

FILE: refresh-layout/src/main/java/com/scwang/smartrefresh/layout/api/RefreshHeader.java
  type RefreshHeader (line 8) | public interface RefreshHeader extends RefreshInternal {
    method onPullingDown (line 16) | void onPullingDown(float percent, int offset, int headerHeight, int ex...
    method onReleasing (line 25) | void onReleasing(float percent, int offset, int headerHeight, int exte...

FILE: refresh-layout/src/main/java/com/scwang/smartrefresh/layout/api/RefreshInternal.java
  type RefreshInternal (line 15) | public interface RefreshInternal extends OnStateChangedListener {
    method getView (line 19) | @NonNull
    method getSpinnerStyle (line 25) | SpinnerStyle getSpinnerStyle();
    method setPrimaryColors (line 31) | void setPrimaryColors(int... colors);
    method onInitialized (line 39) | void onInitialized(RefreshKernel kernel, int height, int extendHeight);
    method onHorizontalDrag (line 46) | void onHorizontalDrag(float percentX, int offsetX, int offsetMax);
    method onStartAnimator (line 54) | void onStartAnimator(RefreshLayout layout, int height, int extendHeight);
    method onFinish (line 62) | int onFinish(RefreshLayout layout, boolean success);
    method isSupportHorizontalDrag (line 68) | boolean isSupportHorizontalDrag();

FILE: refresh-layout/src/main/java/com/scwang/smartrefresh/layout/api/RefreshKernel.java
  type RefreshKernel (line 11) | public interface RefreshKernel {
    method getRefreshLayout (line 13) | @NonNull
    method getRefreshContent (line 15) | @NonNull
    method setStatePullUpToLoad (line 19) | RefreshKernel setStatePullUpToLoad() ;
    method setStateReleaseToLoad (line 20) | RefreshKernel setStateReleaseToLoad() ;
    method setStateReleaseToRefresh (line 21) | RefreshKernel setStateReleaseToRefresh() ;
    method setStatePullDownToRefresh (line 22) | RefreshKernel setStatePullDownToRefresh() ;
    method setStatePullDownCanceled (line 23) | RefreshKernel setStatePullDownCanceled() ;
    method setStatePullUpCanceled (line 24) | RefreshKernel setStatePullUpCanceled() ;
    method setStateLoding (line 25) | RefreshKernel setStateLoding() ;
    method setStateRefresing (line 26) | RefreshKernel setStateRefresing() ;
    method setStateLodingFinish (line 27) | RefreshKernel setStateLodingFinish() ;
    method setStateRefresingFinish (line 28) | RefreshKernel setStateRefresingFinish() ;
    method resetStatus (line 29) | RefreshKernel resetStatus() ;
    method overSpinner (line 38) | RefreshKernel overSpinner() ;
    method moveSpinnerInfinitely (line 45) | RefreshKernel moveSpinnerInfinitely(float dy);
    method moveSpinner (line 53) | RefreshKernel moveSpinner(int spinner, boolean isAnimator);
    method animSpinner (line 60) | RefreshKernel animSpinner(int endSpinner);
    method animSpinnerBounce (line 66) | RefreshKernel animSpinnerBounce(int bounceSpinner);
    method getSpinner (line 71) | int getSpinner();
    method requestDrawBackgoundForHeader (line 80) | RefreshKernel requestDrawBackgoundForHeader(int backgroundColor);
    method requestDrawBackgoundForFooter (line 85) | RefreshKernel requestDrawBackgoundForFooter(int backgroundColor);
    method requestHeaderNeedTouchEventWhenRefreshing (line 89) | RefreshKernel requestHeaderNeedTouchEventWhenRefreshing(boolean request);
    method requestFooterNeedTouchEventWhenLoading (line 93) | RefreshKernel requestFooterNeedTouchEventWhenLoading(boolean request);
    method requestRemeasureHeightForHeader (line 97) | RefreshKernel requestRemeasureHeightForHeader();
    method requestRemeasureHeightForFooter (line 101) | RefreshKernel requestRemeasureHeightForFooter();

FILE: refresh-layout/src/main/java/com/scwang/smartrefresh/layout/api/RefreshLayout.java
  type RefreshLayout (line 19) | public interface RefreshLayout {
    method setFooterHeight (line 21) | RefreshLayout setFooterHeight(float dp);
    method setFooterHeightPx (line 23) | RefreshLayout setFooterHeightPx(int px);
    method setHeaderHeight (line 25) | RefreshLayout setHeaderHeight(float dp);
    method setHeaderHeightPx (line 27) | RefreshLayout setHeaderHeightPx(int px);
    method setDragRate (line 32) | RefreshLayout setDragRate(float rate);
    method setHeaderMaxDragRate (line 37) | RefreshLayout setHeaderMaxDragRate(float rate);
    method setFooterMaxDragRate (line 42) | RefreshLayout setFooterMaxDragRate(float rate);
    method setReboundInterpolator (line 47) | RefreshLayout setReboundInterpolator(Interpolator interpolator);
    method setReboundDuration (line 52) | RefreshLayout setReboundDuration(int duration);
    method setEnableLoadmore (line 57) | RefreshLayout setEnableLoadmore(boolean enable);
    method setEnableRefresh (line 62) | RefreshLayout setEnableRefresh(boolean enable);
    method setEnableHeaderTranslationContent (line 67) | RefreshLayout setEnableHeaderTranslationContent(boolean enable);
    method setEnableFooterTranslationContent (line 72) | RefreshLayout setEnableFooterTranslationContent(boolean enable);
    method setDisableContentWhenRefresh (line 77) | RefreshLayout setDisableContentWhenRefresh(boolean disable);
    method setDisableContentWhenLoading (line 82) | RefreshLayout setDisableContentWhenLoading(boolean disable);
    method setEnableAutoLoadmore (line 87) | RefreshLayout setEnableAutoLoadmore(boolean enable);
    method setLoadmoreFinished (line 92) | RefreshLayout setLoadmoreFinished(boolean finished);
    method setRefreshFooter (line 97) | RefreshLayout setRefreshFooter(RefreshFooter footer);
    method setRefreshFooter (line 102) | RefreshLayout setRefreshFooter(RefreshFooter footer, int width, int he...
    method setRefreshHeader (line 107) | RefreshLayout setRefreshHeader(RefreshHeader header);
    method setRefreshHeader (line 112) | RefreshLayout setRefreshHeader(RefreshHeader header, int width, int he...
    method setEnableOverScrollBounce (line 117) | RefreshLayout setEnableOverScrollBounce(boolean enable);
    method setEnablePureScrollMode (line 122) | RefreshLayout setEnablePureScrollMode(boolean enable);
    method setEnableScrollContentWhenLoaded (line 127) | RefreshLayout setEnableScrollContentWhenLoaded(boolean enable);
    method setEnableLoadmoreWhenContentNotFull (line 132) | RefreshLayout setEnableLoadmoreWhenContentNotFull(boolean enable);
    method setEnableNestedScroll (line 137) | RefreshLayout setEnableNestedScroll(boolean enabled);
    method setOnRefreshListener (line 142) | RefreshLayout setOnRefreshListener(OnRefreshListener listener);
    method setOnLoadmoreListener (line 147) | RefreshLayout setOnLoadmoreListener(OnLoadmoreListener listener);
    method setOnRefreshLoadmoreListener (line 152) | RefreshLayout setOnRefreshLoadmoreListener(OnRefreshLoadmoreListener l...
    method setOnMultiPurposeListener (line 157) | RefreshLayout setOnMultiPurposeListener(OnMultiPurposeListener listener);
    method setPrimaryColorsId (line 162) | RefreshLayout setPrimaryColorsId(@ColorRes int... primaryColorId);
    method setPrimaryColors (line 167) | RefreshLayout setPrimaryColors(int... colors);
    method setScrollBoundaryDecider (line 172) | RefreshLayout setScrollBoundaryDecider(ScrollBoundaryDecider boundary);
    method finishRefresh (line 177) | RefreshLayout finishRefresh();
    method finishLoadmore (line 182) | RefreshLayout finishLoadmore();
    method finishRefresh (line 187) | RefreshLayout finishRefresh(int delayed);
    method finishRefresh (line 193) | RefreshLayout finishRefresh(boolean success);
    method finishRefresh (line 198) | RefreshLayout finishRefresh(int delayed, boolean success);
    method finishLoadmore (line 203) | RefreshLayout finishLoadmore(int delayed);
    method finishLoadmore (line 208) | RefreshLayout finishLoadmore(boolean success);
    method finishLoadmore (line 213) | RefreshLayout finishLoadmore(int delayed, boolean success);
    method getRefreshHeader (line 218) | @Nullable
    method getRefreshFooter (line 224) | @Nullable
    method getState (line 230) | RefreshState getState();
    method getLayout (line 235) | ViewGroup getLayout();
    method isRefreshing (line 240) | boolean isRefreshing();
    method isLoading (line 245) | boolean isLoading();
    method autoRefresh (line 250) | boolean autoRefresh();
    method autoRefresh (line 255) | boolean autoRefresh(int delayed);
    method autoRefresh (line 260) | boolean autoRefresh(int delayed, float dragrate);
    method autoLoadmore (line 265) | boolean autoLoadmore();
    method autoLoadmore (line 270) | boolean autoLoadmore(int delayed);
    method autoLoadmore (line 275) | boolean autoLoadmore(int delayed, float dragrate);
    method isEnableRefresh (line 277) | boolean isEnableRefresh();
    method isEnableLoadmore (line 279) | boolean isEnableLoadmore();
    method isLoadmoreFinished (line 281) | boolean isLoadmoreFinished();
    method isEnableAutoLoadmore (line 283) | boolean isEnableAutoLoadmore();
    method isEnableOverScrollBounce (line 285) | boolean isEnableOverScrollBounce();
    method isEnablePureScrollMode (line 287) | boolean isEnablePureScrollMode();
    method isEnableScrollContentWhenLoaded (line 289) | boolean isEnableScrollContentWhenLoaded();

FILE: refresh-layout/src/main/java/com/scwang/smartrefresh/layout/api/ScrollBoundaryDecider.java
  type ScrollBoundaryDecider (line 10) | public interface ScrollBoundaryDecider {
    method canRefresh (line 16) | boolean canRefresh(View content);
    method canLoadmore (line 22) | boolean canLoadmore(View content);

FILE: refresh-layout/src/main/java/com/scwang/smartrefresh/layout/constant/DimensionStatus.java
  type DimensionStatus (line 7) | public enum DimensionStatus {
    method DimensionStatus (line 20) | DimensionStatus(boolean notifyed) {
    method unNotify (line 27) | public DimensionStatus unNotify() {
    method notifyed (line 41) | public DimensionStatus notifyed() {
    method canReplaceWith (line 51) | public boolean canReplaceWith(DimensionStatus status) {
    method gteReplaceWith (line 58) | public boolean gteReplaceWith(DimensionStatus status) {

FILE: refresh-layout/src/main/java/com/scwang/smartrefresh/layout/constant/RefreshState.java
  type RefreshState (line 3) | public enum RefreshState {
    method isAnimating (line 11) | public boolean isAnimating() {
    method isDraging (line 16) | public boolean isDraging() {
    method isDragingHeader (line 23) | public boolean isDragingHeader() {
    method isDragingFooter (line 28) | public boolean isDragingFooter() {
    method isHeader (line 33) | public boolean isHeader() {
    method isFooter (line 37) | public boolean isFooter() {

FILE: refresh-layout/src/main/java/com/scwang/smartrefresh/layout/constant/SpinnerStyle.java
  type SpinnerStyle (line 8) | public enum SpinnerStyle {

FILE: refresh-layout/src/main/java/com/scwang/smartrefresh/layout/footer/BallPulseFooter.java
  class BallPulseFooter (line 32) | public class BallPulseFooter extends ViewGroup implements RefreshFooter {
    method BallPulseFooter (line 38) | public BallPulseFooter(@NonNull Context context) {
    method BallPulseFooter (line 43) | public BallPulseFooter(@NonNull Context context, @Nullable AttributeSe...
    method BallPulseFooter (line 48) | public BallPulseFooter(@NonNull Context context, @Nullable AttributeSe...
    method initView (line 53) | private void initView(Context context, AttributeSet attrs, int defStyl...
    method onMeasure (line 74) | @Override
    method onLayout (line 85) | @Override
    method onInitialized (line 98) | @Override
    method isSupportHorizontalDrag (line 103) | @Override
    method onHorizontalDrag (line 108) | @Override
    method onPullingUp (line 112) | @Override
    method onPullReleasing (line 116) | @Override
    method onStartAnimator (line 120) | @Override
    method onStateChanged (line 125) | @Override
    method onFinish (line 129) | @Override
    method setLoadmoreFinished (line 135) | @Override
    method setPrimaryColors (line 140) | @Override@Deprecated
    method getView (line 151) | @NonNull
    method getSpinnerStyle (line 157) | @Override
    method setSpinnerStyle (line 164) | public BallPulseFooter setSpinnerStyle(SpinnerStyle mSpinnerStyle) {

FILE: refresh-layout/src/main/java/com/scwang/smartrefresh/layout/footer/ClassicsFooter.java
  class ClassicsFooter (line 36) | @SuppressWarnings("unused")
    method ClassicsFooter (line 61) | public ClassicsFooter(Context context) {
    method ClassicsFooter (line 66) | public ClassicsFooter(Context context, AttributeSet attrs) {
    method ClassicsFooter (line 71) | public ClassicsFooter(Context context, AttributeSet attrs, int defStyl...
    method initView (line 76) | private void initView(Context context, AttributeSet attrs, int defStyl...
    method onMeasure (line 174) | @Override
    method onInitialized (line 188) | @Override
    method isSupportHorizontalDrag (line 194) | @Override
    method onHorizontalDrag (line 199) | @Override
    method onPullingUp (line 203) | @Override
    method onPullReleasing (line 208) | @Override
    method onStartAnimator (line 213) | @Override
    method onFinish (line 225) | @Override
    method setPrimaryColors (line 247) | @Override@Deprecated
    method setLoadmoreFinished (line 266) | @Override
    method getView (line 286) | @NonNull
    method getSpinnerStyle (line 291) | @Override
    method onStateChanged (line 296) | @Override
    method setProgressBitmap (line 350) | public ClassicsFooter setProgressBitmap(Bitmap bitmap) {
    method setProgressDrawable (line 355) | public ClassicsFooter setProgressDrawable(Drawable drawable) {
    method setProgressResource (line 360) | public ClassicsFooter setProgressResource(@DrawableRes int resId) {
    method setArrowBitmap (line 365) | public ClassicsFooter setArrowBitmap(Bitmap bitmap) {
    method setArrowDrawable (line 370) | public ClassicsFooter setArrowDrawable(Drawable drawable) {
    method setArrowResource (line 375) | public ClassicsFooter setArrowResource(@DrawableRes int resId) {
    method setSpinnerStyle (line 380) | public ClassicsFooter setSpinnerStyle(SpinnerStyle style) {
    method setAccentColor (line 384) | public ClassicsFooter setAccentColor(int accentColor) {
    method setPrimaryColor (line 394) | public ClassicsFooter setPrimaryColor(int primaryColor) {
    method setFinishDuration (line 401) | public ClassicsFooter setFinishDuration(int delay) {
    method setTextSizeTitle (line 406) | public ClassicsFooter setTextSizeTitle(float size) {
    method setTextSizeTitle (line 414) | public ClassicsFooter setTextSizeTitle(int unit, float size) {
    method setDrawableMarginRight (line 422) | public ClassicsFooter setDrawableMarginRight(float dp) {
    method setDrawableMarginRightPx (line 426) | public ClassicsFooter setDrawableMarginRightPx(int px) {
    method setDrawableSize (line 435) | public ClassicsFooter setDrawableSize(float dp) {
    method setDrawableSizePx (line 439) | public ClassicsFooter setDrawableSizePx(int px) {
    method setDrawableArrowSize (line 449) | public ClassicsFooter setDrawableArrowSize(float dp) {
    method setDrawableArrowSizePx (line 453) | public ClassicsFooter setDrawableArrowSizePx(int px) {
    method setDrawableProgressSize (line 461) | public ClassicsFooter setDrawableProgressSize(float dp) {
    method setDrawableProgressSizePx (line 465) | public ClassicsFooter setDrawableProgressSizePx(int px) {
    method getTitleText (line 473) | public TextView getTitleText() {
    method getProgressView (line 477) | public ImageView getProgressView() {
    method getArrowView (line 481) | public ImageView getArrowView() {

FILE: refresh-layout/src/main/java/com/scwang/smartrefresh/layout/footer/FalsifyFooter.java
  class FalsifyFooter (line 28) | public class FalsifyFooter extends FalsifyHeader implements RefreshFooter {
    method FalsifyFooter (line 31) | public FalsifyFooter(Context context) {
    method FalsifyFooter (line 35) | public FalsifyFooter(Context context, AttributeSet attrs) {
    method FalsifyFooter (line 39) | public FalsifyFooter(Context context, AttributeSet attrs, int defStyle...
    method FalsifyFooter (line 43) | @RequiresApi(Build.VERSION_CODES.LOLLIPOP)
    method onDraw (line 48) | @Override@SuppressLint("DrawAllocation")
    method onPullingUp (line 76) | @Override
    method onPullReleasing (line 81) | @Override
    method setLoadmoreFinished (line 86) | @Override

FILE: refresh-layout/src/main/java/com/scwang/smartrefresh/layout/footer/ballpulse/BallPulseView.java
  class BallPulseView (line 18) | public class BallPulseView extends View {
    method BallPulseView (line 36) | public BallPulseView(Context context) {
    method BallPulseView (line 40) | public BallPulseView(Context context, AttributeSet attrs) {
    method BallPulseView (line 44) | public BallPulseView(Context context, AttributeSet attrs, int defStyle...
    method onMeasure (line 55) | @Override
    method onDetachedFromWindow (line 62) | @Override
    method onDraw (line 70) | @Override
    method isStarted (line 87) | private boolean isStarted() {
    method createAnimators (line 94) | private void createAnimators() {
    method setIndicatorColor (line 119) | public void setIndicatorColor(int color) {
    method setNormalColor (line 123) | public void setNormalColor(@ColorInt int color) {
    method setAnimatingColor (line 127) | public void setAnimatingColor(@ColorInt int color) {
    method startAnim (line 131) | public void startAnim() {
    method stopAnim (line 150) | public void stopAnim() {

FILE: refresh-layout/src/main/java/com/scwang/smartrefresh/layout/header/BezierRadarHeader.java
  class BezierRadarHeader (line 34) | public class BezierRadarHeader extends FrameLayout implements RefreshHea...
    method BezierRadarHeader (line 43) | public BezierRadarHeader(Context context) {
    method BezierRadarHeader (line 47) | public BezierRadarHeader(Context context, AttributeSet attrs) {
    method BezierRadarHeader (line 51) | public BezierRadarHeader(Context context, AttributeSet attrs, int defS...
    method initView (line 56) | private void initView(Context context, AttributeSet attrs, int defStyl...
    method setPrimaryColor (line 97) | public BezierRadarHeader setPrimaryColor(int color) {
    method setAccentColor (line 103) | public BezierRadarHeader setAccentColor(int color) {
    method setPrimaryColorId (line 110) | public BezierRadarHeader setPrimaryColorId(int colorId) {
    method setAccentColorId (line 115) | public BezierRadarHeader setAccentColorId(int colorId) {
    method setEnableHorizontalDrag (line 120) | public BezierRadarHeader setEnableHorizontalDrag(boolean enable) {
    method setPrimaryColors (line 131) | @Override@Deprecated
    method getView (line 141) | @NonNull
    method getSpinnerStyle (line 146) | @Override
    method onInitialized (line 151) | @Override
    method isSupportHorizontalDrag (line 155) | @Override
    method onHorizontalDrag (line 160) | @Override
    method onPullingDown (line 166) | @Override
    method onReleasing (line 173) | @Override
    method onStartAnimator (line 178) | @Override
    method onFinish (line 224) | @Override
    method onStateChanged (line 234) | @Override

FILE: refresh-layout/src/main/java/com/scwang/smartrefresh/layout/header/ClassicsHeader.java
  class ClassicsHeader (line 51) | @SuppressWarnings("unused")
    method ClassicsHeader (line 82) | public ClassicsHeader(Context context) {
    method ClassicsHeader (line 87) | public ClassicsHeader(Context context, AttributeSet attrs) {
    method ClassicsHeader (line 92) | public ClassicsHeader(Context context, AttributeSet attrs, int defStyl...
    method ClassicsHeader (line 97) | @RequiresApi(Build.VERSION_CODES.LOLLIPOP)
    method initView (line 103) | private void initView(Context context, AttributeSet attrs) {
    method onMeasure (line 246) | @Override
    method onInitialized (line 259) | @Override
    method isSupportHorizontalDrag (line 265) | @Override
    method onHorizontalDrag (line 270) | @Override
    method onPullingDown (line 274) | @Override
    method onReleasing (line 278) | @Override
    method onStartAnimator (line 283) | @Override
    method onFinish (line 297) | @Override
    method setPrimaryColors (line 319) | @Override@Deprecated
    method getView (line 333) | @NonNull
    method getSpinnerStyle (line 338) | @Override
    method onStateChanged (line 343) | @Override
    method setProgressBitmap (line 399) | public ClassicsHeader setProgressBitmap(Bitmap bitmap) {
    method setProgressDrawable (line 404) | public ClassicsHeader setProgressDrawable(Drawable drawable) {
    method setProgressResource (line 409) | public ClassicsHeader setProgressResource(@DrawableRes int resId) {
    method setArrowBitmap (line 414) | public ClassicsHeader setArrowBitmap(Bitmap bitmap) {
    method setArrowDrawable (line 419) | public ClassicsHeader setArrowDrawable(Drawable drawable) {
    method setArrowResource (line 424) | public ClassicsHeader setArrowResource(@DrawableRes int resId) {
    method setLastUpdateTime (line 430) | public ClassicsHeader setLastUpdateTime(Date time) {
    method setTimeFormat (line 439) | public ClassicsHeader setTimeFormat(DateFormat format) {
    method setSpinnerStyle (line 445) | public ClassicsHeader setSpinnerStyle(SpinnerStyle style) {
    method setPrimaryColor (line 450) | public ClassicsHeader setPrimaryColor(int primaryColor) {
    method setAccentColor (line 458) | public ClassicsHeader setAccentColor(int accentColor) {
    method setFinishDuration (line 470) | public ClassicsHeader setFinishDuration(int delay) {
    method setEnableLastTime (line 475) | public ClassicsHeader setEnableLastTime(boolean enable) {
    method setTextSizeTitle (line 484) | public ClassicsHeader setTextSizeTitle(float size) {
    method setTextSizeTitle (line 492) | public ClassicsHeader setTextSizeTitle(int unit, float size) {
    method setTextSizeTime (line 500) | public ClassicsHeader setTextSizeTime(float size) {
    method setTextSizeTime (line 508) | public ClassicsHeader setTextSizeTime(int unit, float size) {
    method setTextTimeMarginTop (line 516) | public ClassicsHeader setTextTimeMarginTop(float dp) {
    method setTextTimeMarginTopPx (line 520) | public ClassicsHeader setTextTimeMarginTopPx(int px) {
    method setDrawableMarginRight (line 527) | public ClassicsHeader setDrawableMarginRight(float dp) {
    method setDrawableMarginRightPx (line 531) | public ClassicsHeader setDrawableMarginRightPx(int px) {
    method setDrawableSize (line 540) | public ClassicsHeader setDrawableSize(float dp) {
    method setDrawableSizePx (line 544) | public ClassicsHeader setDrawableSizePx(int px) {
    method setDrawableArrowSize (line 554) | public ClassicsHeader setDrawableArrowSize(float dp) {
    method setDrawableArrowSizePx (line 558) | public ClassicsHeader setDrawableArrowSizePx(int px) {
    method setDrawableProgressSize (line 566) | public ClassicsHeader setDrawableProgressSize(float dp) {
    method setDrawableProgressSizePx (line 570) | public ClassicsHeader setDrawableProgressSizePx(int px) {
    method getArrowView (line 578) | public ImageView getArrowView() {
    method getProgressView (line 582) | public ImageView getProgressView() {
    method getTitleText (line 586) | public TextView getTitleText() {
    method getLastUpdateText (line 590) | public TextView getLastUpdateText() {

FILE: refresh-layout/src/main/java/com/scwang/smartrefresh/layout/header/FalsifyHeader.java
  class FalsifyHeader (line 35) | public class FalsifyHeader extends View implements RefreshHeader {
    method FalsifyHeader (line 40) | public FalsifyHeader(Context context) {
    method FalsifyHeader (line 44) | public FalsifyHeader(Context context, AttributeSet attrs) {
    method FalsifyHeader (line 48) | public FalsifyHeader(Context context, AttributeSet attrs, int defStyle...
    method FalsifyHeader (line 52) | @RequiresApi(Build.VERSION_CODES.LOLLIPOP)
    method onMeasure (line 57) | @Override
    method onDraw (line 63) | @Override@SuppressLint("DrawAllocation")
    method onInitialized (line 90) | @Override
    method isSupportHorizontalDrag (line 95) | @Override
    method onHorizontalDrag (line 100) | @Override
    method onPullingDown (line 104) | @Override
    method onReleasing (line 109) | @Override
    method onStartAnimator (line 114) | @Override
    method onStateChanged (line 121) | @Override
    method onFinish (line 126) | @Override
    method setPrimaryColors (line 131) | @Override@Deprecated
    method getView (line 136) | @NonNull
    method getSpinnerStyle (line 142) | @Override

FILE: refresh-layout/src/main/java/com/scwang/smartrefresh/layout/header/bezierradar/RippleView.java
  class RippleView (line 15) | public class RippleView extends View {
    method RippleView (line 21) | public RippleView(Context context) {
    method onMeasure (line 29) | @Override
    method setFrontColor (line 35) | public void setFrontColor(int color) {
    method startReveal (line 39) | public void startReveal() {
    method onDraw (line 60) | @Override

FILE: refresh-layout/src/main/java/com/scwang/smartrefresh/layout/header/bezierradar/RoundDotView.java
  class RoundDotView (line 15) | public class RoundDotView extends View {
    method RoundDotView (line 22) | public RoundDotView(Context context) {
    method onMeasure (line 30) | @Override
    method setDotColor (line 36) | public void setDotColor(int color) {
    method onDraw (line 40) | @Override
    method setFraction (line 57) | public void setFraction(float fraction) {

FILE: refresh-layout/src/main/java/com/scwang/smartrefresh/layout/header/bezierradar/RoundProgressView.java
  class RoundProgressView (line 19) | public class RoundProgressView extends View {
    method RoundProgressView (line 30) | public RoundProgressView(Context context) {
    method initView (line 35) | private void initView() {
    method onAttachedToWindow (line 55) | @Override
    method onDetachedFromWindow (line 67) | @Override
    method onMeasure (line 73) | @Override
    method setBackColor (line 79) | public void setBackColor(int backColor) {
    method setFrontColor (line 83) | public void setFrontColor(int color) {
    method onDraw (line 87) | @Override
    method startAnim (line 115) | public void startAnim(){
    method stopAnim (line 119) | public void stopAnim(){

FILE: refresh-layout/src/main/java/com/scwang/smartrefresh/layout/header/bezierradar/WaveView.java
  class WaveView (line 14) | public class WaveView extends View {
    method WaveView (line 22) | public WaveView(Context context) {
    method WaveView (line 26) | public WaveView(Context context, AttributeSet attrs) {
    method WaveView (line 30) | public WaveView(Context context, AttributeSet attrs, int defStyleAttr) {
    method initView (line 35) | private void initView() {
    method onMeasure (line 42) | @Override
    method setWaveColor (line 48) | public void setWaveColor(int color) {
    method getHeadHeight (line 52) | public int getHeadHeight() {
    method setHeadHeight (line 56) | public void setHeadHeight(int headHeight) {
    method getWaveHeight (line 60) | public int getWaveHeight() {
    method setWaveHeight (line 64) | public void setWaveHeight(int waveHeight) {
    method onDraw (line 68) | @Override
    method setWaveOffsetX (line 81) | public void setWaveOffsetX(int offset) {

FILE: refresh-layout/src/main/java/com/scwang/smartrefresh/layout/impl/RefreshContentWrapper.java
  class RefreshContentWrapper (line 55) | @SuppressWarnings("WeakerAccess")
    method RefreshContentWrapper (line 72) | public RefreshContentWrapper(View view) {
    method RefreshContentWrapper (line 77) | public RefreshContentWrapper(Context context) {
    method isTagedContent (line 82) | public static boolean isTagedContent(View view) {
    method findScrollableView (line 87) | protected void findScrollableView(View content, RefreshKernel kernel) {
    method wrapperCoordinatorLayout (line 111) | protected void wrapperCoordinatorLayout(CoordinatorLayout layout, fina...
    method wrapperViewPager (line 126) | protected void wrapperViewPager(final ViewPager viewPager) {
    method wrapperViewPager (line 130) | protected void wrapperViewPager(final ViewPager viewPager, final Pager...
    method findScrollableViewInternal (line 158) | protected View findScrollableViewInternal(View content, boolean selfab...
    method getView (line 185) | @NonNull
    method moveSpinner (line 190) | @Override
    method canRefresh (line 201) | @Override
    method canLoadmore (line 206) | @Override
    method measure (line 211) | @Override
    method getLayoutParams (line 216) | @Override
    method getMeasuredWidth (line 221) | @Override
    method getMeasuredHeight (line 226) | @Override
    method layout (line 231) | @Override
    method getScrollableView (line 236) | @Override
    method onActionDown (line 241) | @Override
    method onActionUpOrCancel (line 248) | @Override
    method setupComponent (line 254) | @Override
    method onInitialHeaderAndFooter (line 314) | @Override
    method setScrollBoundaryDecider (line 320) | @Override
    method setEnableLoadmoreWhenContentNotFull (line 329) | @Override
    method onLoadingFinish (line 334) | @Override
    class Api23ViewScrollComponent (line 372) | @RequiresApi(api = Build.VERSION_CODES.M)
      method Api23ViewScrollComponent (line 381) | Api23ViewScrollComponent(RefreshKernel kernel) {
      method onScrollChange (line 385) | @Override
      method attach (line 417) | void attach(View view) {
    class NestedScrollViewScrollComponent (line 438) | protected class NestedScrollViewScrollComponent implements NestedScrol...
      method NestedScrollViewScrollComponent (line 446) | NestedScrollViewScrollComponent(RefreshKernel kernel) {
      method onScrollChange (line 450) | @Override
      method attach (line 480) | void attach(NestedScrollView scrollView) {
    class AbsListViewScrollComponent (line 502) | protected class AbsListViewScrollComponent implements AbsListView.OnSc...
      method AbsListViewScrollComponent (line 512) | AbsListViewScrollComponent(RefreshKernel kernel) {
      method onScrollStateChanged (line 516) | @Override
      method onScroll (line 523) | @Override
      method attach (line 563) | void attach(AbsListView listView) {
      method getScrollY (line 584) | protected int getScrollY(AbsListView view, int firstVisibleItem) {
      class ItemRecod (line 614) | class ItemRecod {
    class RecyclerViewScrollComponent (line 620) | protected class RecyclerViewScrollComponent extends RecyclerView.OnScr...
      method RecyclerViewScrollComponent (line 622) | RecyclerViewScrollComponent(RefreshKernel kernel) {
      method onScrollStateChanged (line 625) | @Override
      method onScrolled (line 628) | @Override
      method attach (line 648) | void attach(RecyclerView recyclerView) {
    method measureViewHeight (line 655) | protected static int measureViewHeight(View view) {
    class PagerPrimaryAdapter (line 672) | protected class PagerPrimaryAdapter extends PagerAdapterWrapper {
      method PagerPrimaryAdapter (line 675) | PagerPrimaryAdapter(PagerAdapter wrapped) {
      method wrapper (line 679) | void wrapper(PagerAdapter adapter) {
      method attachViewPager (line 683) | @Override
      method setViewPagerObserver (line 689) | @Override
      method setPrimaryItem (line 697) | @Override

FILE: refresh-layout/src/main/java/com/scwang/smartrefresh/layout/impl/RefreshFooterWrapper.java
  class RefreshFooterWrapper (line 19) | public class RefreshFooterWrapper implements RefreshFooter {
    method RefreshFooterWrapper (line 26) | public RefreshFooterWrapper(View wrapper) {
    method isTagedFooter (line 31) | public static boolean isTagedFooter(View view) {
    method getView (line 35) | @NonNull
    method onFinish (line 40) | @Override
    method setPrimaryColors (line 45) | @Override@Deprecated
    method getSpinnerStyle (line 50) | @Override
    method onInitialized (line 70) | @Override
    method isSupportHorizontalDrag (line 78) | @Override
    method onHorizontalDrag (line 83) | @Override
    method onPullingUp (line 87) | @Override
    method onPullReleasing (line 92) | @Override
    method onStartAnimator (line 97) | @Override
    method onStateChanged (line 102) | @Override
    method setLoadmoreFinished (line 107) | @Override

FILE: refresh-layout/src/main/java/com/scwang/smartrefresh/layout/impl/RefreshHeaderWrapper.java
  class RefreshHeaderWrapper (line 19) | public class RefreshHeaderWrapper implements RefreshHeader {
    method RefreshHeaderWrapper (line 26) | public RefreshHeaderWrapper(View wrapper) {
    method isTagedHeader (line 31) | public static boolean isTagedHeader(View view) {
    method getView (line 34) | @NonNull
    method onFinish (line 39) | @Override
    method setPrimaryColors (line 44) | @Override@Deprecated
    method getSpinnerStyle (line 49) | @NonNull
    method onInitialized (line 70) | @Override
    method isSupportHorizontalDrag (line 78) | @Override
    method onHorizontalDrag (line 83) | @Override
    method onPullingDown (line 87) | @Override
    method onReleasing (line 92) | @Override
    method onStartAnimator (line 97) | @Override
    method onStateChanged (line 102) | @Override

FILE: refresh-layout/src/main/java/com/scwang/smartrefresh/layout/impl/ScrollBoundaryDeciderAdapter.java
  class ScrollBoundaryDeciderAdapter (line 14) | @SuppressWarnings("WeakerAccess")
    method setScrollBoundaryDecider (line 22) | void setScrollBoundaryDecider(ScrollBoundaryDecider boundary){
    method setActionEvent (line 26) | void setActionEvent(MotionEvent event) {
    method canRefresh (line 32) | @Override
    method canLoadmore (line 40) | @Override
    method setEnableLoadmoreWhenContentNotFull (line 51) | public void setEnableLoadmoreWhenContentNotFull(boolean enable) {

FILE: refresh-layout/src/main/java/com/scwang/smartrefresh/layout/internal/ProgressDrawable.java
  class ProgressDrawable (line 20) | public class ProgressDrawable extends Drawable implements Animatable {
    method ProgressDrawable (line 27) | public ProgressDrawable() {
    method setColor (line 34) | public void setColor(int color) {
    method draw (line 39) | @Override
    method setAlpha (line 59) | @Override
    method setColorFilter (line 64) | @Override
    method getOpacity (line 69) | @Override
    method setupAnimators (line 75) | private void setupAnimators() {
    method start (line 91) | @Override
    method stop (line 98) | @Override
    method isRunning (line 105) | @Override
    method width (line 110) | public int width() {
    method height (line 114) | public int height() {

FILE: refresh-layout/src/main/java/com/scwang/smartrefresh/layout/internal/pathview/PathParser.java
  class PathParser (line 27) | class PathParser {
    method copyOfRange (line 46) | static float[] copyOfRange(float[] original, int start, int end) {
    method transformScale (line 61) | public static List<Path> transformScale(float ratioWidth, float ratioH...
    method transformScaleNodes (line 84) | private static void transformScaleNodes(float ratioWidth, float ratioH...
    method transformScaleCommand (line 90) | private static void transformScaleCommand(float ratioWidth, float rati...
    method createPathFromPathData (line 176) | public static Path createPathFromPathData(String pathData) {
    method createNodesFromPathData (line 194) | public static PathDataNode[] createNodesFromPathData(String pathData) {
    method deepCopyNodes (line 223) | public static PathDataNode[] deepCopyNodes(PathDataNode[] source) {
    method canMorph (line 239) | public static boolean canMorph(PathDataNode[] nodesFrom, PathDataNode[...
    method updateNodes (line 264) | public static void updateNodes(PathDataNode[] target, PathDataNode[] s...
    method nextStart (line 273) | private static int nextStart(String s, int end) {
    method addNode (line 291) | private static void addNode(ArrayList<PathDataNode> list, char cmd, fl...
    class ExtractFloatResult (line 295) | private static class ExtractFloatResult {
      method ExtractFloatResult (line 301) | ExtractFloatResult() {
    method getFloats (line 312) | private static float[] getFloats(String s) {
    method extract (line 358) | private static void extract(String s, int start, ExtractFloatResult re...
    class PathDataNode (line 409) | public static class PathDataNode {
      method PathDataNode (line 414) | PathDataNode(char type, float[] params) {
      method PathDataNode (line 419) | PathDataNode(PathDataNode n) {
      method nodesToPath (line 430) | public static void nodesToPath(PathDataNode[] node, Path path) {
      method interpolatePathDataNode (line 448) | public void interpolatePathDataNode(PathDataNode nodeFrom,
      method addCommand (line 456) | private static void addCommand(Path path, float[] current,
      method drawArc (line 706) | private static void drawArc(Path p,
      method arcToBezier (line 797) | private static void arcToBezier(Path p,

FILE: refresh-layout/src/main/java/com/scwang/smartrefresh/layout/internal/pathview/PathsDrawable.java
  class PathsDrawable (line 23) | public class PathsDrawable extends Drawable {
    method PathsDrawable (line 38) | public PathsDrawable() {
    method onMeasure (line 45) | protected void onMeasure() {
    method setBounds (line 71) | @Override
    method setBounds (line 86) | public void setBounds(@NonNull Rect bounds) {
    method parserPaths (line 90) | public void parserPaths(String... paths) {
    method parserColors (line 101) | public void parserColors(int... colors) {
    method draw (line 109) | @Override
    method setAlpha (line 137) | @Override
    method setColorFilter (line 142) | @Override
    method getOpacity (line 147) | @Override
    method width (line 154) | public int width() {
    method height (line 158) | public int height() {
    method setGeometricWidth (line 162) | public void setGeometricWidth(int width) {
    method setGeometricHeight (line 174) | public void setGeometricHeight(int height) {
    method getPaint (line 185) | public Paint getPaint() {
    method updateCachedBitmap (line 196) | public void updateCachedBitmap(int width, int height) {
    method drawCachedBitmap (line 202) | private void drawCachedBitmap(Canvas canvas) {
    method createCachedBitmapIfNeeded (line 214) | public void createCachedBitmapIfNeeded(int width, int height) {
    method canReuseBitmap (line 223) | public boolean canReuseBitmap(int width, int height) {
    method canReuseCache (line 230) | public boolean canReuseCache() {
    method updateCacheStates (line 237) | public void updateCacheStates() {

FILE: refresh-layout/src/main/java/com/scwang/smartrefresh/layout/internal/pathview/PathsView.java
  class PathsView (line 13) | public class PathsView extends View {
    method PathsView (line 17) | public PathsView(Context context) {
    method PathsView (line 22) | public PathsView(Context context, AttributeSet attrs) {
    method PathsView (line 27) | public PathsView(Context context, AttributeSet attrs, int defStyleAttr) {
    method initView (line 32) | private void initView(Context context, AttributeSet attrs, int defStyl...
    method onFinishInflate (line 36) | @Override
    method onMeasure (line 44) | @Override
    method onLayout (line 50) | @Override
    method onDraw (line 58) | @Override
    method parserPaths (line 64) | public void parserPaths(String... paths) {
    method parserColors (line 68) | public void parserColors(int... colors) {

FILE: refresh-layout/src/main/java/com/scwang/smartrefresh/layout/listener/AnimationEndListener.java
  type AnimationEndListener (line 8) | public interface AnimationEndListener {
    method onAnimationEnd (line 9) | void onAnimationEnd();

FILE: refresh-layout/src/main/java/com/scwang/smartrefresh/layout/listener/OnLoadmoreListener.java
  type OnLoadmoreListener (line 10) | public interface OnLoadmoreListener {
    method onLoadmore (line 11) | void onLoadmore(RefreshLayout refreshlayout);

FILE: refresh-layout/src/main/java/com/scwang/smartrefresh/layout/listener/OnMultiPurposeListener.java
  type OnMultiPurposeListener (line 11) | public interface OnMultiPurposeListener extends OnRefreshLoadmoreListene...
    method onHeaderPulling (line 12) | void onHeaderPulling(RefreshHeader header, float percent, int offset, ...
    method onHeaderReleasing (line 13) | void onHeaderReleasing(RefreshHeader header, float percent, int offset...
    method onHeaderStartAnimator (line 14) | void onHeaderStartAnimator(RefreshHeader header, int headerHeight, int...
    method onHeaderFinish (line 15) | void onHeaderFinish(RefreshHeader header, boolean success);
    method onFooterPulling (line 17) | void onFooterPulling(RefreshFooter footer, float percent, int offset, ...
    method onFooterReleasing (line 18) | void onFooterReleasing(RefreshFooter footer, float percent, int offset...
    method onFooterStartAnimator (line 19) | void onFooterStartAnimator(RefreshFooter footer, int footerHeight, int...
    method onFooterFinish (line 20) | void onFooterFinish(RefreshFooter footer, boolean success);

FILE: refresh-layout/src/main/java/com/scwang/smartrefresh/layout/listener/OnRefreshListener.java
  type OnRefreshListener (line 10) | public interface OnRefreshListener {
    method onRefresh (line 11) | void onRefresh(RefreshLayout refreshlayout);

FILE: refresh-layout/src/main/java/com/scwang/smartrefresh/layout/listener/OnRefreshLoadmoreListener.java
  type OnRefreshLoadmoreListener (line 8) | public interface OnRefreshLoadmoreListener extends OnRefreshListener, On...

FILE: refresh-layout/src/main/java/com/scwang/smartrefresh/layout/listener/OnStateChangedListener.java
  type OnStateChangedListener (line 12) | public interface OnStateChangedListener {
    method onStateChanged (line 19) | void onStateChanged(RefreshLayout refreshLayout, RefreshState oldState...

FILE: refresh-layout/src/main/java/com/scwang/smartrefresh/layout/listener/SimpleMultiPurposeListener.java
  class SimpleMultiPurposeListener (line 13) | public class SimpleMultiPurposeListener implements OnMultiPurposeListener {
    method onHeaderPulling (line 15) | @Override
    method onHeaderReleasing (line 20) | @Override
    method onHeaderStartAnimator (line 25) | @Override
    method onHeaderFinish (line 30) | @Override
    method onFooterPulling (line 35) | @Override
    method onFooterReleasing (line 40) | @Override
    method onFooterStartAnimator (line 45) | @Override
    method onFooterFinish (line 50) | @Override
    method onRefresh (line 55) | @Override
    method onLoadmore (line 60) | @Override
    method onStateChanged (line 65) | @Override

FILE: refresh-layout/src/main/java/com/scwang/smartrefresh/layout/util/ColorUtils.java
  class ColorUtils (line 29) | public final class ColorUtils {
    method ColorUtils (line 42) | private ColorUtils() {}
    method compositeColors (line 47) | public static int compositeColors(@ColorInt int foreground, @ColorInt ...
    method compositeAlpha (line 62) | private static int compositeAlpha(int foregroundAlpha, int backgroundA...
    method compositeComponent (line 66) | private static int compositeComponent(int fgC, int fgA, int bgC, int b...
    method calculateLuminance (line 75) | @FloatRange(from = 0.0, to = 1.0)
    method calculateContrast (line 90) | public static double calculateContrast(@ColorInt int foreground, @Colo...
    method calculateMinimumAlpha (line 117) | public static int calculateMinimumAlpha(@ColorInt int foreground, @Col...
    method RGBToHSL (line 170) | public static void RGBToHSL(@IntRange(from = 0x0, to = 0xFF) int r,
    method colorToHSL (line 220) | public static void colorToHSL(@ColorInt int color, @NonNull float[] ou...
    method HSLToColor (line 236) | @ColorInt
    method setAlphaComponent (line 294) | @ColorInt
    method colorToLAB (line 309) | public static void colorToLAB(@ColorInt int color, @NonNull double[] o...
    method RGBToLAB (line 327) | public static void RGBToLAB(@IntRange(from = 0x0, to = 0xFF) int r,
    method colorToXYZ (line 352) | public static void colorToXYZ(@ColorInt int color, @NonNull double[] o...
    method RGBToXYZ (line 373) | public static void RGBToXYZ(@IntRange(from = 0x0, to = 0xFF) int r,
    method XYZToLAB (line 409) | public static void XYZToLAB(@FloatRange(from = 0f, to = XYZ_WHITE_REFE...
    method LABToXYZ (line 441) | public static void LABToXYZ(@FloatRange(from = 0f, to = 100) final dou...
    method XYZToColor (line 472) | @ColorInt
    method LABToColor (line 498) | @ColorInt
    method distanceEuclidean (line 510) | public static double distanceEuclidean(@NonNull double[] labX, @NonNul...
    method constrain (line 516) | private static float constrain(float amount, float low, float high) {
    method constrain (line 520) | private static int constrain(int amount, int low, int high) {
    method pivotXyzComponent (line 524) | private static double pivotXyzComponent(double component) {
    method blendARGB (line 540) | @ColorInt
    method blendHSL (line 563) | public static void blendHSL(@NonNull float[] hsl1, @NonNull float[] hsl2,
    method blendLAB (line 586) | public static void blendLAB(@NonNull double[] lab1, @NonNull double[] ...
    method circularInterpolate (line 597) | @VisibleForTesting
    method getTempDouble3Array (line 609) | private static double[] getTempDouble3Array() {

FILE: refresh-layout/src/main/java/com/scwang/smartrefresh/layout/util/DelayedRunable.java
  class DelayedRunable (line 3) | public class DelayedRunable implements Runnable {
    method DelayedRunable (line 6) | public DelayedRunable(Runnable runnable) {
    method DelayedRunable (line 9) | public DelayedRunable(Runnable runnable, long delayMillis) {
    method run (line 13) | @Override

FILE: refresh-layout/src/main/java/com/scwang/smartrefresh/layout/util/DensityUtil.java
  class DensityUtil (line 5) | public class DensityUtil {
    method DensityUtil (line 9) | public DensityUtil() {
    method dp2px (line 16) | public static int dp2px(float dpValue) {
    method px2dp (line 23) | public static float px2dp(float pxValue) {
    method dip2px (line 30) | public int dip2px(float dpValue) {
    method px2dip (line 37) | public float px2dip(float pxValue) {

FILE: refresh-layout/src/main/java/com/scwang/smartrefresh/layout/util/ScrollBoundaryUtil.java
  class ScrollBoundaryUtil (line 14) | @SuppressWarnings("WeakerAccess")
    method canRefresh (line 18) | public static boolean canRefresh(View targetView, MotionEvent event) {
    method canLoadmore (line 38) | public static boolean canLoadmore(View targetView, MotionEvent event) {
    method canScrollDown (line 58) | public static boolean canScrollDown(View targetView, MotionEvent event) {
    method canScrollUp (line 78) | public static boolean canScrollUp(View targetView) {
    method canScrollDown (line 93) | public static boolean canScrollDown(View targetView) {
    method pointInView (line 112) | public static boolean pointInView(View view, float localX, float local...
    method isTransformedTouchPointInView (line 121) | public static boolean isTransformedTouchPointInView(ViewGroup group, V...
    method transformPointToViewLocal (line 133) | public static void transformPointToViewLocal(ViewGroup group, View chi...

FILE: refresh-layout/src/main/java/com/scwang/smartrefresh/layout/util/ViscousFluidInterpolator.java
  class ViscousFluidInterpolator (line 5) | public class ViscousFluidInterpolator implements Interpolator {
    method viscousFluid (line 20) | private static float viscousFluid(float x) {
    method getInterpolation (line 32) | @Override

FILE: refresh-layout/src/test/java/com/scwang/smartrefresh/layout/ExampleUnitTest.java
  class ExampleUnitTest (line 12) | public class ExampleUnitTest {
    method addition_isCorrect (line 13) | @Test
Condensed preview — 233 files, each showing path, character count, and a content snippet. Download the .json file or copy for the full structured content (1,349K chars).
[
  {
    "path": ".gitignore",
    "chars": 74,
    "preview": "*.iml\n.gradle\ngradle\n/local.properties\n/.idea\n/build\n/gradlew\n/gradlew.bat"
  },
  {
    "path": "LICENSE",
    "chars": 11357,
    "preview": "                                 Apache License\n                           Version 2.0, January 2004\n                   "
  },
  {
    "path": "README.md",
    "chars": 10734,
    "preview": "# Android智能下拉刷新框架-SmartRefreshLayout\n\n[![License](https://img.shields.io/badge/License%20-Apache%202-337ab7.svg)](https:"
  },
  {
    "path": "README_EN.md",
    "chars": 11488,
    "preview": "# Android Smart Refresh Layout Framework\n\n[![License](https://img.shields.io/badge/License%20-Apache%202-337ab7.svg)](ht"
  },
  {
    "path": "app/.gitignore",
    "chars": 7,
    "preview": "/build\n"
  },
  {
    "path": "app/build.gradle",
    "chars": 2563,
    "preview": "apply plugin: 'com.android.application'\n\nandroid {\n    compileSdkVersion 26\n    buildToolsVersion \"26.0.1\"\n    defaultCo"
  },
  {
    "path": "app/proguard-rules.pro",
    "chars": 1192,
    "preview": "# Add project specific ProGuard rules here.\n# By default, the flags in this file are appended to flags specified\n# in E:"
  },
  {
    "path": "app/src/androidTest/java/com/scwang/refreshlayout/ExampleInstrumentedTest.java",
    "chars": 752,
    "preview": "package com.scwang.refreshlayout;\n\nimport android.content.Context;\nimport android.support.test.InstrumentationRegistry;\n"
  },
  {
    "path": "app/src/main/AndroidManifest.xml",
    "chars": 7406,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<manifest xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    package="
  },
  {
    "path": "app/src/main/java/com/scwang/refreshlayout/App.java",
    "chars": 1552,
    "preview": "package com.scwang.refreshlayout;\n\nimport android.app.Application;\nimport android.content.Context;\nimport android.suppor"
  },
  {
    "path": "app/src/main/java/com/scwang/refreshlayout/activity/ExperimentActivity.java",
    "chars": 1811,
    "preview": "package com.scwang.refreshlayout.activity;\n\nimport android.os.Bundle;\nimport android.support.v7.app.AppCompatActivity;\ni"
  },
  {
    "path": "app/src/main/java/com/scwang/refreshlayout/activity/IndexMainActivity.java",
    "chars": 3141,
    "preview": "package com.scwang.refreshlayout.activity;\n\nimport android.os.Bundle;\nimport android.support.annotation.IdRes;\nimport an"
  },
  {
    "path": "app/src/main/java/com/scwang/refreshlayout/activity/practice/BannerPracticeActivity.java",
    "chars": 10395,
    "preview": "package com.scwang.refreshlayout.activity.practice;\n\nimport android.content.Context;\nimport android.os.Bundle;\nimport an"
  },
  {
    "path": "app/src/main/java/com/scwang/refreshlayout/activity/practice/FeedlistPracticeActivity.java",
    "chars": 1076,
    "preview": "package com.scwang.refreshlayout.activity.practice;\n\nimport android.os.Bundle;\nimport android.support.v7.app.AppCompatAc"
  },
  {
    "path": "app/src/main/java/com/scwang/refreshlayout/activity/practice/ProfilePracticeActivity.java",
    "chars": 1075,
    "preview": "package com.scwang.refreshlayout.activity.practice;\n\nimport android.os.Bundle;\nimport android.support.v7.app.AppCompatAc"
  },
  {
    "path": "app/src/main/java/com/scwang/refreshlayout/activity/practice/QQBrowserPracticeActivity.java",
    "chars": 1538,
    "preview": "package com.scwang.refreshlayout.activity.practice;\n\nimport android.annotation.SuppressLint;\nimport android.os.Bundle;\ni"
  },
  {
    "path": "app/src/main/java/com/scwang/refreshlayout/activity/practice/RepastPracticeActivity.java",
    "chars": 5850,
    "preview": "package com.scwang.refreshlayout.activity.practice;\n\nimport android.os.Bundle;\nimport android.support.v7.app.AppCompatAc"
  },
  {
    "path": "app/src/main/java/com/scwang/refreshlayout/activity/practice/WebviewPracticeActivity.java",
    "chars": 2616,
    "preview": "package com.scwang.refreshlayout.activity.practice;\n\nimport android.annotation.SuppressLint;\nimport android.os.Bundle;\ni"
  },
  {
    "path": "app/src/main/java/com/scwang/refreshlayout/activity/practice/WeiboPracticeActivity.java",
    "chars": 3895,
    "preview": "package com.scwang.refreshlayout.activity.practice;\n\nimport android.os.Bundle;\nimport android.support.v4.content.Context"
  },
  {
    "path": "app/src/main/java/com/scwang/refreshlayout/activity/style/BezierStyleActivity.java",
    "chars": 4765,
    "preview": "package com.scwang.refreshlayout.activity.style;\n\nimport android.os.Build;\nimport android.os.Bundle;\nimport android.supp"
  },
  {
    "path": "app/src/main/java/com/scwang/refreshlayout/activity/style/CircleStyleActivity.java",
    "chars": 4306,
    "preview": "package com.scwang.refreshlayout.activity.style;\n\nimport android.os.Build;\nimport android.os.Bundle;\nimport android.supp"
  },
  {
    "path": "app/src/main/java/com/scwang/refreshlayout/activity/style/ClassicsStyleActivity.java",
    "chars": 7531,
    "preview": "package com.scwang.refreshlayout.activity.style;\n\nimport android.graphics.drawable.Drawable;\nimport android.graphics.dra"
  },
  {
    "path": "app/src/main/java/com/scwang/refreshlayout/activity/style/DeliveryStyleActivity.java",
    "chars": 5403,
    "preview": "package com.scwang.refreshlayout.activity.style;\n\nimport android.os.Build;\nimport android.os.Bundle;\nimport android.supp"
  },
  {
    "path": "app/src/main/java/com/scwang/refreshlayout/activity/style/DropboxStyleActivity.java",
    "chars": 4223,
    "preview": "package com.scwang.refreshlayout.activity.style;\n\nimport android.os.Build;\nimport android.os.Bundle;\nimport android.supp"
  },
  {
    "path": "app/src/main/java/com/scwang/refreshlayout/activity/style/FlyRefreshStyleActivity.java",
    "chars": 15268,
    "preview": "package com.scwang.refreshlayout.activity.style;\n\nimport android.animation.Animator;\nimport android.animation.AnimatorLi"
  },
  {
    "path": "app/src/main/java/com/scwang/refreshlayout/activity/style/FunGameBattleCityStyleActivity.java",
    "chars": 4189,
    "preview": "package com.scwang.refreshlayout.activity.style;\n\nimport android.os.Build;\nimport android.os.Bundle;\nimport android.supp"
  },
  {
    "path": "app/src/main/java/com/scwang/refreshlayout/activity/style/FunGameHitBlockStyleActivity.java",
    "chars": 4186,
    "preview": "package com.scwang.refreshlayout.activity.style;\n\nimport android.os.Build;\nimport android.os.Bundle;\nimport android.supp"
  },
  {
    "path": "app/src/main/java/com/scwang/refreshlayout/activity/style/MaterialStyleActivity.java",
    "chars": 4759,
    "preview": "package com.scwang.refreshlayout.activity.style;\n\nimport android.os.Build;\nimport android.os.Bundle;\nimport android.supp"
  },
  {
    "path": "app/src/main/java/com/scwang/refreshlayout/activity/style/PhoenixStyleActivity.java",
    "chars": 6415,
    "preview": "package com.scwang.refreshlayout.activity.style;\n\nimport android.content.res.ColorStateList;\nimport android.os.Build;\nim"
  },
  {
    "path": "app/src/main/java/com/scwang/refreshlayout/activity/style/StoreHouseStyleActivity.java",
    "chars": 4003,
    "preview": "package com.scwang.refreshlayout.activity.style;\n\nimport android.os.Build;\nimport android.os.Bundle;\nimport android.supp"
  },
  {
    "path": "app/src/main/java/com/scwang/refreshlayout/activity/style/TaurusStyleActivity.java",
    "chars": 6413,
    "preview": "package com.scwang.refreshlayout.activity.style;\n\nimport android.content.res.ColorStateList;\nimport android.os.Build;\nim"
  },
  {
    "path": "app/src/main/java/com/scwang/refreshlayout/activity/style/WaterDropStyleActivity.java",
    "chars": 4544,
    "preview": "package com.scwang.refreshlayout.activity.style;\n\nimport android.os.Build;\nimport android.os.Bundle;\nimport android.supp"
  },
  {
    "path": "app/src/main/java/com/scwang/refreshlayout/activity/style/WaveSwipStyleActivity.java",
    "chars": 4310,
    "preview": "package com.scwang.refreshlayout.activity.style;\n\nimport android.os.Build;\nimport android.os.Bundle;\nimport android.supp"
  },
  {
    "path": "app/src/main/java/com/scwang/refreshlayout/activity/using/AssignCodeUsingActivity.java",
    "chars": 2390,
    "preview": "package com.scwang.refreshlayout.activity.using;\n\nimport android.os.Bundle;\nimport android.support.v7.app.AppCompatActiv"
  },
  {
    "path": "app/src/main/java/com/scwang/refreshlayout/activity/using/AssignDefaultUsingActivity.java",
    "chars": 3831,
    "preview": "package com.scwang.refreshlayout.activity.using;\n\nimport android.content.Context;\nimport android.os.Bundle;\nimport andro"
  },
  {
    "path": "app/src/main/java/com/scwang/refreshlayout/activity/using/AssignXmlUsingActivity.java",
    "chars": 1895,
    "preview": "package com.scwang.refreshlayout.activity.using;\n\nimport android.os.Bundle;\nimport android.support.v7.app.AppCompatActiv"
  },
  {
    "path": "app/src/main/java/com/scwang/refreshlayout/activity/using/BasicUsingActivity.java",
    "chars": 3597,
    "preview": "package com.scwang.refreshlayout.activity.using;\n\nimport android.os.Bundle;\nimport android.support.v7.app.AppCompatActiv"
  },
  {
    "path": "app/src/main/java/com/scwang/refreshlayout/activity/using/CustomUsingActivity.java",
    "chars": 7502,
    "preview": "package com.scwang.refreshlayout.activity.using;\n\nimport android.content.Context;\nimport android.os.Bundle;\nimport andro"
  },
  {
    "path": "app/src/main/java/com/scwang/refreshlayout/activity/using/ListenerUsingActivity.java",
    "chars": 7198,
    "preview": "package com.scwang.refreshlayout.activity.using;\n\nimport android.os.Bundle;\nimport android.support.v7.app.AppCompatActiv"
  },
  {
    "path": "app/src/main/java/com/scwang/refreshlayout/activity/using/NestLayoutUsingActivity.java",
    "chars": 3127,
    "preview": "package com.scwang.refreshlayout.activity.using;\n\nimport android.os.Bundle;\nimport android.support.v7.app.AppCompatActiv"
  },
  {
    "path": "app/src/main/java/com/scwang/refreshlayout/activity/using/OverScrollUsingActivity.java",
    "chars": 1931,
    "preview": "package com.scwang.refreshlayout.activity.using;\n\nimport android.os.Bundle;\nimport android.support.v7.app.AppCompatActiv"
  },
  {
    "path": "app/src/main/java/com/scwang/refreshlayout/activity/using/SnapHelperUsingActivity.java",
    "chars": 2409,
    "preview": "package com.scwang.refreshlayout.activity.using;\n\nimport android.os.Bundle;\nimport android.support.v7.app.AppCompatActiv"
  },
  {
    "path": "app/src/main/java/com/scwang/refreshlayout/adapter/BaseRecyclerAdapter.java",
    "chars": 4850,
    "preview": "package com.scwang.refreshlayout.adapter;\n\nimport android.database.DataSetObservable;\nimport android.database.DataSetObs"
  },
  {
    "path": "app/src/main/java/com/scwang/refreshlayout/adapter/SmartViewHolder.java",
    "chars": 2753,
    "preview": "package com.scwang.refreshlayout.adapter;\n\nimport android.content.res.Resources;\nimport android.support.annotation.Strin"
  },
  {
    "path": "app/src/main/java/com/scwang/refreshlayout/fragment/RefreshPractiveFragment.java",
    "chars": 3828,
    "preview": "package com.scwang.refreshlayout.fragment;\n\n\nimport android.content.Intent;\nimport android.os.Bundle;\nimport android.sup"
  },
  {
    "path": "app/src/main/java/com/scwang/refreshlayout/fragment/RefreshStylesFragment.java",
    "chars": 5552,
    "preview": "package com.scwang.refreshlayout.fragment;\n\n\nimport android.content.Intent;\nimport android.os.Bundle;\nimport android.sup"
  },
  {
    "path": "app/src/main/java/com/scwang/refreshlayout/fragment/RefreshUsingFragment.java",
    "chars": 3936,
    "preview": "package com.scwang.refreshlayout.fragment;\n\n\nimport android.content.Intent;\nimport android.os.Bundle;\nimport android.sup"
  },
  {
    "path": "app/src/main/java/com/scwang/refreshlayout/util/DynamicTimeFormat.java",
    "chars": 4216,
    "preview": "package com.scwang.refreshlayout.util;\n\nimport android.support.annotation.NonNull;\n\nimport java.text.FieldPosition;\nimpo"
  },
  {
    "path": "app/src/main/java/com/scwang/refreshlayout/util/StatusBarUtil.java",
    "chars": 12133,
    "preview": "package com.scwang.refreshlayout.util;\n\nimport android.support.annotation.RequiresApi;\nimport android.app.Activity;\nimpo"
  },
  {
    "path": "app/src/main/java/com/scwang/refreshlayout/widget/RefreshLayout.java",
    "chars": 10029,
    "preview": "package com.scwang.refreshlayout.widget;\n\nimport android.annotation.TargetApi;\nimport android.content.Context;\nimport an"
  },
  {
    "path": "app/src/main/res/drawable/bc_background_panel.xml",
    "chars": 316,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<layer-list xmlns:android=\"http://schemas.android.com/apk/res/android\">\n    <item"
  },
  {
    "path": "app/src/main/res/drawable/ic_arrow_back_dark_24dp.xml",
    "chars": 347,
    "preview": "<vector xmlns:android=\"http://schemas.android.com/apk/res/android\"\n        android:width=\"24dp\"\n        android:height=\""
  },
  {
    "path": "app/src/main/res/drawable/ic_arrow_back_gray_24dp.xml",
    "chars": 347,
    "preview": "<vector xmlns:android=\"http://schemas.android.com/apk/res/android\"\n        android:width=\"24dp\"\n        android:height=\""
  },
  {
    "path": "app/src/main/res/drawable/ic_arrow_back_white_24dp.xml",
    "chars": 347,
    "preview": "<vector xmlns:android=\"http://schemas.android.com/apk/res/android\"\n        android:width=\"24dp\"\n        android:height=\""
  },
  {
    "path": "app/src/main/res/drawable/ic_chevron_right.xml",
    "chars": 335,
    "preview": "<vector xmlns:android=\"http://schemas.android.com/apk/res/android\"\n        android:width=\"28dp\"\n        android:height=\""
  },
  {
    "path": "app/src/main/res/drawable/ic_chevron_right_gray.xml",
    "chars": 335,
    "preview": "<vector xmlns:android=\"http://schemas.android.com/apk/res/android\"\n        android:width=\"28dp\"\n        android:height=\""
  },
  {
    "path": "app/src/main/res/drawable/ic_feed_list_favorite.xml",
    "chars": 464,
    "preview": "<vector xmlns:android=\"http://schemas.android.com/apk/res/android\"\n        android:width=\"24dp\"\n        android:height=\""
  },
  {
    "path": "app/src/main/res/drawable/ic_feed_list_mail.xml",
    "chars": 420,
    "preview": "<vector xmlns:android=\"http://schemas.android.com/apk/res/android\"\n        android:width=\"24dp\"\n        android:height=\""
  },
  {
    "path": "app/src/main/res/drawable/ic_feed_list_photo.xml",
    "chars": 400,
    "preview": "<vector xmlns:android=\"http://schemas.android.com/apk/res/android\"\n        android:width=\"24dp\"\n        android:height=\""
  },
  {
    "path": "app/src/main/res/drawable/ic_fly_refresh_folder.xml",
    "chars": 395,
    "preview": "<vector xmlns:android=\"http://schemas.android.com/apk/res/android\"\n        android:width=\"24dp\"\n        android:height=\""
  },
  {
    "path": "app/src/main/res/drawable/ic_fly_refresh_info.xml",
    "chars": 372,
    "preview": "<vector xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    android:width=\"24dp\"\n    android:height=\"24dp\"\n  "
  },
  {
    "path": "app/src/main/res/drawable/ic_fly_refresh_poll.xml",
    "chars": 438,
    "preview": "<vector xmlns:android=\"http://schemas.android.com/apk/res/android\"\n        android:width=\"24dp\"\n        android:height=\""
  },
  {
    "path": "app/src/main/res/drawable/ic_fly_refresh_send.xml",
    "chars": 323,
    "preview": "<vector xmlns:android=\"http://schemas.android.com/apk/res/android\"\n        android:width=\"24dp\"\n        android:height=\""
  },
  {
    "path": "app/src/main/res/drawable/ic_fly_refresh_smartphone.xml",
    "chars": 406,
    "preview": "<vector xmlns:android=\"http://schemas.android.com/apk/res/android\"\n        android:width=\"24dp\"\n        android:height=\""
  },
  {
    "path": "app/src/main/res/drawable/ic_index_dashboard.xml",
    "chars": 347,
    "preview": "<vector xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    android:width=\"24dp\"\n    android:height=\"24dp\"\n  "
  },
  {
    "path": "app/src/main/res/drawable/ic_index_home.xml",
    "chars": 310,
    "preview": "<vector xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    android:width=\"24dp\"\n    android:height=\"24dp\"\n  "
  },
  {
    "path": "app/src/main/res/drawable/ic_index_notifications.xml",
    "chars": 465,
    "preview": "<vector xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    android:width=\"24dp\"\n    android:height=\"24dp\"\n  "
  },
  {
    "path": "app/src/main/res/drawable/ic_list_divider.xml",
    "chars": 664,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<layer-list xmlns:android=\"http://schemas.android.com/apk/res/android\">\n    <item"
  },
  {
    "path": "app/src/main/res/drawable/ic_progress_hojder.xml",
    "chars": 184,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<layer-list xmlns:android=\"http://schemas.android.com/apk/res/android\">\n    <item"
  },
  {
    "path": "app/src/main/res/layout/activity_experiment.xml",
    "chars": 1482,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<android.support.constraint.ConstraintLayout xmlns:android=\"http://schemas.androi"
  },
  {
    "path": "app/src/main/res/layout/activity_fly_refresh.xml",
    "chars": 3930,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<android.support.design.widget.CoordinatorLayout xmlns:android=\"http://schemas.an"
  },
  {
    "path": "app/src/main/res/layout/activity_fly_refresh_item.xml",
    "chars": 2116,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<LinearLayout xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    xmln"
  },
  {
    "path": "app/src/main/res/layout/activity_index_main.xml",
    "chars": 1144,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<LinearLayout xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    xmln"
  },
  {
    "path": "app/src/main/res/layout/activity_practice_banner.xml",
    "chars": 2157,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<FrameLayout xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    xmlns"
  },
  {
    "path": "app/src/main/res/layout/activity_practice_feedlist.xml",
    "chars": 60645,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<LinearLayout xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    xmln"
  },
  {
    "path": "app/src/main/res/layout/activity_practice_profile.xml",
    "chars": 8908,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<FrameLayout xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    xmlns"
  },
  {
    "path": "app/src/main/res/layout/activity_practice_qqbrowser.xml",
    "chars": 1829,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<LinearLayout xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    xmln"
  },
  {
    "path": "app/src/main/res/layout/activity_practice_repast.xml",
    "chars": 2515,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<FrameLayout xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    xmlns"
  },
  {
    "path": "app/src/main/res/layout/activity_practice_webview.xml",
    "chars": 2677,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<FrameLayout xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    xmlns"
  },
  {
    "path": "app/src/main/res/layout/activity_practice_weibo.xml",
    "chars": 65793,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<FrameLayout xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    xmlns"
  },
  {
    "path": "app/src/main/res/layout/activity_style_bezier.xml",
    "chars": 1538,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<LinearLayout xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    xmln"
  },
  {
    "path": "app/src/main/res/layout/activity_style_circle.xml",
    "chars": 1489,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<LinearLayout xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    xmln"
  },
  {
    "path": "app/src/main/res/layout/activity_style_classics.xml",
    "chars": 2024,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<LinearLayout xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    xmln"
  },
  {
    "path": "app/src/main/res/layout/activity_style_delivery.xml",
    "chars": 1616,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<LinearLayout xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    xmln"
  },
  {
    "path": "app/src/main/res/layout/activity_style_dropbox.xml",
    "chars": 1560,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<LinearLayout xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    xmln"
  },
  {
    "path": "app/src/main/res/layout/activity_style_fungame_battlecity.xml",
    "chars": 1459,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<LinearLayout xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    xmln"
  },
  {
    "path": "app/src/main/res/layout/activity_style_fungame_hitblock.xml",
    "chars": 1455,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<LinearLayout xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    xmln"
  },
  {
    "path": "app/src/main/res/layout/activity_style_material.xml",
    "chars": 1498,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<LinearLayout xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    xmln"
  },
  {
    "path": "app/src/main/res/layout/activity_style_phoenix.xml",
    "chars": 2877,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<android.support.design.widget.CoordinatorLayout xmlns:android=\"http://schemas.an"
  },
  {
    "path": "app/src/main/res/layout/activity_style_storehouse.xml",
    "chars": 1569,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<LinearLayout xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    xmln"
  },
  {
    "path": "app/src/main/res/layout/activity_style_taurus.xml",
    "chars": 2874,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<android.support.design.widget.CoordinatorLayout xmlns:android=\"http://schemas.an"
  },
  {
    "path": "app/src/main/res/layout/activity_style_water_drop.xml",
    "chars": 1558,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<LinearLayout xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    xmln"
  },
  {
    "path": "app/src/main/res/layout/activity_style_wave_swip.xml",
    "chars": 1500,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<LinearLayout xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    xmln"
  },
  {
    "path": "app/src/main/res/layout/activity_using_assign_code.xml",
    "chars": 1194,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<LinearLayout xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    xmln"
  },
  {
    "path": "app/src/main/res/layout/activity_using_assign_default.xml",
    "chars": 1198,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<LinearLayout xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    xmln"
  },
  {
    "path": "app/src/main/res/layout/activity_using_assign_xml.xml",
    "chars": 2002,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<LinearLayout xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    xmln"
  },
  {
    "path": "app/src/main/res/layout/activity_using_basic.xml",
    "chars": 1378,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<LinearLayout xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    xmln"
  },
  {
    "path": "app/src/main/res/layout/activity_using_custom.xml",
    "chars": 1167,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<LinearLayout xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    xmln"
  },
  {
    "path": "app/src/main/res/layout/activity_using_listener.xml",
    "chars": 1806,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<LinearLayout xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    xmln"
  },
  {
    "path": "app/src/main/res/layout/activity_using_overscroll.xml",
    "chars": 1955,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<LinearLayout xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    xmln"
  },
  {
    "path": "app/src/main/res/layout/activity_using_region.xml",
    "chars": 2646,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<LinearLayout xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    xmln"
  },
  {
    "path": "app/src/main/res/layout/activity_using_snaphelper.xml",
    "chars": 1154,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<LinearLayout xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    xmln"
  },
  {
    "path": "app/src/main/res/layout/fragment_refresh_practive.xml",
    "chars": 1102,
    "preview": "<LinearLayout xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    xmlns:app=\"http://schemas.android.com/apk/r"
  },
  {
    "path": "app/src/main/res/layout/fragment_refresh_styles.xml",
    "chars": 1101,
    "preview": "<LinearLayout xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    xmlns:app=\"http://schemas.android.com/apk/r"
  },
  {
    "path": "app/src/main/res/layout/fragment_refresh_using.xml",
    "chars": 1099,
    "preview": "<LinearLayout xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    xmlns:app=\"http://schemas.android.com/apk/r"
  },
  {
    "path": "app/src/main/res/layout/listitem_movie_banner.xml",
    "chars": 965,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<FrameLayout xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    xmlns"
  },
  {
    "path": "app/src/main/res/layout/listitem_movie_header.xml",
    "chars": 322,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<com.youth.banner.Banner xmlns:android=\"http://schemas.android.com/apk/res/androi"
  },
  {
    "path": "app/src/main/res/layout/listitem_movie_item.xml",
    "chars": 1863,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<LinearLayout xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    xmln"
  },
  {
    "path": "app/src/main/res/layout/listitem_practive_repast.xml",
    "chars": 1739,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<LinearLayout xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    xmln"
  },
  {
    "path": "app/src/main/res/layout/listitem_style_delivery.xml",
    "chars": 1852,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<android.support.v7.widget.CardView xmlns:android=\"http://schemas.android.com/apk"
  },
  {
    "path": "app/src/main/res/layout/listitem_using_snaphelper.xml",
    "chars": 800,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<android.support.v7.widget.CardView\n    xmlns:android=\"http://schemas.android.com"
  },
  {
    "path": "app/src/main/res/menu/navigation.xml",
    "chars": 577,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<menu xmlns:android=\"http://schemas.android.com/apk/res/android\">\n\n    <item\n    "
  },
  {
    "path": "app/src/main/res/values/colors.xml",
    "chars": 571,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n    <color name=\"colorPrimary\">#33aaff</color>\n    <color name=\"color"
  },
  {
    "path": "app/src/main/res/values/dimens.xml",
    "chars": 886,
    "preview": "<resources>\n    <dimen name=\"app_bar_height\">240dp</dimen><!--180dp-->\n    <dimen name=\"fab_margin\">16dp</dimen>\n    <di"
  },
  {
    "path": "app/src/main/res/values/strings.xml",
    "chars": 5167,
    "preview": "<resources>\n    <string name=\"app_name\">SmartRefreshLayout</string>\n    <string name=\"action_settings\">Settings</string>"
  },
  {
    "path": "app/src/main/res/values/styles.xml",
    "chars": 9215,
    "preview": "<resources>\n\n    <!-- Base application theme. -->\n    <style name=\"AppThemeBase\" parent=\"Theme.AppCompat.Light.NoActionB"
  },
  {
    "path": "app/src/main/res/values-v19/styles.xml",
    "chars": 251,
    "preview": "<resources>\n\n    <!-- Base application theme. -->\n    <style name=\"AppTheme\" parent=\"AppThemeBase\">\n    </style>\n\n    <s"
  },
  {
    "path": "app/src/main/res/values-v21/styles.xml",
    "chars": 751,
    "preview": "<resources>\n\n    <!-- Base application theme. -->\n    <style name=\"AppTheme\" parent=\"AppThemeBase\">\n    </style>\n\n    <s"
  },
  {
    "path": "app/src/test/java/com/scwang/refreshlayout/ExampleUnitTest.java",
    "chars": 402,
    "preview": "package com.scwang.refreshlayout;\n\nimport org.junit.Test;\n\nimport static org.junit.Assert.*;\n\n/**\n * Example local unit "
  },
  {
    "path": "art/UMLRefreshLayout.classdiagram",
    "chars": 11850,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<logicalClassDesignerModel xmlns:dm0=\"http://schemas.microsoft.com/VisualStudio/"
  },
  {
    "path": "art/md_custom.md",
    "chars": 10113,
    "preview": "# 自定义Header和Footer\n\n## 把情感化设计的APP卡通形象植入APP界面当中\n稍微大一点的互联网公司都有属于自己的企业或app的卡通吉祥物。这些品牌元素都是我们\napp设计师发挥创意设计的好素材。 也是需要我们巧妙植入到我们"
  },
  {
    "path": "art/md_donationlist.md",
    "chars": 2006,
    "preview": "# 捐赠列表\n\n非常感谢列表中的朋友,你们的肯定和支持是我前进的最大动力!\n\n|昵称|日期|方式|留言|友情连接|\n|:---:|:---:|:---:|:---:|:---:|\n|[pay_join]|2017-9-6|腾讯|👍||\n|["
  },
  {
    "path": "art/md_multitouch.md",
    "chars": 219,
    "preview": "# 多点触摸\n\n多点触摸就是多个手指一起滑动,直接看效果吧~\n\n![](https://github.com/scwang90/SmartRefreshLayout/raw/master/art/gif_demo_multitouch_1."
  },
  {
    "path": "art/md_property.md",
    "chars": 14526,
    "preview": "# 代码示例\n\n## SmartRefreshLayout\njava代码设置\n~~~java\npublic class RefreshActivity extends Activity {\n    @Override\n    protect"
  },
  {
    "path": "art/md_smart.md",
    "chars": 3702,
    "preview": "# 智能之处\n\n智能是什么玩意?有什么用?\n\n>智能主要体现 SmartRefreshLayout 对未知布局的自动识别上,这样可以让我们更高效的实现我们所需的功能,也可以实现一些非寻常的功能。\n>下面通过**自定义Header** 和 *"
  },
  {
    "path": "art/md_update.md",
    "chars": 2632,
    "preview": "# 更新日志\n\n## V 1.0.4 (开发中)  \n>添加:类似淘宝二楼的二级下拉刷新  \n>添加:srlEnableBounceShowHeaderAndFooter 属性和对应的set方法,控制越界回弹时候是否显示Header和Foo"
  },
  {
    "path": "bintrayUpload.bat",
    "chars": 87,
    "preview": "gradlew clean build bintrayUpload -PbintrayUser=scwang90 -PbintrayKey=%1 -PdryRun=false"
  },
  {
    "path": "build.gradle",
    "chars": 732,
    "preview": "// Top-level build file where you can add configuration options common to all sub-projects/modules.\n\nbuildscript {\n    r"
  },
  {
    "path": "refresh-footer/.gitignore",
    "chars": 7,
    "preview": "/build\n"
  },
  {
    "path": "refresh-footer/build.gradle",
    "chars": 1298,
    "preview": "apply plugin: 'com.android.library'\n//apply plugin: 'com.novoda.bintray-release'\n//apply plugin: 'me.tatarka.retrolambda"
  },
  {
    "path": "refresh-footer/proguard-rules.pro",
    "chars": 924,
    "preview": "# Add project specific ProGuard rules here.\n# By default, the flags in this file are appended to flags specified\n# in E:"
  },
  {
    "path": "refresh-footer/src/androidTest/java/com/scwang/smartrefresh/footer/ExampleInstrumentedTest.java",
    "chars": 767,
    "preview": "package com.scwang.smartrefreshfooter;\n\nimport android.content.Context;\nimport android.support.test.InstrumentationRegis"
  },
  {
    "path": "refresh-footer/src/main/AndroidManifest.xml",
    "chars": 250,
    "preview": "<manifest xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    package=\"com.scwang.smartrefresh.footer\">\n\n    "
  },
  {
    "path": "refresh-footer/src/main/res/values/attrs.xml",
    "chars": 176,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n    <!--<attr name=\"srlPrimaryColor\" format=\"color\"/>-->\n    <!--<att"
  },
  {
    "path": "refresh-footer/src/main/res/values/strings.xml",
    "chars": 81,
    "preview": "<resources>\n    <string name=\"app_name\">SmartRefreshFooter</string>\n</resources>\n"
  },
  {
    "path": "refresh-footer/src/test/java/com/scwang/smartrefresh/footer/ExampleUnitTest.java",
    "chars": 407,
    "preview": "package com.scwang.smartrefreshfooter;\n\nimport org.junit.Test;\n\nimport static org.junit.Assert.*;\n\n/**\n * Example local "
  },
  {
    "path": "refresh-header/.gitignore",
    "chars": 7,
    "preview": "/build\n"
  },
  {
    "path": "refresh-header/build.gradle",
    "chars": 1240,
    "preview": "apply plugin: 'com.android.library'\napply plugin: 'com.novoda.bintray-release'\n\nandroid {\n    compileSdkVersion 26\n    b"
  },
  {
    "path": "refresh-header/proguard-rules.pro",
    "chars": 924,
    "preview": "# Add project specific ProGuard rules here.\n# By default, the flags in this file are appended to flags specified\n# in E:"
  },
  {
    "path": "refresh-header/src/androidTest/java/com/scwang/smartrefresh/header/ExampleInstrumentedTest.java",
    "chars": 769,
    "preview": "package com.scwang.smartrefresh.header;\n\nimport android.content.Context;\nimport android.support.test.InstrumentationRegi"
  },
  {
    "path": "refresh-header/src/main/AndroidManifest.xml",
    "chars": 250,
    "preview": "<manifest xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    package=\"com.scwang.smartrefresh.header\">\n\n    "
  },
  {
    "path": "refresh-header/src/main/java/com/scwang/smartrefresh/header/CircleHeader.java",
    "chars": 14092,
    "preview": "package com.scwang.smartrefresh.header;\n\nimport android.animation.ValueAnimator;\nimport android.content.Context;\nimport "
  },
  {
    "path": "refresh-header/src/main/java/com/scwang/smartrefresh/header/DeliveryHeader.java",
    "chars": 12077,
    "preview": "package com.scwang.smartrefresh.header;\n\nimport android.support.annotation.RequiresApi;\nimport android.content.Context;\n"
  },
  {
    "path": "refresh-header/src/main/java/com/scwang/smartrefresh/header/DropboxHeader.java",
    "chars": 19519,
    "preview": "package com.scwang.smartrefresh.header;\n\nimport android.animation.Animator;\nimport android.animation.AnimatorListenerAda"
  },
  {
    "path": "refresh-header/src/main/java/com/scwang/smartrefresh/header/FlyRefreshHeader.java",
    "chars": 10156,
    "preview": "package com.scwang.smartrefresh.header;\n\nimport android.animation.Animator;\nimport android.animation.AnimatorListenerAda"
  },
  {
    "path": "refresh-header/src/main/java/com/scwang/smartrefresh/header/FunGameBattleCityHeader.java",
    "chars": 10832,
    "preview": "package com.scwang.smartrefresh.header;\n\nimport android.support.annotation.RequiresApi;\nimport android.content.Context;\n"
  },
  {
    "path": "refresh-header/src/main/java/com/scwang/smartrefresh/header/FunGameHitBlockHeader.java",
    "chars": 8230,
    "preview": "package com.scwang.smartrefresh.header;\n\n\nimport android.content.Context;\nimport android.content.res.TypedArray;\nimport "
  },
  {
    "path": "refresh-header/src/main/java/com/scwang/smartrefresh/header/MaterialHeader.java",
    "chars": 11559,
    "preview": "package com.scwang.smartrefresh.header;\n\nimport android.support.annotation.RequiresApi;\nimport android.content.Context;\n"
  },
  {
    "path": "refresh-header/src/main/java/com/scwang/smartrefresh/header/PhoenixHeader.java",
    "chars": 101734,
    "preview": "package com.scwang.smartrefresh.header;\n\nimport android.support.annotation.RequiresApi;\nimport android.content.Context;\n"
  },
  {
    "path": "refresh-header/src/main/java/com/scwang/smartrefresh/header/StoreHouseHeader.java",
    "chars": 15264,
    "preview": "package com.scwang.smartrefresh.header;\n\nimport android.support.annotation.RequiresApi;\nimport android.content.Context;\n"
  },
  {
    "path": "refresh-header/src/main/java/com/scwang/smartrefresh/header/TaurusHeader.java",
    "chars": 27563,
    "preview": "package com.scwang.smartrefresh.header;\n\nimport android.support.annotation.RequiresApi;\nimport android.content.Context;\n"
  },
  {
    "path": "refresh-header/src/main/java/com/scwang/smartrefresh/header/WaterDropHeader.java",
    "chars": 10103,
    "preview": "/**\n * @file XListViewHeader.java\n * @create Apr 18, 2012 5:22:27 PM\n * @author Maxwin\n * @description XListView's heade"
  },
  {
    "path": "refresh-header/src/main/java/com/scwang/smartrefresh/header/WaveSwipeHeader.java",
    "chars": 13425,
    "preview": "package com.scwang.smartrefresh.header;\n\nimport android.animation.ValueAnimator;\nimport android.content.Context;\nimport "
  },
  {
    "path": "refresh-header/src/main/java/com/scwang/smartrefresh/header/flyrefresh/FlyView.java",
    "chars": 1315,
    "preview": "package com.scwang.smartrefresh.header.flyrefresh;\n\nimport android.content.Context;\nimport android.util.AttributeSet;\n\ni"
  },
  {
    "path": "refresh-header/src/main/java/com/scwang/smartrefresh/header/flyrefresh/MountanScenceView.java",
    "chars": 11736,
    "preview": "package com.scwang.smartrefresh.header.flyrefresh;\n\nimport android.content.Context;\nimport android.content.res.TypedArra"
  },
  {
    "path": "refresh-header/src/main/java/com/scwang/smartrefresh/header/flyrefresh/PathInterpolatorCompat.java",
    "chars": 3693,
    "preview": "/*\n * Copyright (C) 2015 The Android Open Source Project\n *\n * Licensed under the Apache License, Version 2.0 (the \"Lice"
  },
  {
    "path": "refresh-header/src/main/java/com/scwang/smartrefresh/header/flyrefresh/PathInterpolatorCompatApi21.java",
    "chars": 1549,
    "preview": "/*\n * Copyright (C) 2015 The Android Open Source Project\n *\n * Licensed under the Apache License, Version 2.0 (the \"Lice"
  },
  {
    "path": "refresh-header/src/main/java/com/scwang/smartrefresh/header/flyrefresh/PathInterpolatorCompatBase.java",
    "chars": 1527,
    "preview": "/*\n * Copyright (C) 2015 The Android Open Source Project\n *\n * Licensed under the Apache License, Version 2.0 (the \"Lice"
  },
  {
    "path": "refresh-header/src/main/java/com/scwang/smartrefresh/header/flyrefresh/PathInterpolatorGingerbread.java",
    "chars": 3685,
    "preview": "/*\n * Copyright (C) 2015 The Android Open Source Project\n *\n * Licensed under the Apache License, Version 2.0 (the \"Lice"
  },
  {
    "path": "refresh-header/src/main/java/com/scwang/smartrefresh/header/fungame/FunGameBase.java",
    "chars": 8321,
    "preview": "package com.scwang.smartrefresh.header.fungame;\n\nimport android.content.Context;\nimport android.os.Build;\nimport android"
  },
  {
    "path": "refresh-header/src/main/java/com/scwang/smartrefresh/header/fungame/FunGameHeader.java",
    "chars": 8664,
    "preview": "package com.scwang.smartrefresh.header.fungame;\n\nimport android.animation.Animator;\nimport android.animation.AnimatorLis"
  },
  {
    "path": "refresh-header/src/main/java/com/scwang/smartrefresh/header/fungame/FunGameView.java",
    "chars": 9711,
    "preview": "package com.scwang.smartrefresh.header.fungame;\n\nimport android.content.Context;\nimport android.content.res.TypedArray;\n"
  },
  {
    "path": "refresh-header/src/main/java/com/scwang/smartrefresh/header/internal/FastOutSlowInInterpolator.java",
    "chars": 3407,
    "preview": "/*\n * Copyright (C) 2015 The Android Open Source Project\n *\n * Licensed under the Apache License, Version 2.0 (the \"Lice"
  },
  {
    "path": "refresh-header/src/main/java/com/scwang/smartrefresh/header/internal/LookupTableInterpolator.java",
    "chars": 1925,
    "preview": "/*\n * Copyright (C) 2015 The Android Open Source Project\n *\n * Licensed under the Apache License, Version 2.0 (the \"Lice"
  },
  {
    "path": "refresh-header/src/main/java/com/scwang/smartrefresh/header/internal/MaterialProgressDrawable.java",
    "chars": 27438,
    "preview": "/*\n * Copyright (C) 2014 The Android Open Source Project\n *\n * Licensed under the Apache License, Version 2.0 (the \"Lice"
  },
  {
    "path": "refresh-header/src/main/java/com/scwang/smartrefresh/header/material/CircleImageView.java",
    "chars": 5933,
    "preview": "/*\n * Copyright (C) 2014 The Android Open Source Project\n *\n * Licensed under the Apache License, Version 2.0 (the \"Lice"
  },
  {
    "path": "refresh-header/src/main/java/com/scwang/smartrefresh/header/storehouse/StoreHouseBarItem.java",
    "chars": 2118,
    "preview": "package com.scwang.smartrefresh.header.storehouse;\n\nimport android.graphics.Canvas;\nimport android.graphics.Paint;\nimpor"
  },
  {
    "path": "refresh-header/src/main/java/com/scwang/smartrefresh/header/storehouse/StoreHousePath.java",
    "chars": 10638,
    "preview": "package com.scwang.smartrefresh.header.storehouse;\n\nimport android.util.SparseArray;\n\nimport java.util.ArrayList;\n\n/**\n "
  },
  {
    "path": "refresh-header/src/main/java/com/scwang/smartrefresh/header/waterdrop/Circle.java",
    "chars": 235,
    "preview": "package com.scwang.smartrefresh.header.waterdrop;\n\n/**\n * Created by xiayong on 2015/6/25.\n * 实心圆\n */\npublic class Circl"
  },
  {
    "path": "refresh-header/src/main/java/com/scwang/smartrefresh/header/waterdrop/WaterDropView.java",
    "chars": 8658,
    "preview": "package com.scwang.smartrefresh.header.waterdrop;\n\nimport android.animation.Animator;\nimport android.animation.ValueAnim"
  },
  {
    "path": "refresh-header/src/main/java/com/scwang/smartrefresh/header/waveswipe/AnimationImageView.java",
    "chars": 1955,
    "preview": "/*\n * Copyright (C) 2015 RECRUIT LIFESTYLE CO., LTD.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\""
  },
  {
    "path": "refresh-header/src/main/java/com/scwang/smartrefresh/header/waveswipe/DisplayUtil.java",
    "chars": 1236,
    "preview": "/*\n * Copyright (C) RECRUIT LIFESTYLE CO., LTD.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n *"
  },
  {
    "path": "refresh-header/src/main/java/com/scwang/smartrefresh/header/waveswipe/DropBounceInterpolator.java",
    "chars": 1795,
    "preview": "package com.scwang.smartrefresh.header.waveswipe;\n/*\n * Copyright (C) 2015 RECRUIT LIFESTYLE CO., LTD.\n *\n * Licensed un"
  },
  {
    "path": "refresh-header/src/main/java/com/scwang/smartrefresh/header/waveswipe/WaveView.java",
    "chars": 25956,
    "preview": "/*\n * Copyright (C) 2015 RECRUIT LIFESTYLE CO., LTD.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\""
  },
  {
    "path": "refresh-header/src/main/res/values/attrs.xml",
    "chars": 2976,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n    <!--<attr name=\"srlPrimaryColor\" format=\"color\"/>-->\n    <!--<att"
  },
  {
    "path": "refresh-header/src/main/res/values/strings.xml",
    "chars": 81,
    "preview": "<resources>\n    <string name=\"app_name\">SmartRefreshHeader</string>\n</resources>\n"
  },
  {
    "path": "refresh-header/src/test/java/com/scwang/smartrefresh/header/ExampleUnitTest.java",
    "chars": 408,
    "preview": "package com.scwang.smartrefresh.header;\n\nimport org.junit.Test;\n\nimport static org.junit.Assert.*;\n\n/**\n * Example local"
  },
  {
    "path": "refresh-layout/.gitignore",
    "chars": 7,
    "preview": "/build\n"
  },
  {
    "path": "refresh-layout/build.gradle",
    "chars": 1169,
    "preview": "apply plugin: 'com.android.library'\napply plugin: 'com.novoda.bintray-release'\n\nandroid {\n    compileSdkVersion 26\n    b"
  },
  {
    "path": "refresh-layout/proguard-rules.pro",
    "chars": 924,
    "preview": "# Add project specific ProGuard rules here.\n# By default, the flags in this file are appended to flags specified\n# in E:"
  },
  {
    "path": "refresh-layout/src/androidTest/java/com/scwang/smartrefresh/layout/ExampleInstrumentedTest.java",
    "chars": 769,
    "preview": "package com.scwang.smartrefresh.layout;\n\nimport android.content.Context;\nimport android.support.test.InstrumentationRegi"
  },
  {
    "path": "refresh-layout/src/main/AndroidManifest.xml",
    "chars": 250,
    "preview": "<manifest xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    package=\"com.scwang.smartrefresh.layout\">\n\n    "
  },
  {
    "path": "refresh-layout/src/main/java/android/support/v4/view/PagerAdapterWrapper.java",
    "chars": 3835,
    "preview": "package android.support.v4.view;\n\nimport android.database.DataSetObserver;\nimport android.os.Parcelable;\nimport android."
  },
  {
    "path": "refresh-layout/src/main/java/com/scwang/smartrefresh/layout/SmartRefreshLayout.java",
    "chars": 102473,
    "preview": "package com.scwang.smartrefresh.layout;\n\nimport android.animation.Animator;\nimport android.animation.Animator.AnimatorLi"
  },
  {
    "path": "refresh-layout/src/main/java/com/scwang/smartrefresh/layout/api/DefaultRefreshFooterCreater.java",
    "chars": 320,
    "preview": "package com.scwang.smartrefresh.layout.api;\n\nimport android.content.Context;\nimport android.support.annotation.NonNull;\n"
  },
  {
    "path": "refresh-layout/src/main/java/com/scwang/smartrefresh/layout/api/DefaultRefreshHeaderCreater.java",
    "chars": 320,
    "preview": "package com.scwang.smartrefresh.layout.api;\n\nimport android.content.Context;\nimport android.support.annotation.NonNull;\n"
  },
  {
    "path": "refresh-layout/src/main/java/com/scwang/smartrefresh/layout/api/RefreshContent.java",
    "chars": 1115,
    "preview": "package com.scwang.smartrefresh.layout.api;\n\nimport android.animation.ValueAnimator.AnimatorUpdateListener;\nimport andro"
  },
  {
    "path": "refresh-layout/src/main/java/com/scwang/smartrefresh/layout/api/RefreshFooter.java",
    "chars": 1077,
    "preview": "package com.scwang.smartrefresh.layout.api;\n\n/**\n * 刷新底部\n * Created by SCWANG on 2017/5/26.\n */\n\npublic interface Refres"
  },
  {
    "path": "refresh-layout/src/main/java/com/scwang/smartrefresh/layout/api/RefreshHeader.java",
    "chars": 925,
    "preview": "package com.scwang.smartrefresh.layout.api;\n\n/**\n * 刷新头部\n * Created by SCWANG on 2017/5/26.\n */\n\npublic interface Refres"
  },
  {
    "path": "refresh-layout/src/main/java/com/scwang/smartrefresh/layout/api/RefreshInternal.java",
    "chars": 1835,
    "preview": "package com.scwang.smartrefresh.layout.api;\n\nimport android.support.annotation.NonNull;\nimport android.view.View;\n\nimpor"
  },
  {
    "path": "refresh-layout/src/main/java/com/scwang/smartrefresh/layout/api/RefreshKernel.java",
    "chars": 2812,
    "preview": "package com.scwang.smartrefresh.layout.api;\n\nimport android.support.annotation.NonNull;\n\n/**\n * 刷新布局核心功能接口\n * 为功能复杂的 Hea"
  },
  {
    "path": "refresh-layout/src/main/java/com/scwang/smartrefresh/layout/api/RefreshLayout.java",
    "chars": 5623,
    "preview": "package com.scwang.smartrefresh.layout.api;\n\nimport android.support.annotation.ColorRes;\nimport android.support.annotati"
  },
  {
    "path": "refresh-layout/src/main/java/com/scwang/smartrefresh/layout/api/ScrollBoundaryDecider.java",
    "chars": 443,
    "preview": "package com.scwang.smartrefresh.layout.api;\n\nimport android.view.View;\n\n/**\n * 滚动边界\n * Created by SCWANG on 2017/7/8.\n *"
  },
  {
    "path": "refresh-layout/src/main/java/com/scwang/smartrefresh/layout/constant/DimensionStatus.java",
    "chars": 1439,
    "preview": "package com.scwang.smartrefresh.layout.constant;\n\n/**\n * 尺寸值的定义状态,用于在值覆盖的时候决定优先级\n * 越往下优先级越高\n */\npublic enum DimensionSt"
  },
  {
    "path": "refresh-layout/src/main/java/com/scwang/smartrefresh/layout/constant/RefreshState.java",
    "chars": 1034,
    "preview": "package com.scwang.smartrefresh.layout.constant;\n\npublic enum RefreshState {\n    None,\n    PullDownToRefresh, PullToUpLo"
  },
  {
    "path": "refresh-layout/src/main/java/com/scwang/smartrefresh/layout/constant/SpinnerStyle.java",
    "chars": 428,
    "preview": "package com.scwang.smartrefresh.layout.constant;\n\n/**\n * 顶部和底部的组件在拖动时候的变换方式\n * Created by SCWANG on 2017/5/26.\n */\n\npubl"
  },
  {
    "path": "refresh-layout/src/main/java/com/scwang/smartrefresh/layout/footer/BallPulseFooter.java",
    "chars": 5635,
    "preview": "package com.scwang.smartrefresh.layout.footer;\n\nimport android.content.Context;\nimport android.content.res.TypedArray;\ni"
  },
  {
    "path": "refresh-layout/src/main/java/com/scwang/smartrefresh/layout/footer/ClassicsFooter.java",
    "chars": 18004,
    "preview": "package com.scwang.smartrefresh.layout.footer;\n\nimport android.content.Context;\nimport android.content.res.TypedArray;\ni"
  },
  {
    "path": "refresh-layout/src/main/java/com/scwang/smartrefresh/layout/footer/FalsifyFooter.java",
    "chars": 2978,
    "preview": "package com.scwang.smartrefresh.layout.footer;\n\nimport android.annotation.SuppressLint;\nimport android.content.Context;\n"
  },
  {
    "path": "refresh-layout/src/main/java/com/scwang/smartrefresh/layout/footer/ballpulse/BallPulseView.java",
    "chars": 5191,
    "preview": "package com.scwang.smartrefresh.layout.footer.ballpulse;\n\nimport android.animation.ValueAnimator;\nimport android.content"
  }
]

// ... and 33 more files (download for full content)

About this extraction

This page contains the full source code of the wolfking0608/SmartRefreshLayout GitHub repository, extracted and formatted as plain text for AI agents and large language models (LLMs). The extraction includes 233 files (11.3 MB), approximately 334.4k tokens, and a symbol index with 1644 extracted functions, classes, methods, constants, and types. Use this with OpenClaw, Claude, ChatGPT, Cursor, Windsurf, or any other AI tool that accepts text input. You can copy the full output to your clipboard or download it as a .txt file.

Extracted by GitExtract — free GitHub repo to text converter for AI. Built by Nikandr Surkov.

Copied to clipboard!