├── .gitignore
├── LICENSE
├── README.md
├── README_CN.md
├── apk
└── DemoSpring-1.7.0-release.apk
├── build.gradle
├── demo
├── .gitignore
├── build.gradle
├── liaoinstan.jks
├── proguard-rules.pro
└── src
│ └── main
│ ├── AndroidManifest.xml
│ ├── java
│ └── com
│ │ └── liaoinstan
│ │ └── demospring
│ │ ├── MainActivity.java
│ │ ├── demo1
│ │ └── Demo1Activity.java
│ │ ├── demo10
│ │ └── Demo10Activity.java
│ │ ├── demo11
│ │ └── Demo11Activity.java
│ │ ├── demo12
│ │ └── Demo12Activity.java
│ │ ├── demo13
│ │ └── Demo13Activity.java
│ │ ├── demo14
│ │ └── Demo14Activity.java
│ │ ├── demo2
│ │ └── Demo2Activity.java
│ │ ├── demo3
│ │ └── Demo3Activity.java
│ │ ├── demo4
│ │ └── Demo4Activity.java
│ │ ├── demo5
│ │ └── Demo5Activity.java
│ │ ├── demo6
│ │ ├── Demo6Activity.java
│ │ └── QQHeader.java
│ │ ├── demo7
│ │ └── Demo7Activity.java
│ │ ├── demo8
│ │ ├── Demo8Activity.java
│ │ └── MyItemTouchCallback.java
│ │ ├── demo9
│ │ ├── Demo9Activity.java
│ │ ├── Demo9FragmentNote.java
│ │ ├── Demo9FragmentRecyclerView.java
│ │ └── Demo9FragmentScrollView.java
│ │ ├── demox
│ │ └── DemoXActivity.java
│ │ ├── test
│ │ └── TestActivity.java
│ │ ├── utils
│ │ └── StatusBarUtil.java
│ │ └── warning
│ │ ├── WarningActivity.java
│ │ └── WarningHeader.java
│ └── res
│ ├── color
│ └── weixin_color_select.xml
│ ├── drawable-hdpi
│ ├── acfun_footer.png
│ ├── acfun_header.png
│ ├── ali.png
│ ├── bk_test.jpg
│ ├── me.png
│ ├── mt_loading01.png
│ ├── mt_loading02.png
│ ├── mt_pull.png
│ ├── mt_pull01.png
│ ├── mt_pull02.png
│ ├── mt_pull03.png
│ ├── mt_pull04.png
│ ├── mt_pull05.png
│ ├── mt_refreshing01.png
│ ├── mt_refreshing02.png
│ ├── mt_refreshing03.png
│ ├── mt_refreshing04.png
│ ├── mt_refreshing05.png
│ ├── mt_refreshing06.png
│ └── qqbk.png
│ ├── drawable-xxhdpi
│ ├── adver.jpg
│ ├── wx_program1.png
│ ├── wx_program2.png
│ ├── wx_program3.png
│ ├── wx_program4.png
│ └── wx_program5.png
│ ├── drawable
│ ├── ic_dashboard_black_24dp.xml
│ ├── ic_home_black_24dp.xml
│ ├── ic_notifications_black_24dp.xml
│ └── view_post_comment_bg.xml
│ ├── layout
│ ├── activity_demo1.xml
│ ├── activity_demo10.xml
│ ├── activity_demo11.xml
│ ├── activity_demo12.xml
│ ├── activity_demo13.xml
│ ├── activity_demo14.xml
│ ├── activity_demo2.xml
│ ├── activity_demo3.xml
│ ├── activity_demo4.xml
│ ├── activity_demo5.xml
│ ├── activity_demo6.xml
│ ├── activity_demo7.xml
│ ├── activity_demo8.xml
│ ├── activity_demo9.xml
│ ├── activity_demox.xml
│ ├── activity_main.xml
│ ├── activity_test.xml
│ ├── activity_warning.xml
│ ├── content_demo12.xml
│ ├── footer.xml
│ ├── fragment_demo9_note.xml
│ ├── fragment_demo9_recyclerview.xml
│ ├── fragment_demo9_scrollview.xml
│ ├── header.xml
│ ├── header_qq.xml
│ ├── header_warning.xml
│ ├── header_web.xml
│ ├── item.xml
│ └── lay_test.xml
│ ├── menu
│ └── bottom_nav_menu.xml
│ ├── mipmap-hdpi
│ └── ic_launcher.png
│ ├── mipmap-mdpi
│ └── ic_launcher.png
│ ├── mipmap-xhdpi
│ └── ic_launcher.png
│ ├── mipmap-xxhdpi
│ └── ic_launcher.png
│ ├── mipmap-xxxhdpi
│ └── ic_launcher.png
│ ├── values-v21
│ └── styles.xml
│ ├── values-w820dp
│ └── dimens.xml
│ └── values
│ ├── colors.xml
│ ├── dimens.xml
│ ├── strings.xml
│ └── styles.xml
├── gradle.properties
├── gradle
└── wrapper
│ ├── gradle-wrapper.jar
│ └── gradle-wrapper.properties
├── gradlew
├── gradlew.bat
├── header_acfun
├── .gitignore
├── build.gradle
├── proguard-rules.pro
└── src
│ └── main
│ ├── AndroidManifest.xml
│ ├── java
│ └── com
│ │ └── liaoinstan
│ │ └── springview
│ │ └── acfunheader
│ │ ├── AcFunFooter.java
│ │ └── AcFunHeader.java
│ └── res
│ ├── layout
│ ├── acfun_footer.xml
│ └── acfun_header.xml
│ └── values
│ └── strings.xml
├── header_ali
├── .gitignore
├── build.gradle
├── proguard-rules.pro
└── src
│ └── main
│ ├── AndroidManifest.xml
│ ├── java
│ └── com
│ │ └── liaoinstan
│ │ └── springview
│ │ └── aliheader
│ │ ├── AliFooter.java
│ │ └── AliHeader.java
│ └── res
│ ├── layout
│ ├── ali_footer.xml
│ └── ali_header.xml
│ └── values
│ └── strings.xml
├── header_du
├── .gitignore
├── build.gradle
├── consumer-rules.pro
├── proguard-rules.pro
└── src
│ └── main
│ ├── AndroidManifest.xml
│ ├── java
│ └── com
│ │ └── liaoinstan
│ │ └── springview
│ │ └── duheader
│ │ ├── DuHeader.java
│ │ ├── DuView.java
│ │ └── TopBarFrameLayout.java
│ └── res
│ ├── layout
│ ├── du_header.xml
│ └── view_top_bar.xml
│ └── values
│ └── strings.xml
├── header_meituan
├── .gitignore
├── build.gradle
├── proguard-rules.pro
└── src
│ └── main
│ ├── AndroidManifest.xml
│ ├── java
│ └── com
│ │ └── liaoinstan
│ │ └── springview
│ │ └── meituanheader
│ │ ├── MeituanFooter.java
│ │ └── MeituanHeader.java
│ └── res
│ ├── drawable-hdpi
│ ├── mt_loading01.png
│ ├── mt_loading02.png
│ ├── mt_pull.png
│ ├── mt_pull01.png
│ ├── mt_pull02.png
│ ├── mt_pull03.png
│ ├── mt_pull04.png
│ ├── mt_pull05.png
│ ├── mt_refreshing01.png
│ ├── mt_refreshing02.png
│ ├── mt_refreshing03.png
│ ├── mt_refreshing04.png
│ ├── mt_refreshing05.png
│ └── mt_refreshing06.png
│ ├── layout
│ ├── meituan_footer.xml
│ └── meituan_header.xml
│ └── values
│ └── strings.xml
├── header_rotation
├── .gitignore
├── build.gradle
├── proguard-rules.pro
└── src
│ └── main
│ ├── AndroidManifest.xml
│ ├── java
│ └── com
│ │ └── liaoinstan
│ │ └── springview
│ │ └── rotationheader
│ │ ├── RotationFooter.java
│ │ └── RotationHeader.java
│ └── res
│ ├── drawable
│ ├── gear.png
│ ├── progress_gear.xml
│ └── progress_gear_fu.xml
│ ├── layout
│ ├── rotation_footer.xml
│ └── rotation_header.xml
│ └── values
│ └── strings.xml
├── header_wangyi
├── .gitignore
├── build.gradle
├── proguard-rules.pro
└── src
│ └── main
│ ├── AndroidManifest.xml
│ ├── java
│ └── com
│ │ └── liaoinstan
│ │ └── springview
│ │ └── wangyiheader
│ │ ├── CircleRoundView.java
│ │ ├── WangyiHeader.java
│ │ └── WaveTextView.java
│ └── res
│ ├── layout
│ └── wangyi_header.xml
│ └── values
│ ├── attrs.xml
│ └── strings.xml
├── header_weixin
├── .gitignore
├── build.gradle
├── proguard-rules.pro
└── src
│ └── main
│ ├── AndroidManifest.xml
│ ├── java
│ └── com
│ │ └── liaoinstan
│ │ └── springview
│ │ ├── weixinheader
│ │ ├── Program.java
│ │ ├── RecycleAdapterWeixinHeader.java
│ │ ├── StartLinearSnapHelper.java
│ │ └── WeixinHeader.java
│ │ └── weixinheaderv2
│ │ ├── DragItemTouchCallback.java
│ │ ├── RecycleAdapterWeixinHeaderV2.java
│ │ ├── SmokeView.java
│ │ ├── Utils.java
│ │ ├── WeixinHeaderV2.java
│ │ ├── WeixinTitleBar.java
│ │ ├── WeixinV2InnerFooter.java
│ │ └── WeixinV2InnerHeader.java
│ └── res
│ ├── drawable-xxhdpi
│ ├── smoke.png
│ ├── weixin_ic_drop.png
│ ├── weixin_ic_drop_hot.png
│ ├── weixin_ic_search.png
│ └── weixin_ic_search_light.png
│ ├── drawable
│ ├── select_delete_bg.xml
│ ├── select_delete_drop.xml
│ ├── select_oval_dark_trans.xml
│ ├── shape_more.xml
│ ├── shape_none.xml
│ ├── shape_oval_dark_trans.xml
│ ├── shape_oval_dot.xml
│ ├── shape_oval_dot_dark.xml
│ ├── shape_rect_coner_dark.xml
│ ├── shape_rect_coner_dash_line.xml
│ ├── shape_rect_coner_top_bg.xml
│ └── shape_rect_gradient_weixinheader_bg.xml
│ ├── layout
│ ├── view_weixin_title_bar.xml
│ ├── weixin_header.xml
│ ├── weixin_header_item.xml
│ ├── weixin_header_item_more_v2.xml
│ ├── weixin_header_item_title_v2.xml
│ ├── weixin_header_item_v2.xml
│ ├── weixin_header_v2.xml
│ └── weixin_header_v2_inner.xml
│ └── values
│ ├── colors.xml
│ └── strings.xml
├── library
├── .gitignore
├── build.gradle
├── proguard-rules.pro
└── src
│ └── main
│ ├── AndroidManifest.xml
│ ├── java
│ └── com
│ │ └── liaoinstan
│ │ └── springview
│ │ ├── container
│ │ ├── AutoFooter.java
│ │ ├── BaseFooter.java
│ │ ├── BaseHeader.java
│ │ ├── BaseScrollFooter.java
│ │ ├── BaseScrollHeader.java
│ │ ├── BaseSimpleFooter.java
│ │ ├── BaseSimpleHeader.java
│ │ ├── DefaultFooter.java
│ │ ├── DefaultHeader.java
│ │ ├── InnerFooter.java
│ │ └── InnerHeader.java
│ │ ├── listener
│ │ └── AppBarStateChangeListener.java
│ │ ├── utils
│ │ └── DensityUtil.java
│ │ └── widget
│ │ ├── Flag.java
│ │ ├── ScrollCallbackHelper.java
│ │ ├── SpringHelper.java
│ │ └── SpringView.java
│ └── res
│ ├── drawable-hdpi
│ ├── arrow.png
│ └── progress_small.xml
│ ├── drawable
│ └── progress.xml
│ ├── layout
│ ├── auto_footer.xml
│ ├── default_footer.xml
│ └── default_header.xml
│ └── values
│ ├── attrs.xml
│ └── strings.xml
├── screenshot
├── 1459212323072.gif
├── 1459212323072_s.gif
├── 1459212372609.gif
├── 1459212372609_s.gif
├── 1459212462800.gif
├── 1459212462800_s.gif
├── 1459212485237.gif
├── 1459212485237_s.gif
├── 1459212517801.gif
├── 1459212517801_s.gif
├── 1459212658972.gif
├── 1459212658972_s.gif
├── 1459212769245.gif
├── 1459212769245_s.gif
├── auto_footer.gif
├── auto_footer_s.gif
├── du_header.gif
├── du_header_s.gif
├── springview.png
├── weixin_header.gif
├── weixin_header_s.gif
├── weixin_header_v2.gif
└── weixin_header_v2_s.gif
└── settings.gradle
/.gitignore:
--------------------------------------------------------------------------------
1 | *.iml
2 | .gradle
3 | /local.properties
4 | /.idea/workspace.xml
5 | /.idea/libraries
6 | .DS_Store
7 | /build
8 | /captures
9 |
--------------------------------------------------------------------------------
/apk/DemoSpring-1.7.0-release.apk:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/liaoinstan/SpringView/0a24d3e9ddc5ca4fa35e1ac26e6db448aacc1a18/apk/DemoSpring-1.7.0-release.apk
--------------------------------------------------------------------------------
/build.gradle:
--------------------------------------------------------------------------------
1 | buildscript {
2 | repositories {
3 | google()
4 | jcenter()
5 | }
6 | dependencies {
7 | classpath 'com.android.tools.build:gradle:3.5.3'
8 | classpath 'com.novoda:bintray-release:0.9.1'
9 | }
10 | }
11 |
12 | allprojects {
13 | repositories {
14 | google()
15 | jcenter()
16 | }
17 | tasks.withType(Javadoc) {
18 | options.addStringOption('Xdoclint:none', '-quiet')
19 | options.addStringOption('encoding', 'UTF-8')
20 | }
21 | }
22 | task clean(type: Delete) {
23 | delete rootProject.buildDir
24 | }
25 |
26 | ext {
27 | compileSdkVersion = 29
28 | minSdkVersion = 16
29 | targetSdkVersion = 27
30 | supportLibraryVersion = '1.1.0'
31 | materialLibraryVersion = '1.2.0-alpha02'
32 |
33 | userOrg = 'liaoinstan'
34 | repoName = "maven"
35 | groupId = 'com.liaoinstan.springview'
36 | desc = 'SpringView For Android'
37 | website = 'https://github.com/liaoinstan/SpringView'
38 | licences = ['Apache-2.0']
39 | }
40 |
41 | //gradlew clean build bintrayUpload -PbintrayUser=BINTRAY_USERNAME -PbintrayKey=BINTRAY_KEY
--------------------------------------------------------------------------------
/demo/.gitignore:
--------------------------------------------------------------------------------
1 | /build
2 |
--------------------------------------------------------------------------------
/demo/build.gradle:
--------------------------------------------------------------------------------
1 | apply plugin: 'com.android.application'
2 |
3 | android {
4 | compileSdkVersion rootProject.ext.compileSdkVersion
5 | compileOptions {
6 | targetCompatibility JavaVersion.VERSION_1_8
7 | sourceCompatibility JavaVersion.VERSION_1_8
8 | }
9 | defaultConfig {
10 | applicationId "com.liaoinstan.demospring"
11 | minSdkVersion rootProject.ext.minSdkVersion
12 | targetSdkVersion rootProject.ext.targetSdkVersion
13 | versionCode 17
14 | versionName "1.7.0"
15 | }
16 | buildTypes {
17 | release {
18 | minifyEnabled true //开启代码混淆
19 | zipAlignEnabled true //是否zip对齐优化
20 | shrinkResources true //移除无用的资源文件
21 | proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
22 | }
23 | debug {
24 | minifyEnabled false
25 | proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
26 | }
27 | }
28 | android.applicationVariants.all { variant ->
29 | variant.outputs.all {
30 | outputFileName = "DemoSpring-${defaultConfig.versionName}-${variant.buildType.name}.apk"
31 | }
32 | }
33 | }
34 |
35 | tasks.withType(JavaCompile) {
36 | options.encoding = "UTF-8"
37 | }
38 |
39 | dependencies {
40 | implementation fileTree(dir: 'libs', include: ['*.jar'])
41 | implementation "androidx.appcompat:appcompat:$supportLibraryVersion"
42 | implementation "com.google.android.material:material:$materialLibraryVersion"
43 |
44 | // implementation 'com.liaoinstan.springview:library:1.7.0'
45 | // implementation 'com.liaoinstan.springview:AcfunHeader:1.7.0'
46 | // implementation 'com.liaoinstan.springview:AliHeader:1.7.0'
47 | // implementation 'com.liaoinstan.springview:MeituanHeader:1.7.0'
48 | // implementation 'com.liaoinstan.springview:RotationHeader:1.7.0'
49 | // implementation 'com.liaoinstan.springview:WeixinHeader:1.7.0'
50 | // implementation 'com.liaoinstan.springview:DuHeader:1.7.0'
51 |
52 | implementation project(':library')
53 | implementation project(':header_ali')
54 | implementation project(':header_meituan')
55 | implementation project(':header_rotation')
56 | implementation project(':header_acfun')
57 | implementation project(':header_weixin')
58 | implementation project(':header_du')
59 |
60 | implementation project(':header_wangyi')
61 | }
62 |
--------------------------------------------------------------------------------
/demo/liaoinstan.jks:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/liaoinstan/SpringView/0a24d3e9ddc5ca4fa35e1ac26e6db448aacc1a18/demo/liaoinstan.jks
--------------------------------------------------------------------------------
/demo/proguard-rules.pro:
--------------------------------------------------------------------------------
1 | # Add project specific ProGuard rules here.
2 | # By default, the flags in this file are appended to flags specified
3 | # in D:\LZ\develop\adt-eclipse\adt-bundle-windows-x86_64-20140702\sdk/tools/proguard/proguard-android.txt
4 | # You can edit the include path and order by changing the proguardFiles
5 | # directive in build.gradle.
6 | #
7 | # For more details, see
8 | # http://developer.android.com/guide/developing/tools/proguard.html
9 |
10 | # Add any project specific keep options here:
11 |
12 | # If your project uses WebView with JS, uncomment the following
13 | # and specify the fully qualified class name to the JavaScript interface
14 | # class:
15 | #-keepclassmembers class fqcn.of.javascript.interface.for.webview {
16 | # public *;
17 | #}
18 |
--------------------------------------------------------------------------------
/demo/src/main/AndroidManifest.xml:
--------------------------------------------------------------------------------
1 |
2 |
5 |
6 |
7 |
8 |
15 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 |
37 |
38 |
39 |
40 |
41 |
42 |
43 |
--------------------------------------------------------------------------------
/demo/src/main/java/com/liaoinstan/demospring/demo1/Demo1Activity.java:
--------------------------------------------------------------------------------
1 | package com.liaoinstan.demospring.demo1;
2 |
3 | import android.os.Bundle;
4 | import android.os.Handler;
5 | import androidx.appcompat.app.AppCompatActivity;
6 | import androidx.appcompat.widget.Toolbar;
7 |
8 | import com.liaoinstan.demospring.R;
9 | import com.liaoinstan.springview.container.DefaultFooter;
10 | import com.liaoinstan.springview.container.DefaultHeader;
11 | import com.liaoinstan.springview.widget.SpringView;
12 |
13 | public class Demo1Activity extends AppCompatActivity {
14 |
15 |
16 | private SpringView springView;
17 |
18 | @Override
19 | protected void onCreate(Bundle savedInstanceState) {
20 | super.onCreate(savedInstanceState);
21 | setContentView(R.layout.activity_demo1);
22 | Toolbar toolbar = findViewById(R.id.toolbar);
23 | setSupportActionBar(toolbar);
24 |
25 | springView = findViewById(R.id.springview);
26 | springView.setType(SpringView.Type.FOLLOW);
27 | springView.setListener(new SpringView.OnFreshListener() {
28 | @Override
29 | public void onRefresh() {
30 | new Handler().postDelayed(() -> springView.onFinishFreshAndLoad(), 1000);
31 | }
32 |
33 | @Override
34 | public void onLoadmore() {
35 | new Handler().postDelayed(() -> springView.onFinishFreshAndLoad(), 1000);
36 | }
37 | });
38 | springView.setHeader(new DefaultHeader(this));
39 | springView.setFooter(new DefaultFooter(this));
40 | }
41 | }
42 |
--------------------------------------------------------------------------------
/demo/src/main/java/com/liaoinstan/demospring/demo10/Demo10Activity.java:
--------------------------------------------------------------------------------
1 | package com.liaoinstan.demospring.demo10;
2 |
3 | import android.os.Bundle;
4 | import android.os.Handler;
5 |
6 | import androidx.appcompat.app.AppCompatActivity;
7 | import androidx.appcompat.widget.Toolbar;
8 |
9 | import com.liaoinstan.demospring.R;
10 | import com.liaoinstan.springview.meituanheader.MeituanFooter;
11 | import com.liaoinstan.springview.meituanheader.MeituanHeader;
12 | import com.liaoinstan.springview.widget.SpringView;
13 |
14 | public class Demo10Activity extends AppCompatActivity {
15 |
16 | private SpringView springView;
17 |
18 | //下拉过程动画
19 | private int[] pullAnimSrcs = new int[]{R.drawable.mt_pull, R.drawable.mt_pull01, R.drawable.mt_pull02, R.drawable.mt_pull03, R.drawable.mt_pull04, R.drawable.mt_pull05};
20 | //刷新中动画
21 | private int[] refreshAnimSrcs = new int[]{R.drawable.mt_refreshing01, R.drawable.mt_refreshing02, R.drawable.mt_refreshing03, R.drawable.mt_refreshing04, R.drawable.mt_refreshing05, R.drawable.mt_refreshing06};
22 | //加载更多底部动画
23 | private int[] loadingAnimSrcs = new int[]{R.drawable.mt_loading01, R.drawable.mt_loading02};
24 |
25 | @Override
26 | protected void onCreate(Bundle savedInstanceState) {
27 | super.onCreate(savedInstanceState);
28 | setContentView(R.layout.activity_demo10);
29 | Toolbar toolbar = findViewById(R.id.toolbar);
30 | setSupportActionBar(toolbar);
31 |
32 | springView = findViewById(R.id.springview);
33 | springView.setListener(new SpringView.OnFreshListener() {
34 | @Override
35 | public void onRefresh() {
36 | new Handler().postDelayed(() -> springView.onFinishFreshAndLoad(), 2000);
37 | }
38 |
39 | @Override
40 | public void onLoadmore() {
41 | new Handler().postDelayed(() -> springView.onFinishFreshAndLoad(), 2000);
42 | }
43 | });
44 | //给header和footer设置为DRAG模式
45 | springView.setHeader(new MeituanHeader(this, pullAnimSrcs, refreshAnimSrcs).setType(SpringView.Type.DRAG));
46 | springView.setFooter(new MeituanFooter(this, loadingAnimSrcs).setType(SpringView.Type.DRAG));
47 | }
48 | }
49 |
--------------------------------------------------------------------------------
/demo/src/main/java/com/liaoinstan/demospring/demo14/Demo14Activity.java:
--------------------------------------------------------------------------------
1 | package com.liaoinstan.demospring.demo14;
2 |
3 | import android.os.Bundle;
4 | import android.os.Handler;
5 |
6 | import androidx.appcompat.app.AppCompatActivity;
7 | import androidx.appcompat.widget.Toolbar;
8 |
9 | import com.liaoinstan.demospring.R;
10 | import com.liaoinstan.springview.duheader.DuHeader;
11 | import com.liaoinstan.springview.duheader.TopBarFrameLayout;
12 | import com.liaoinstan.springview.widget.SpringView;
13 |
14 | public class Demo14Activity extends AppCompatActivity {
15 |
16 | private SpringView springView;
17 | private TopBarFrameLayout topBarFrameLayout;
18 |
19 | @Override
20 | protected void onCreate(Bundle savedInstanceState) {
21 | super.onCreate(savedInstanceState);
22 | setContentView(R.layout.activity_demo14);
23 | Toolbar toolbar = findViewById(R.id.toolbar);
24 | setSupportActionBar(toolbar);
25 |
26 | topBarFrameLayout = findViewById(R.id.top_bar_frame_layout);
27 | springView = findViewById(R.id.springview);
28 | springView.setListener(new SpringView.OnFreshListener() {
29 | @Override
30 | public void onRefresh() {
31 | new Handler().postDelayed(() -> {
32 | //0.5秒后再结束header刷新动画(模仿'毒'的延迟,大概0.5秒左右)
33 | springView.onFinishFreshAndLoadDelay(500);
34 | //开始展开topBar顶部提示,并在2.5秒回自动收回
35 | topBarFrameLayout.setTopBarText("为你更新20条新内容");
36 | topBarFrameLayout.showAndHideDelay(2500);
37 | }, 2000);
38 | }
39 |
40 | @Override
41 | public void onLoadmore() {
42 | new Handler().postDelayed(() -> springView.onFinishFreshAndLoad(), 2000);
43 | }
44 | });
45 | springView.setHeader(new DuHeader());
46 | }
47 | }
48 |
--------------------------------------------------------------------------------
/demo/src/main/java/com/liaoinstan/demospring/demo4/Demo4Activity.java:
--------------------------------------------------------------------------------
1 | package com.liaoinstan.demospring.demo4;
2 |
3 | import android.graphics.Color;
4 | import android.graphics.drawable.ColorDrawable;
5 | import android.os.Bundle;
6 | import androidx.appcompat.app.AppCompatActivity;
7 | import androidx.appcompat.widget.Toolbar;
8 | import android.webkit.WebSettings;
9 | import android.webkit.WebView;
10 |
11 | import com.liaoinstan.demospring.R;
12 |
13 | public class Demo4Activity extends AppCompatActivity {
14 |
15 | private WebView webView;
16 |
17 | @SuppressWarnings("all")
18 | @Override
19 | protected void onCreate(Bundle savedInstanceState) {
20 | super.onCreate(savedInstanceState);
21 | setContentView(R.layout.activity_demo4);
22 | Toolbar toolbar = findViewById(R.id.toolbar);
23 | setSupportActionBar(toolbar);
24 | getSupportActionBar().setBackgroundDrawable(new ColorDrawable(Color.parseColor("#18cfbe")));
25 |
26 | webView = findViewById(R.id.webView);
27 | WebSettings settings = webView.getSettings();
28 | settings.setJavaScriptEnabled(true);
29 | webView.loadUrl("https://github.com"); //https://github.com //http://cn.bing.com/
30 | }
31 | }
32 |
--------------------------------------------------------------------------------
/demo/src/main/java/com/liaoinstan/demospring/demo5/Demo5Activity.java:
--------------------------------------------------------------------------------
1 | package com.liaoinstan.demospring.demo5;
2 |
3 | import android.os.Bundle;
4 | import androidx.appcompat.app.AppCompatActivity;
5 | import androidx.appcompat.widget.Toolbar;
6 |
7 | import com.liaoinstan.demospring.R;
8 | import com.liaoinstan.springview.acfunheader.AcFunFooter;
9 | import com.liaoinstan.springview.acfunheader.AcFunHeader;
10 | import com.liaoinstan.springview.widget.SpringView;
11 |
12 | public class Demo5Activity extends AppCompatActivity {
13 | private SpringView springView;
14 |
15 | @Override
16 | protected void onCreate(Bundle savedInstanceState) {
17 | super.onCreate(savedInstanceState);
18 | setContentView(R.layout.activity_demo5);
19 | Toolbar toolbar = findViewById(R.id.toolbar);
20 | setSupportActionBar(toolbar);
21 |
22 | springView = findViewById(R.id.springview);
23 | springView.setGive(SpringView.Give.NONE);
24 | springView.setListener(new SpringView.OnFreshListener() {
25 | @Override
26 | public void onRefresh() {
27 | }
28 |
29 | @Override
30 | public void onLoadmore() {
31 | }
32 | });
33 | springView.setHeader(new AcFunHeader(this, R.drawable.acfun_header));
34 | springView.setFooter(new AcFunFooter(this, R.drawable.acfun_footer));
35 | }
36 | }
37 |
--------------------------------------------------------------------------------
/demo/src/main/java/com/liaoinstan/demospring/demo6/Demo6Activity.java:
--------------------------------------------------------------------------------
1 | package com.liaoinstan.demospring.demo6;
2 |
3 | import android.os.Bundle;
4 | import android.os.Handler;
5 | import android.widget.RadioGroup;
6 |
7 | import androidx.appcompat.app.AppCompatActivity;
8 | import androidx.appcompat.widget.Toolbar;
9 |
10 | import com.liaoinstan.demospring.R;
11 | import com.liaoinstan.springview.container.DefaultFooter;
12 | import com.liaoinstan.springview.container.DefaultHeader;
13 | import com.liaoinstan.springview.widget.SpringView;
14 |
15 | public class Demo6Activity extends AppCompatActivity implements RadioGroup.OnCheckedChangeListener {
16 |
17 | private SpringView springView;
18 |
19 | @Override
20 | protected void onCreate(Bundle savedInstanceState) {
21 | super.onCreate(savedInstanceState);
22 | setContentView(R.layout.activity_demo6);
23 | Toolbar toolbar = findViewById(R.id.toolbar);
24 | setSupportActionBar(toolbar);
25 |
26 | ((RadioGroup) findViewById(R.id.group_header)).setOnCheckedChangeListener(this);
27 |
28 | springView = findViewById(R.id.springview);
29 | springView.setListener(new SpringView.OnFreshListener() {
30 | @Override
31 | public void onRefresh() {
32 | //如果当前设置的头部是QQHeader,则不finish
33 | if (springView.getHeader() instanceof QQHeader) return;
34 | new Handler().postDelayed(() -> springView.onFinishFreshAndLoad(), 1000);
35 | }
36 |
37 | @Override
38 | public void onLoadmore() {
39 | new Handler().postDelayed(() -> springView.onFinishFreshAndLoad(), 1000);
40 | }
41 | });
42 | springView.setHeader(new QQHeader().setMovePara(1.5f)); //设置拖拽系数(值越大,移动越慢)
43 | springView.setFooter(new DefaultFooter(this, R.drawable.progress_small));
44 | }
45 |
46 | @Override
47 | public void onCheckedChanged(RadioGroup group, int checkedId) {
48 | switch (checkedId) {
49 | case R.id.drag_header:
50 | springView.setHeader(new QQHeader());
51 | break;
52 | case R.id.nomal_header:
53 | springView.setHeader(new DefaultHeader(this));
54 | break;
55 | }
56 | }
57 | }
58 |
--------------------------------------------------------------------------------
/demo/src/main/java/com/liaoinstan/demospring/demo6/QQHeader.java:
--------------------------------------------------------------------------------
1 | package com.liaoinstan.demospring.demo6;
2 |
3 | import android.view.LayoutInflater;
4 | import android.view.View;
5 | import android.view.ViewGroup;
6 | import android.widget.TextView;
7 |
8 | import com.liaoinstan.demospring.R;
9 | import com.liaoinstan.springview.container.BaseSimpleHeader;
10 | import com.liaoinstan.springview.widget.SpringView;
11 |
12 | /**
13 | * Created by liaoinstan on 2016/3/23.
14 | * 简单定制的QQ新年刷红包效果,可以在此基础上自己增加动画特效,这里只是模拟出该效果框架进行演示,故该Header不放在library里面
15 | */
16 | //TODO:重构后该demo失效,待修复
17 | public class QQHeader extends BaseSimpleHeader {
18 |
19 | private TextView text_dot;
20 | private int dotcount;
21 |
22 | public QQHeader() {
23 | setType(SpringView.Type.OVERLAP);
24 | setMovePara(2.0f);
25 | }
26 |
27 | @Override
28 | public View getView(LayoutInflater inflater, ViewGroup viewGroup) {
29 | View view = inflater.inflate(R.layout.header_qq, viewGroup, false);
30 | text_dot = view.findViewById(R.id.text_dot);
31 | return view;
32 | }
33 |
34 | @Override
35 | public int getDragLimitHeight(View rootView) {
36 | return 150;
37 | }
38 |
39 | @Override
40 | public int getDragMaxHeight(View rootView) {
41 | return rootView.getMeasuredHeight();
42 | }
43 |
44 | @Override
45 | public int getDragSpringHeight(View rootView) {
46 | return rootView.getMeasuredHeight() - 100;
47 | }
48 |
49 | @Override
50 | public void onPreDrag(View rootView) {
51 | dotcount++;
52 | text_dot.setText("x" + dotcount);
53 | }
54 |
55 | @Override
56 | public void onFinishDrag(View rootView) {
57 | }
58 |
59 | @Override
60 | public void onDropAnim(View rootView, int dy) {
61 | }
62 |
63 | @Override
64 | public void onLimitDes(View rootView, boolean upORdown) {
65 | }
66 |
67 | @Override
68 | public void onStartAnim() {
69 | }
70 |
71 | @Override
72 | public void onFinishAnim() {
73 | }
74 | }
75 |
--------------------------------------------------------------------------------
/demo/src/main/java/com/liaoinstan/demospring/demo7/Demo7Activity.java:
--------------------------------------------------------------------------------
1 | package com.liaoinstan.demospring.demo7;
2 |
3 | import android.os.Bundle;
4 | import android.os.Handler;
5 |
6 | import androidx.appcompat.app.AppCompatActivity;
7 | import androidx.appcompat.widget.Toolbar;
8 |
9 | import com.liaoinstan.demospring.R;
10 | import com.liaoinstan.springview.meituanheader.MeituanFooter;
11 | import com.liaoinstan.springview.meituanheader.MeituanHeader;
12 | import com.liaoinstan.springview.widget.SpringView;
13 |
14 | public class Demo7Activity extends AppCompatActivity {
15 |
16 | private SpringView springView;
17 |
18 | //下拉过程动画
19 | private int[] pullAnimSrcs = new int[]{R.drawable.mt_pull, R.drawable.mt_pull01, R.drawable.mt_pull02, R.drawable.mt_pull03, R.drawable.mt_pull04, R.drawable.mt_pull05};
20 | //刷新中动画
21 | private int[] refreshAnimSrcs = new int[]{R.drawable.mt_refreshing01, R.drawable.mt_refreshing02, R.drawable.mt_refreshing03, R.drawable.mt_refreshing04, R.drawable.mt_refreshing05, R.drawable.mt_refreshing06};
22 | //加载更多底部动画
23 | private int[] loadingAnimSrcs = new int[]{R.drawable.mt_loading01, R.drawable.mt_loading02};
24 |
25 | @Override
26 | protected void onCreate(Bundle savedInstanceState) {
27 | super.onCreate(savedInstanceState);
28 | setContentView(R.layout.activity_demo7);
29 | Toolbar toolbar = findViewById(R.id.toolbar);
30 | setSupportActionBar(toolbar);
31 |
32 | springView = findViewById(R.id.springview);
33 | springView.setListener(new SpringView.OnFreshListener() {
34 | @Override
35 | public void onRefresh() {
36 | new Handler().postDelayed(() -> springView.onFinishFreshAndLoad(), 2000);
37 | }
38 |
39 | @Override
40 | public void onLoadmore() {
41 | new Handler().postDelayed(() -> springView.onFinishFreshAndLoad(), 2000);
42 | }
43 | });
44 | springView.setHeader(new MeituanHeader(this, pullAnimSrcs, refreshAnimSrcs));
45 | springView.setFooter(new MeituanFooter(this, loadingAnimSrcs));
46 | }
47 | }
48 |
--------------------------------------------------------------------------------
/demo/src/main/java/com/liaoinstan/demospring/demo8/MyItemTouchCallback.java:
--------------------------------------------------------------------------------
1 | package com.liaoinstan.demospring.demo8;
2 |
3 | import android.graphics.Canvas;
4 |
5 | import androidx.annotation.NonNull;
6 | import androidx.recyclerview.widget.GridLayoutManager;
7 | import androidx.recyclerview.widget.ItemTouchHelper;
8 | import androidx.recyclerview.widget.RecyclerView;
9 |
10 | /**
11 | * Created by liaoinstan on 2016/4/12.
12 | * 实现侧滑删除功能
13 | */
14 | public class MyItemTouchCallback extends ItemTouchHelper.Callback {
15 |
16 | private ItemTouchAdapter itemTouchAdapter;
17 |
18 | public MyItemTouchCallback(ItemTouchAdapter itemTouchAdapter) {
19 | this.itemTouchAdapter = itemTouchAdapter;
20 | }
21 |
22 | @Override
23 | public boolean isLongPressDragEnabled() {
24 | return false;
25 | }
26 |
27 | @Override
28 | public boolean isItemViewSwipeEnabled() {
29 | return true;
30 | }
31 |
32 |
33 | @Override
34 | public int getMovementFlags(@NonNull RecyclerView recyclerView, @NonNull RecyclerView.ViewHolder viewHolder) {
35 | if (recyclerView.getLayoutManager() instanceof GridLayoutManager) {
36 | final int dragFlags = ItemTouchHelper.UP | ItemTouchHelper.DOWN | ItemTouchHelper.LEFT | ItemTouchHelper.RIGHT;
37 | final int swipeFlags = 0;
38 | return makeMovementFlags(dragFlags, swipeFlags);
39 | } else {
40 | final int dragFlags = ItemTouchHelper.UP | ItemTouchHelper.DOWN;
41 | final int swipeFlags = ItemTouchHelper.START | ItemTouchHelper.END;
42 | return makeMovementFlags(dragFlags, swipeFlags);
43 | }
44 | }
45 |
46 | @Override
47 | public boolean onMove(@NonNull RecyclerView recyclerView, @NonNull RecyclerView.ViewHolder viewHolder, @NonNull RecyclerView.ViewHolder target) {
48 | int fromPosition = viewHolder.getAdapterPosition();//得到拖动ViewHolder的position
49 | int toPosition = target.getAdapterPosition();//得到目标ViewHolder的position
50 | itemTouchAdapter.onMove(fromPosition, toPosition);
51 | return true;
52 | }
53 |
54 | @Override
55 | public void onSwiped(@NonNull RecyclerView.ViewHolder viewHolder, int direction) {
56 | int position = viewHolder.getAdapterPosition();
57 | itemTouchAdapter.onSwiped(position);
58 | }
59 |
60 | @Override
61 | public void onChildDraw(@NonNull Canvas c, @NonNull RecyclerView recyclerView, @NonNull RecyclerView.ViewHolder viewHolder, float dX, float dY, int actionState, boolean isCurrentlyActive) {
62 | if (actionState == ItemTouchHelper.ACTION_STATE_SWIPE) {
63 | //滑动时改变Item的透明度
64 | final float alpha = 1 - Math.abs(dX) / (float) viewHolder.itemView.getWidth();
65 | viewHolder.itemView.setAlpha(alpha);
66 | viewHolder.itemView.setTranslationX(dX);
67 | } else {
68 | super.onChildDraw(c, recyclerView, viewHolder, dX, dY, actionState, isCurrentlyActive);
69 | }
70 | }
71 |
72 | public interface ItemTouchAdapter {
73 | void onMove(int fromPosition, int toPosition);
74 |
75 | void onSwiped(int position);
76 | }
77 | }
78 |
--------------------------------------------------------------------------------
/demo/src/main/java/com/liaoinstan/demospring/demo9/Demo9Activity.java:
--------------------------------------------------------------------------------
1 | package com.liaoinstan.demospring.demo9;
2 |
3 | import android.os.Bundle;
4 | import com.google.android.material.tabs.TabLayout;
5 |
6 | import androidx.annotation.NonNull;
7 | import androidx.fragment.app.Fragment;
8 | import androidx.fragment.app.FragmentManager;
9 | import androidx.fragment.app.FragmentPagerAdapter;
10 | import androidx.viewpager.widget.ViewPager;
11 | import androidx.appcompat.app.AppCompatActivity;
12 | import androidx.appcompat.widget.Toolbar;
13 |
14 | import com.liaoinstan.demospring.R;
15 |
16 | @SuppressWarnings("all")
17 | public class Demo9Activity extends AppCompatActivity {
18 | private TabLayout tab;
19 | private ViewPager pager;
20 | private PagerAdapter adapterPager;
21 |
22 | @Override
23 | protected void onCreate(Bundle savedInstanceState) {
24 | super.onCreate(savedInstanceState);
25 | setContentView(R.layout.activity_demo9);
26 | Toolbar toolbar = findViewById(R.id.toolbar);
27 | setSupportActionBar(toolbar);
28 |
29 | tab = findViewById(R.id.tab);
30 | pager = findViewById(R.id.pager);
31 |
32 | adapterPager = new PagerAdapter(getSupportFragmentManager(), new String[]{"ScrollView", "RecyclerView", "note"});
33 | pager.setAdapter(adapterPager);
34 | tab.setupWithViewPager(pager);
35 | }
36 |
37 | /**
38 | * Adapter for Viewpager
39 | */
40 | private class PagerAdapter extends FragmentPagerAdapter {
41 | private String[] titles;
42 |
43 | PagerAdapter(FragmentManager fm, String[] titles) {
44 | super(fm);
45 | this.titles = titles;
46 | }
47 |
48 | @Override
49 | public CharSequence getPageTitle(int position) {
50 | return titles[position];
51 | }
52 |
53 | @Override
54 | public int getCount() {
55 | return titles.length;
56 | }
57 |
58 | @Override
59 | public Fragment getItem(int position) {
60 | switch (position) {
61 | case 0:
62 | return Demo9FragmentScrollView.newInstance(position);
63 | case 1:
64 | return Demo9FragmentRecyclerView.newInstance(position);
65 | case 2:
66 | return Demo9FragmentNote.newInstance(position);
67 | default:
68 | return null;
69 | }
70 | }
71 | }
72 | }
73 |
--------------------------------------------------------------------------------
/demo/src/main/java/com/liaoinstan/demospring/demo9/Demo9FragmentNote.java:
--------------------------------------------------------------------------------
1 | package com.liaoinstan.demospring.demo9;
2 |
3 | import android.os.Bundle;
4 | import android.os.Handler;
5 | import android.view.LayoutInflater;
6 | import android.view.View;
7 | import android.view.ViewGroup;
8 |
9 | import androidx.annotation.NonNull;
10 | import androidx.annotation.Nullable;
11 | import androidx.fragment.app.Fragment;
12 |
13 | import com.liaoinstan.demospring.R;
14 | import com.liaoinstan.springview.rotationheader.RotationFooter;
15 | import com.liaoinstan.springview.rotationheader.RotationHeader;
16 | import com.liaoinstan.springview.widget.SpringView;
17 |
18 |
19 | /**
20 | * Created by liaoinstan
21 | */
22 | public class Demo9FragmentNote extends Fragment {
23 |
24 | private int position;
25 | private View rootView;
26 |
27 | private SpringView springView;
28 |
29 | public static Fragment newInstance(int position) {
30 | Demo9FragmentNote fragment = new Demo9FragmentNote();
31 | Bundle bundle = new Bundle();
32 | bundle.putInt("position", position);
33 | fragment.setArguments(bundle);
34 | return fragment;
35 | }
36 |
37 | @Override
38 | public void onCreate(@Nullable Bundle savedInstanceState) {
39 | super.onCreate(savedInstanceState);
40 | this.position = getArguments().getInt("position");
41 | }
42 |
43 | @Nullable
44 | @Override
45 | public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
46 | rootView = inflater.inflate(R.layout.fragment_demo9_note, container, false);
47 | return rootView;
48 | }
49 |
50 | @Override
51 | public void onActivityCreated(@Nullable Bundle savedInstanceState) {
52 | super.onActivityCreated(savedInstanceState);
53 | initView();
54 | }
55 |
56 | private void initView() {
57 | //初始化SpringView
58 | springView = rootView.findViewById(R.id.springview);
59 | springView.setHeader(new RotationHeader());
60 | springView.setFooter(new RotationFooter());
61 | springView.setListener(new SpringView.OnFreshListener() {
62 | @Override
63 | public void onRefresh() {
64 | new Handler().postDelayed(() -> springView.onFinishFreshAndLoad(), 1000);
65 | }
66 |
67 | @Override
68 | public void onLoadmore() {
69 | new Handler().postDelayed(() -> springView.onFinishFreshAndLoad(), 1000);
70 | }
71 | });
72 | }
73 | }
74 |
--------------------------------------------------------------------------------
/demo/src/main/java/com/liaoinstan/demospring/demo9/Demo9FragmentScrollView.java:
--------------------------------------------------------------------------------
1 | package com.liaoinstan.demospring.demo9;
2 |
3 | import android.os.Bundle;
4 | import android.os.Handler;
5 |
6 | import androidx.annotation.NonNull;
7 | import androidx.annotation.Nullable;
8 | import androidx.fragment.app.Fragment;
9 | import android.view.LayoutInflater;
10 | import android.view.View;
11 | import android.view.ViewGroup;
12 |
13 | import com.liaoinstan.demospring.R;
14 | import com.liaoinstan.springview.aliheader.AliFooter;
15 | import com.liaoinstan.springview.aliheader.AliHeader;
16 | import com.liaoinstan.springview.widget.SpringView;
17 |
18 |
19 | /**
20 | * Created by liaoinstan
21 | */
22 | public class Demo9FragmentScrollView extends Fragment {
23 |
24 | private int position;
25 | private View rootView;
26 |
27 | private SpringView springView;
28 |
29 | public static Fragment newInstance(int position) {
30 | Demo9FragmentScrollView fragment = new Demo9FragmentScrollView();
31 | Bundle bundle = new Bundle();
32 | bundle.putInt("position", position);
33 | fragment.setArguments(bundle);
34 | return fragment;
35 | }
36 |
37 | @Override
38 | public void onCreate(@Nullable Bundle savedInstanceState) {
39 | super.onCreate(savedInstanceState);
40 | this.position = getArguments().getInt("position");
41 | }
42 |
43 | @Nullable
44 | @Override
45 | public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
46 | rootView = inflater.inflate(R.layout.fragment_demo9_scrollview, container, false);
47 | return rootView;
48 | }
49 |
50 | @Override
51 | public void onActivityCreated(@Nullable Bundle savedInstanceState) {
52 | super.onActivityCreated(savedInstanceState);
53 | initView();
54 | }
55 |
56 | private void initView() {
57 | //初始化SpringView
58 | springView = rootView.findViewById(R.id.springview);
59 | springView.setHeader(new AliHeader(getContext(), R.drawable.ali, true));
60 | springView.setFooter(new AliFooter(getContext(), false));
61 | springView.setListener(new SpringView.OnFreshListener() {
62 | @Override
63 | public void onRefresh() {
64 | new Handler().postDelayed(() -> springView.onFinishFreshAndLoad(), 1000);
65 | }
66 |
67 | @Override
68 | public void onLoadmore() {
69 | new Handler().postDelayed(() -> springView.onFinishFreshAndLoad(), 1000);
70 | }
71 | });
72 | }
73 | }
74 |
--------------------------------------------------------------------------------
/demo/src/main/java/com/liaoinstan/demospring/demox/DemoXActivity.java:
--------------------------------------------------------------------------------
1 | package com.liaoinstan.demospring.demox;
2 |
3 | import android.os.Bundle;
4 | import android.os.Handler;
5 |
6 | import androidx.appcompat.app.AppCompatActivity;
7 | import androidx.appcompat.widget.Toolbar;
8 |
9 | import com.liaoinstan.demospring.R;
10 | import com.liaoinstan.springview.aliheader.AliFooter;
11 | import com.liaoinstan.springview.wangyiheader.WangyiHeader;
12 | import com.liaoinstan.springview.widget.SpringView;
13 |
14 | /**
15 | * 这是仿网易新闻的例子,使用了SpringView新增的'收场动画'特性
16 | * 目前该特性还处于试验阶段,并未正式发布,如果效果不佳可能在后续版本移除,目前暂时移除掉这个例子
17 | */
18 | public class DemoXActivity extends AppCompatActivity {
19 |
20 | private SpringView springView;
21 |
22 | @Override
23 | protected void onCreate(Bundle savedInstanceState) {
24 | super.onCreate(savedInstanceState);
25 | setContentView(R.layout.activity_demox);
26 | Toolbar toolbar = findViewById(R.id.toolbar);
27 | setSupportActionBar(toolbar);
28 |
29 | springView = findViewById(R.id.springview);
30 | springView.setMovePara(1.3f);
31 | springView.setListener(new SpringView.OnFreshListener() {
32 | @Override
33 | public void onRefresh() {
34 | new Handler().postDelayed(() -> springView.onFinishFreshAndLoad(), 2000);
35 | }
36 |
37 | @Override
38 | public void onLoadmore() {
39 | new Handler().postDelayed(() -> springView.onFinishFreshAndLoad(), 2000);
40 | }
41 | });
42 | springView.setHeader(new WangyiHeader());
43 | springView.setFooter(new AliFooter(this));
44 |
45 | }
46 | }
47 |
--------------------------------------------------------------------------------
/demo/src/main/java/com/liaoinstan/demospring/warning/WarningActivity.java:
--------------------------------------------------------------------------------
1 | package com.liaoinstan.demospring.warning;
2 |
3 | import android.os.Bundle;
4 | import android.os.Handler;
5 | import androidx.appcompat.app.AppCompatActivity;
6 | import androidx.appcompat.widget.Toolbar;
7 |
8 | import com.liaoinstan.demospring.R;
9 | import com.liaoinstan.springview.widget.SpringView;
10 |
11 | public class WarningActivity extends AppCompatActivity {
12 |
13 | private SpringView springView;
14 |
15 | @Override
16 | protected void onCreate(Bundle savedInstanceState) {
17 | super.onCreate(savedInstanceState);
18 | setContentView(R.layout.activity_warning);
19 | Toolbar toolbar = findViewById(R.id.toolbar);
20 | setSupportActionBar(toolbar);
21 |
22 | springView = findViewById(R.id.springview);
23 | springView.setListener(new SpringView.OnFreshListener() {
24 | @Override
25 | public void onRefresh() {
26 | new Handler().postDelayed(() -> springView.onFinishFreshAndLoad(), 1000);
27 | }
28 |
29 | @Override
30 | public void onLoadmore() {
31 | new Handler().postDelayed(() -> springView.onFinishFreshAndLoad(), 1000);
32 | }
33 | });
34 | springView.setHeader(new WarningHeader());
35 | }
36 | }
37 |
--------------------------------------------------------------------------------
/demo/src/main/java/com/liaoinstan/demospring/warning/WarningHeader.java:
--------------------------------------------------------------------------------
1 | package com.liaoinstan.demospring.warning;
2 |
3 | import android.view.LayoutInflater;
4 | import android.view.View;
5 | import android.view.ViewGroup;
6 | import android.widget.TextView;
7 |
8 | import com.liaoinstan.demospring.R;
9 | import com.liaoinstan.springview.container.BaseHeader;
10 |
11 | /**
12 | * Created by liaoinstan on 2016/3/28.
13 | */
14 | public class WarningHeader extends BaseHeader {
15 | private TextView textView;
16 |
17 | private int i = 0;
18 |
19 | @Override
20 | public View getView(LayoutInflater inflater, ViewGroup viewGroup) {
21 | View view = inflater.inflate(R.layout.header_warning, viewGroup, false);
22 | textView = view.findViewById(R.id.textView);
23 | return view;
24 | }
25 |
26 | @Override
27 | public void onPreDrag(View rootView) {
28 |
29 | }
30 |
31 | @Override
32 | public void onDropAnim(View rootView, int dy) {
33 |
34 | }
35 |
36 | @Override
37 | public void onLimitDes(View rootView, boolean upORdown) {
38 | i++;
39 | textView.setText("this is TextView " + i);
40 | }
41 |
42 | @Override
43 | public void onStartAnim() {
44 |
45 | }
46 |
47 | @Override
48 | public void onFinishAnim() {
49 |
50 | }
51 | }
52 |
--------------------------------------------------------------------------------
/demo/src/main/res/color/weixin_color_select.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/demo/src/main/res/drawable-hdpi/acfun_footer.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/liaoinstan/SpringView/0a24d3e9ddc5ca4fa35e1ac26e6db448aacc1a18/demo/src/main/res/drawable-hdpi/acfun_footer.png
--------------------------------------------------------------------------------
/demo/src/main/res/drawable-hdpi/acfun_header.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/liaoinstan/SpringView/0a24d3e9ddc5ca4fa35e1ac26e6db448aacc1a18/demo/src/main/res/drawable-hdpi/acfun_header.png
--------------------------------------------------------------------------------
/demo/src/main/res/drawable-hdpi/ali.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/liaoinstan/SpringView/0a24d3e9ddc5ca4fa35e1ac26e6db448aacc1a18/demo/src/main/res/drawable-hdpi/ali.png
--------------------------------------------------------------------------------
/demo/src/main/res/drawable-hdpi/bk_test.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/liaoinstan/SpringView/0a24d3e9ddc5ca4fa35e1ac26e6db448aacc1a18/demo/src/main/res/drawable-hdpi/bk_test.jpg
--------------------------------------------------------------------------------
/demo/src/main/res/drawable-hdpi/me.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/liaoinstan/SpringView/0a24d3e9ddc5ca4fa35e1ac26e6db448aacc1a18/demo/src/main/res/drawable-hdpi/me.png
--------------------------------------------------------------------------------
/demo/src/main/res/drawable-hdpi/mt_loading01.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/liaoinstan/SpringView/0a24d3e9ddc5ca4fa35e1ac26e6db448aacc1a18/demo/src/main/res/drawable-hdpi/mt_loading01.png
--------------------------------------------------------------------------------
/demo/src/main/res/drawable-hdpi/mt_loading02.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/liaoinstan/SpringView/0a24d3e9ddc5ca4fa35e1ac26e6db448aacc1a18/demo/src/main/res/drawable-hdpi/mt_loading02.png
--------------------------------------------------------------------------------
/demo/src/main/res/drawable-hdpi/mt_pull.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/liaoinstan/SpringView/0a24d3e9ddc5ca4fa35e1ac26e6db448aacc1a18/demo/src/main/res/drawable-hdpi/mt_pull.png
--------------------------------------------------------------------------------
/demo/src/main/res/drawable-hdpi/mt_pull01.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/liaoinstan/SpringView/0a24d3e9ddc5ca4fa35e1ac26e6db448aacc1a18/demo/src/main/res/drawable-hdpi/mt_pull01.png
--------------------------------------------------------------------------------
/demo/src/main/res/drawable-hdpi/mt_pull02.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/liaoinstan/SpringView/0a24d3e9ddc5ca4fa35e1ac26e6db448aacc1a18/demo/src/main/res/drawable-hdpi/mt_pull02.png
--------------------------------------------------------------------------------
/demo/src/main/res/drawable-hdpi/mt_pull03.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/liaoinstan/SpringView/0a24d3e9ddc5ca4fa35e1ac26e6db448aacc1a18/demo/src/main/res/drawable-hdpi/mt_pull03.png
--------------------------------------------------------------------------------
/demo/src/main/res/drawable-hdpi/mt_pull04.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/liaoinstan/SpringView/0a24d3e9ddc5ca4fa35e1ac26e6db448aacc1a18/demo/src/main/res/drawable-hdpi/mt_pull04.png
--------------------------------------------------------------------------------
/demo/src/main/res/drawable-hdpi/mt_pull05.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/liaoinstan/SpringView/0a24d3e9ddc5ca4fa35e1ac26e6db448aacc1a18/demo/src/main/res/drawable-hdpi/mt_pull05.png
--------------------------------------------------------------------------------
/demo/src/main/res/drawable-hdpi/mt_refreshing01.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/liaoinstan/SpringView/0a24d3e9ddc5ca4fa35e1ac26e6db448aacc1a18/demo/src/main/res/drawable-hdpi/mt_refreshing01.png
--------------------------------------------------------------------------------
/demo/src/main/res/drawable-hdpi/mt_refreshing02.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/liaoinstan/SpringView/0a24d3e9ddc5ca4fa35e1ac26e6db448aacc1a18/demo/src/main/res/drawable-hdpi/mt_refreshing02.png
--------------------------------------------------------------------------------
/demo/src/main/res/drawable-hdpi/mt_refreshing03.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/liaoinstan/SpringView/0a24d3e9ddc5ca4fa35e1ac26e6db448aacc1a18/demo/src/main/res/drawable-hdpi/mt_refreshing03.png
--------------------------------------------------------------------------------
/demo/src/main/res/drawable-hdpi/mt_refreshing04.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/liaoinstan/SpringView/0a24d3e9ddc5ca4fa35e1ac26e6db448aacc1a18/demo/src/main/res/drawable-hdpi/mt_refreshing04.png
--------------------------------------------------------------------------------
/demo/src/main/res/drawable-hdpi/mt_refreshing05.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/liaoinstan/SpringView/0a24d3e9ddc5ca4fa35e1ac26e6db448aacc1a18/demo/src/main/res/drawable-hdpi/mt_refreshing05.png
--------------------------------------------------------------------------------
/demo/src/main/res/drawable-hdpi/mt_refreshing06.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/liaoinstan/SpringView/0a24d3e9ddc5ca4fa35e1ac26e6db448aacc1a18/demo/src/main/res/drawable-hdpi/mt_refreshing06.png
--------------------------------------------------------------------------------
/demo/src/main/res/drawable-hdpi/qqbk.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/liaoinstan/SpringView/0a24d3e9ddc5ca4fa35e1ac26e6db448aacc1a18/demo/src/main/res/drawable-hdpi/qqbk.png
--------------------------------------------------------------------------------
/demo/src/main/res/drawable-xxhdpi/adver.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/liaoinstan/SpringView/0a24d3e9ddc5ca4fa35e1ac26e6db448aacc1a18/demo/src/main/res/drawable-xxhdpi/adver.jpg
--------------------------------------------------------------------------------
/demo/src/main/res/drawable-xxhdpi/wx_program1.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/liaoinstan/SpringView/0a24d3e9ddc5ca4fa35e1ac26e6db448aacc1a18/demo/src/main/res/drawable-xxhdpi/wx_program1.png
--------------------------------------------------------------------------------
/demo/src/main/res/drawable-xxhdpi/wx_program2.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/liaoinstan/SpringView/0a24d3e9ddc5ca4fa35e1ac26e6db448aacc1a18/demo/src/main/res/drawable-xxhdpi/wx_program2.png
--------------------------------------------------------------------------------
/demo/src/main/res/drawable-xxhdpi/wx_program3.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/liaoinstan/SpringView/0a24d3e9ddc5ca4fa35e1ac26e6db448aacc1a18/demo/src/main/res/drawable-xxhdpi/wx_program3.png
--------------------------------------------------------------------------------
/demo/src/main/res/drawable-xxhdpi/wx_program4.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/liaoinstan/SpringView/0a24d3e9ddc5ca4fa35e1ac26e6db448aacc1a18/demo/src/main/res/drawable-xxhdpi/wx_program4.png
--------------------------------------------------------------------------------
/demo/src/main/res/drawable-xxhdpi/wx_program5.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/liaoinstan/SpringView/0a24d3e9ddc5ca4fa35e1ac26e6db448aacc1a18/demo/src/main/res/drawable-xxhdpi/wx_program5.png
--------------------------------------------------------------------------------
/demo/src/main/res/drawable/ic_dashboard_black_24dp.xml:
--------------------------------------------------------------------------------
1 |
6 |
9 |
10 |
--------------------------------------------------------------------------------
/demo/src/main/res/drawable/ic_home_black_24dp.xml:
--------------------------------------------------------------------------------
1 |
6 |
9 |
10 |
--------------------------------------------------------------------------------
/demo/src/main/res/drawable/ic_notifications_black_24dp.xml:
--------------------------------------------------------------------------------
1 |
6 |
9 |
10 |
--------------------------------------------------------------------------------
/demo/src/main/res/drawable/view_post_comment_bg.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
7 |
--------------------------------------------------------------------------------
/demo/src/main/res/layout/activity_demo12.xml:
--------------------------------------------------------------------------------
1 |
2 |
9 |
10 |
14 |
15 |
18 |
19 |
25 |
26 |
27 |
28 |
29 |
30 |
34 |
35 |
36 |
45 |
46 |
52 |
53 |
54 |
55 |
56 |
57 |
58 |
67 |
68 |
69 |
--------------------------------------------------------------------------------
/demo/src/main/res/layout/activity_demo13.xml:
--------------------------------------------------------------------------------
1 |
2 |
9 |
10 |
14 |
15 |
23 |
24 |
25 |
26 |
30 |
31 |
38 |
39 |
45 |
46 |
47 |
48 |
49 |
50 |
51 |
--------------------------------------------------------------------------------
/demo/src/main/res/layout/activity_demo2.xml:
--------------------------------------------------------------------------------
1 |
2 |
9 |
10 |
14 |
15 |
23 |
24 |
25 |
26 |
30 |
31 |
36 |
37 |
43 |
44 |
45 |
46 |
53 |
54 |
60 |
61 |
67 |
68 |
69 |
70 |
71 |
72 |
--------------------------------------------------------------------------------
/demo/src/main/res/layout/activity_demo3.xml:
--------------------------------------------------------------------------------
1 |
2 |
9 |
10 |
14 |
15 |
23 |
24 |
25 |
26 |
30 |
31 |
36 |
37 |
43 |
44 |
45 |
46 |
53 |
54 |
60 |
61 |
67 |
68 |
69 |
70 |
71 |
72 |
--------------------------------------------------------------------------------
/demo/src/main/res/layout/activity_demo4.xml:
--------------------------------------------------------------------------------
1 |
2 |
9 |
10 |
14 |
15 |
22 |
23 |
24 |
25 |
29 |
30 |
37 |
38 |
42 |
43 |
44 |
45 |
56 |
57 |
58 |
59 |
--------------------------------------------------------------------------------
/demo/src/main/res/layout/activity_demo8.xml:
--------------------------------------------------------------------------------
1 |
2 |
9 |
10 |
14 |
15 |
22 |
23 |
24 |
25 |
26 |
31 |
32 |
37 |
38 |
43 |
44 |
45 |
46 |
47 |
48 |
49 |
--------------------------------------------------------------------------------
/demo/src/main/res/layout/activity_demo9.xml:
--------------------------------------------------------------------------------
1 |
2 |
8 |
9 |
14 |
15 |
23 |
24 |
30 |
31 |
38 |
39 |
40 |
41 |
42 |
43 |
49 |
50 |
59 |
60 |
61 |
62 |
67 |
68 |
69 |
70 |
71 |
--------------------------------------------------------------------------------
/demo/src/main/res/layout/content_demo12.xml:
--------------------------------------------------------------------------------
1 |
2 |
6 |
7 |
11 |
12 |
21 |
22 |
26 |
27 |
35 |
36 |
43 |
44 |
48 |
49 |
53 |
54 |
58 |
59 |
63 |
64 |
68 |
69 |
73 |
74 |
75 |
--------------------------------------------------------------------------------
/demo/src/main/res/layout/footer.xml:
--------------------------------------------------------------------------------
1 |
6 |
7 |
15 |
16 |
23 |
24 |
25 |
--------------------------------------------------------------------------------
/demo/src/main/res/layout/fragment_demo9_note.xml:
--------------------------------------------------------------------------------
1 |
2 |
6 |
7 |
10 |
11 |
15 |
16 |
24 |
25 |
33 |
34 |
38 |
39 |
43 |
44 |
48 |
49 |
53 |
54 |
58 |
59 |
63 |
64 |
65 |
66 |
--------------------------------------------------------------------------------
/demo/src/main/res/layout/fragment_demo9_recyclerview.xml:
--------------------------------------------------------------------------------
1 |
2 |
6 |
7 |
11 |
12 |
--------------------------------------------------------------------------------
/demo/src/main/res/layout/fragment_demo9_scrollview.xml:
--------------------------------------------------------------------------------
1 |
2 |
6 |
7 |
10 |
11 |
15 |
16 |
24 |
25 |
33 |
34 |
38 |
39 |
43 |
44 |
48 |
49 |
53 |
54 |
58 |
59 |
63 |
64 |
65 |
66 |
67 |
--------------------------------------------------------------------------------
/demo/src/main/res/layout/header.xml:
--------------------------------------------------------------------------------
1 |
6 |
7 |
15 |
16 |
23 |
24 |
--------------------------------------------------------------------------------
/demo/src/main/res/layout/header_qq.xml:
--------------------------------------------------------------------------------
1 |
6 |
7 |
18 |
19 |
28 |
29 |
--------------------------------------------------------------------------------
/demo/src/main/res/layout/header_warning.xml:
--------------------------------------------------------------------------------
1 |
6 |
7 |
17 |
18 |
--------------------------------------------------------------------------------
/demo/src/main/res/layout/header_web.xml:
--------------------------------------------------------------------------------
1 |
5 |
6 |
12 |
13 |
22 |
23 |
33 |
34 |
35 |
--------------------------------------------------------------------------------
/demo/src/main/res/layout/item.xml:
--------------------------------------------------------------------------------
1 |
2 |
10 |
11 |
12 |
--------------------------------------------------------------------------------
/demo/src/main/res/layout/lay_test.xml:
--------------------------------------------------------------------------------
1 |
2 |
9 |
10 |
14 |
15 |
16 |
--------------------------------------------------------------------------------
/demo/src/main/res/menu/bottom_nav_menu.xml:
--------------------------------------------------------------------------------
1 |
2 |
20 |
--------------------------------------------------------------------------------
/demo/src/main/res/mipmap-hdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/liaoinstan/SpringView/0a24d3e9ddc5ca4fa35e1ac26e6db448aacc1a18/demo/src/main/res/mipmap-hdpi/ic_launcher.png
--------------------------------------------------------------------------------
/demo/src/main/res/mipmap-mdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/liaoinstan/SpringView/0a24d3e9ddc5ca4fa35e1ac26e6db448aacc1a18/demo/src/main/res/mipmap-mdpi/ic_launcher.png
--------------------------------------------------------------------------------
/demo/src/main/res/mipmap-xhdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/liaoinstan/SpringView/0a24d3e9ddc5ca4fa35e1ac26e6db448aacc1a18/demo/src/main/res/mipmap-xhdpi/ic_launcher.png
--------------------------------------------------------------------------------
/demo/src/main/res/mipmap-xxhdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/liaoinstan/SpringView/0a24d3e9ddc5ca4fa35e1ac26e6db448aacc1a18/demo/src/main/res/mipmap-xxhdpi/ic_launcher.png
--------------------------------------------------------------------------------
/demo/src/main/res/mipmap-xxxhdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/liaoinstan/SpringView/0a24d3e9ddc5ca4fa35e1ac26e6db448aacc1a18/demo/src/main/res/mipmap-xxxhdpi/ic_launcher.png
--------------------------------------------------------------------------------
/demo/src/main/res/values-v21/styles.xml:
--------------------------------------------------------------------------------
1 | >
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
--------------------------------------------------------------------------------
/demo/src/main/res/values-w820dp/dimens.xml:
--------------------------------------------------------------------------------
1 |
2 |
5 | 64dp
6 |
7 |
--------------------------------------------------------------------------------
/demo/src/main/res/values/colors.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 | #3F51B5
4 | #303F9F
5 | #FF4081
6 |
--------------------------------------------------------------------------------
/demo/src/main/res/values/dimens.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 | 16dp
4 | 16dp
5 | 16dp
6 |
7 |
--------------------------------------------------------------------------------
/demo/src/main/res/values/strings.xml:
--------------------------------------------------------------------------------
1 |
2 | DemoSpring
3 |
4 |
--------------------------------------------------------------------------------
/demo/src/main/res/values/styles.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
10 |
11 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
24 |
25 |
36 |
37 |
38 |
--------------------------------------------------------------------------------
/gradle.properties:
--------------------------------------------------------------------------------
1 | # Project-wide Gradle settings.
2 |
3 | # IDE (e.g. Android Studio) users:
4 | # Gradle settings configured through the IDE *will override*
5 | # any settings specified in this file.
6 |
7 | # For more details on how to configure your build environment visit
8 | # http://www.gradle.org/docs/current/userguide/build_environment.html
9 |
10 | # Specifies the JVM arguments used for the daemon process.
11 | # The setting is particularly useful for tweaking memory settings.
12 | # Default value: -Xmx10248m -XX:MaxPermSize=256m
13 | # org.gradle.jvmargs=-Xmx2048m -XX:MaxPermSize=512m -XX:+HeapDumpOnOutOfMemoryError -Dfile.encoding=UTF-8
14 |
15 | # When configured, Gradle will run in incubating parallel mode.
16 | # This option should only be used with decoupled projects. More details, visit
17 | # http://www.gradle.org/docs/current/userguide/multi_project_builds.html#sec:decoupled_projects
18 | # org.gradle.parallel=true
19 | android.enableJetifier=true
20 | android.useAndroidX=true
--------------------------------------------------------------------------------
/gradle/wrapper/gradle-wrapper.jar:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/liaoinstan/SpringView/0a24d3e9ddc5ca4fa35e1ac26e6db448aacc1a18/gradle/wrapper/gradle-wrapper.jar
--------------------------------------------------------------------------------
/gradle/wrapper/gradle-wrapper.properties:
--------------------------------------------------------------------------------
1 | #Mon Apr 29 14:42:09 CST 2019
2 | distributionBase=GRADLE_USER_HOME
3 | distributionPath=wrapper/dists
4 | zipStoreBase=GRADLE_USER_HOME
5 | zipStorePath=wrapper/dists
6 | distributionUrl=https\://services.gradle.org/distributions/gradle-5.4.1-all.zip
7 |
--------------------------------------------------------------------------------
/gradlew.bat:
--------------------------------------------------------------------------------
1 | @if "%DEBUG%" == "" @echo off
2 | @rem ##########################################################################
3 | @rem
4 | @rem Gradle startup script for Windows
5 | @rem
6 | @rem ##########################################################################
7 |
8 | @rem Set local scope for the variables with windows NT shell
9 | if "%OS%"=="Windows_NT" setlocal
10 |
11 | @rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
12 | set DEFAULT_JVM_OPTS=
13 |
14 | set DIRNAME=%~dp0
15 | if "%DIRNAME%" == "" set DIRNAME=.
16 | set APP_BASE_NAME=%~n0
17 | set APP_HOME=%DIRNAME%
18 |
19 | @rem Find java.exe
20 | if defined JAVA_HOME goto findJavaFromJavaHome
21 |
22 | set JAVA_EXE=java.exe
23 | %JAVA_EXE% -version >NUL 2>&1
24 | if "%ERRORLEVEL%" == "0" goto init
25 |
26 | echo.
27 | echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
28 | echo.
29 | echo Please set the JAVA_HOME variable in your environment to match the
30 | echo location of your Java installation.
31 |
32 | goto fail
33 |
34 | :findJavaFromJavaHome
35 | set JAVA_HOME=%JAVA_HOME:"=%
36 | set JAVA_EXE=%JAVA_HOME%/bin/java.exe
37 |
38 | if exist "%JAVA_EXE%" goto init
39 |
40 | echo.
41 | echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME%
42 | echo.
43 | echo Please set the JAVA_HOME variable in your environment to match the
44 | echo location of your Java installation.
45 |
46 | goto fail
47 |
48 | :init
49 | @rem Get command-line arguments, handling Windowz variants
50 |
51 | if not "%OS%" == "Windows_NT" goto win9xME_args
52 | if "%@eval[2+2]" == "4" goto 4NT_args
53 |
54 | :win9xME_args
55 | @rem Slurp the command line arguments.
56 | set CMD_LINE_ARGS=
57 | set _SKIP=2
58 |
59 | :win9xME_args_slurp
60 | if "x%~1" == "x" goto execute
61 |
62 | set CMD_LINE_ARGS=%*
63 | goto execute
64 |
65 | :4NT_args
66 | @rem Get arguments from the 4NT Shell from JP Software
67 | set CMD_LINE_ARGS=%$
68 |
69 | :execute
70 | @rem Setup the command line
71 |
72 | set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar
73 |
74 | @rem Execute Gradle
75 | "%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %CMD_LINE_ARGS%
76 |
77 | :end
78 | @rem End local scope for the variables with windows NT shell
79 | if "%ERRORLEVEL%"=="0" goto mainEnd
80 |
81 | :fail
82 | rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of
83 | rem the _cmd.exe /c_ return code!
84 | if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1
85 | exit /b 1
86 |
87 | :mainEnd
88 | if "%OS%"=="Windows_NT" endlocal
89 |
90 | :omega
91 |
--------------------------------------------------------------------------------
/header_acfun/.gitignore:
--------------------------------------------------------------------------------
1 | /build
2 |
--------------------------------------------------------------------------------
/header_acfun/build.gradle:
--------------------------------------------------------------------------------
1 | apply plugin: 'com.android.library'
2 | apply plugin: 'com.novoda.bintray-release'
3 |
4 | android {
5 | compileSdkVersion rootProject.ext.compileSdkVersion
6 |
7 | defaultConfig {
8 | minSdkVersion rootProject.ext.minSdkVersion
9 | targetSdkVersion rootProject.ext.targetSdkVersion
10 | versionCode 1
11 | versionName "1.0"
12 | }
13 |
14 | buildTypes {
15 | release {
16 | minifyEnabled false
17 | proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
18 | }
19 | }
20 |
21 | }
22 |
23 | dependencies {
24 | implementation fileTree(dir: 'libs', include: ['*.jar'])
25 | implementation "androidx.appcompat:appcompat:$supportLibraryVersion"
26 | implementation project(':library')
27 | // implementation 'com.liaoinstan.springview:library:1.7.0'
28 | }
29 |
30 | publish {
31 | artifactId = 'AcfunHeader' // artifactId
32 | uploadName = 'SpringView:AcfunHeader' // 展示名字
33 | publishVersion = '1.7.0' // 版本
34 | desc = rootProject.ext.desc
35 | userOrg = rootProject.userOrg
36 | groupId = rootProject.groupId
37 | website = rootProject.website
38 | licences = rootProject.licences
39 | autoPublish = false
40 | dryRun = true
41 | }
--------------------------------------------------------------------------------
/header_acfun/proguard-rules.pro:
--------------------------------------------------------------------------------
1 | # Add project specific ProGuard rules here.
2 | # You can control the set of applied configuration files using the
3 | # proguardFiles setting in build.gradle.
4 | #
5 | # For more details, see
6 | # http://developer.android.com/guide/developing/tools/proguard.html
7 |
8 | # If your project uses WebView with JS, uncomment the following
9 | # and specify the fully qualified class name to the JavaScript interface
10 | # class:
11 | #-keepclassmembers class fqcn.of.javascript.interface.for.webview {
12 | # public *;
13 | #}
14 |
15 | # Uncomment this to preserve the line number information for
16 | # debugging stack traces.
17 | #-keepattributes SourceFile,LineNumberTable
18 |
19 | # If you keep the line number information, uncomment this to
20 | # hide the original source file name.
21 | #-renamesourcefileattribute SourceFile
22 |
--------------------------------------------------------------------------------
/header_acfun/src/main/AndroidManifest.xml:
--------------------------------------------------------------------------------
1 |
3 |
--------------------------------------------------------------------------------
/header_acfun/src/main/java/com/liaoinstan/springview/acfunheader/AcFunFooter.java:
--------------------------------------------------------------------------------
1 | package com.liaoinstan.springview.acfunheader;
2 |
3 | import android.content.Context;
4 | import android.view.LayoutInflater;
5 | import android.view.View;
6 | import android.view.ViewGroup;
7 | import android.widget.ImageView;
8 |
9 | import com.liaoinstan.springview.container.BaseFooter;
10 | import com.liaoinstan.springview.container.BaseSimpleFooter;
11 | import com.liaoinstan.springview.utils.DensityUtil;
12 | import com.liaoinstan.springview.widget.SpringView;
13 |
14 | /**
15 | * Created by Administrator on 2016/3/23.
16 | */
17 | public class AcFunFooter extends BaseSimpleFooter {
18 | private Context context;
19 | private int imgSrc;
20 | private ImageView acfun_footer_img;
21 |
22 | public AcFunFooter(Context context, int imgSrc) {
23 | setType(SpringView.Type.OVERLAP);
24 | setMovePara(2.0f);
25 | this.context = context;
26 | this.imgSrc = imgSrc;
27 | }
28 |
29 | @Override
30 | public View getView(LayoutInflater inflater, ViewGroup viewGroup) {
31 | View view = inflater.inflate(R.layout.acfun_footer, viewGroup, false);
32 | acfun_footer_img = view.findViewById(R.id.acfun_footer_img);
33 | acfun_footer_img.setImageResource(imgSrc);
34 | return view;
35 | }
36 |
37 | @Override
38 | public int getDragLimitHeight(View rootView) {
39 | return DensityUtil.dp2px(70);
40 | }
41 |
42 | @Override
43 | public int getDragMaxHeight(View rootView) {
44 | return rootView.getMeasuredHeight();
45 | }
46 |
47 | @Override
48 | public int getDragSpringHeight(View rootView) {
49 | return DensityUtil.dp2px(70);
50 | }
51 |
52 | @Override
53 | public void onPreDrag(View rootView) {
54 |
55 | }
56 |
57 | @Override
58 | public void onDropAnim(View rootView, int dy) {
59 |
60 | }
61 |
62 | @Override
63 | public void onLimitDes(View rootView, boolean upORdown) {
64 |
65 | }
66 |
67 | @Override
68 | public void onStartAnim() {
69 |
70 | }
71 |
72 | @Override
73 | public void onFinishAnim() {
74 |
75 | }
76 | }
77 |
--------------------------------------------------------------------------------
/header_acfun/src/main/java/com/liaoinstan/springview/acfunheader/AcFunHeader.java:
--------------------------------------------------------------------------------
1 | package com.liaoinstan.springview.acfunheader;
2 |
3 | import android.content.Context;
4 | import android.view.LayoutInflater;
5 | import android.view.View;
6 | import android.view.ViewGroup;
7 | import android.widget.ImageView;
8 |
9 | import com.liaoinstan.springview.container.BaseSimpleHeader;
10 | import com.liaoinstan.springview.utils.DensityUtil;
11 | import com.liaoinstan.springview.widget.SpringView;
12 |
13 | /**
14 | * Created by liaoinstan on 2016/3/23.
15 | */
16 | public class AcFunHeader extends BaseSimpleHeader {
17 | private Context context;
18 | private int imgSrc;
19 | private ImageView acfun_header_img;
20 |
21 | public AcFunHeader(Context context, int imgSrc) {
22 | setType(SpringView.Type.OVERLAP);
23 | setMovePara(2.0f);
24 | this.context = context;
25 | this.imgSrc = imgSrc;
26 | }
27 |
28 | @Override
29 | public View getView(LayoutInflater inflater, ViewGroup viewGroup) {
30 | View view = inflater.inflate(R.layout.acfun_header, viewGroup, false);
31 | acfun_header_img = view.findViewById(R.id.acfun_header_img);
32 | acfun_header_img.setImageResource(imgSrc);
33 | return view;
34 | }
35 |
36 | @Override
37 | public int getDragLimitHeight(View rootView) {
38 | return DensityUtil.dp2px(70);
39 | }
40 |
41 | @Override
42 | public int getDragMaxHeight(View rootView) {
43 | return rootView.getMeasuredHeight();
44 | }
45 |
46 | @Override
47 | public int getDragSpringHeight(View rootView) {
48 | return DensityUtil.dp2px(70);
49 | }
50 |
51 | @Override
52 | public void onPreDrag(View rootView) {
53 |
54 | }
55 |
56 | @Override
57 | public void onDropAnim(View rootView, int dy) {
58 |
59 | }
60 |
61 | @Override
62 | public void onLimitDes(View rootView, boolean upORdown) {
63 |
64 | }
65 |
66 | @Override
67 | public void onStartAnim() {
68 |
69 | }
70 |
71 | @Override
72 | public void onFinishAnim() {
73 |
74 | }
75 | }
76 |
--------------------------------------------------------------------------------
/header_acfun/src/main/res/layout/acfun_footer.xml:
--------------------------------------------------------------------------------
1 |
4 |
5 |
14 |
15 |
--------------------------------------------------------------------------------
/header_acfun/src/main/res/layout/acfun_header.xml:
--------------------------------------------------------------------------------
1 |
4 |
5 |
14 |
15 |
--------------------------------------------------------------------------------
/header_acfun/src/main/res/values/strings.xml:
--------------------------------------------------------------------------------
1 |
2 | acfunheader
3 |
4 |
--------------------------------------------------------------------------------
/header_ali/.gitignore:
--------------------------------------------------------------------------------
1 | /build
2 |
--------------------------------------------------------------------------------
/header_ali/build.gradle:
--------------------------------------------------------------------------------
1 | apply plugin: 'com.android.library'
2 | apply plugin: 'com.novoda.bintray-release'
3 |
4 | android {
5 | compileSdkVersion rootProject.ext.compileSdkVersion
6 |
7 | defaultConfig {
8 | minSdkVersion rootProject.ext.minSdkVersion
9 | targetSdkVersion rootProject.ext.targetSdkVersion
10 | versionCode 1
11 | versionName "1.0"
12 | }
13 |
14 | buildTypes {
15 | release {
16 | minifyEnabled false
17 | proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
18 | }
19 | }
20 |
21 | }
22 |
23 | dependencies {
24 | implementation fileTree(dir: 'libs', include: ['*.jar'])
25 | implementation "androidx.appcompat:appcompat:$supportLibraryVersion"
26 | implementation "com.google.android.material:material:$materialLibraryVersion"
27 | implementation project(':library')
28 | // implementation 'com.liaoinstan.springview:library:1.7.0'
29 | }
30 |
31 | publish {
32 | artifactId = 'AliHeader' // artifactId
33 | uploadName = 'SpringView:AliHeader' // 展示名字
34 | publishVersion = '1.7.0' // 版本
35 | desc = rootProject.ext.desc
36 | userOrg = rootProject.userOrg
37 | groupId = rootProject.groupId
38 | website = rootProject.website
39 | licences = rootProject.licences
40 | autoPublish = false
41 | dryRun = true
42 | }
--------------------------------------------------------------------------------
/header_ali/proguard-rules.pro:
--------------------------------------------------------------------------------
1 | # Add project specific ProGuard rules here.
2 | # You can control the set of applied configuration files using the
3 | # proguardFiles setting in build.gradle.
4 | #
5 | # For more details, see
6 | # http://developer.android.com/guide/developing/tools/proguard.html
7 |
8 | # If your project uses WebView with JS, uncomment the following
9 | # and specify the fully qualified class name to the JavaScript interface
10 | # class:
11 | #-keepclassmembers class fqcn.of.javascript.interface.for.webview {
12 | # public *;
13 | #}
14 |
15 | # Uncomment this to preserve the line number information for
16 | # debugging stack traces.
17 | #-keepattributes SourceFile,LineNumberTable
18 |
19 | # If you keep the line number information, uncomment this to
20 | # hide the original source file name.
21 | #-renamesourcefileattribute SourceFile
22 |
--------------------------------------------------------------------------------
/header_ali/src/main/AndroidManifest.xml:
--------------------------------------------------------------------------------
1 |
3 |
--------------------------------------------------------------------------------
/header_ali/src/main/res/layout/ali_footer.xml:
--------------------------------------------------------------------------------
1 |
5 |
6 |
11 |
12 |
20 |
21 |
30 |
31 |
32 |
41 |
42 |
43 |
50 |
--------------------------------------------------------------------------------
/header_ali/src/main/res/layout/ali_header.xml:
--------------------------------------------------------------------------------
1 |
6 |
7 |
16 |
17 |
22 |
23 |
31 |
32 |
40 |
41 |
42 |
51 |
52 |
--------------------------------------------------------------------------------
/header_ali/src/main/res/values/strings.xml:
--------------------------------------------------------------------------------
1 |
2 | aliheader
3 |
4 |
--------------------------------------------------------------------------------
/header_du/.gitignore:
--------------------------------------------------------------------------------
1 | /build
2 |
--------------------------------------------------------------------------------
/header_du/build.gradle:
--------------------------------------------------------------------------------
1 | apply plugin: 'com.android.library'
2 | apply plugin: 'com.novoda.bintray-release'
3 |
4 | android {
5 | compileSdkVersion rootProject.ext.compileSdkVersion
6 |
7 | defaultConfig {
8 | minSdkVersion rootProject.ext.minSdkVersion
9 | targetSdkVersion rootProject.ext.targetSdkVersion
10 | versionCode 1
11 | versionName "1.0"
12 | }
13 |
14 | buildTypes {
15 | release {
16 | minifyEnabled false
17 | proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
18 | }
19 | }
20 |
21 | }
22 |
23 | dependencies {
24 | implementation fileTree(dir: 'libs', include: ['*.jar'])
25 | implementation "androidx.appcompat:appcompat:$supportLibraryVersion"
26 | implementation "com.google.android.material:material:$materialLibraryVersion"
27 | implementation project(':library')
28 | // implementation 'com.liaoinstan.springview:library:1.7.0'
29 | }
30 |
31 | publish {
32 | artifactId = 'DuHeader' // artifactId
33 | uploadName = 'SpringView:DuHeader' // 展示名字
34 | publishVersion = '1.7.0' // 版本
35 | desc = rootProject.ext.desc
36 | userOrg = rootProject.userOrg
37 | groupId = rootProject.groupId
38 | website = rootProject.website
39 | licences = rootProject.licences
40 | autoPublish = false
41 | dryRun = true
42 | }
43 |
--------------------------------------------------------------------------------
/header_du/consumer-rules.pro:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/liaoinstan/SpringView/0a24d3e9ddc5ca4fa35e1ac26e6db448aacc1a18/header_du/consumer-rules.pro
--------------------------------------------------------------------------------
/header_du/proguard-rules.pro:
--------------------------------------------------------------------------------
1 | # Add project specific ProGuard rules here.
2 | # You can control the set of applied configuration files using the
3 | # proguardFiles setting in build.gradle.
4 | #
5 | # For more details, see
6 | # http://developer.android.com/guide/developing/tools/proguard.html
7 |
8 | # If your project uses WebView with JS, uncomment the following
9 | # and specify the fully qualified class name to the JavaScript interface
10 | # class:
11 | #-keepclassmembers class fqcn.of.javascript.interface.for.webview {
12 | # public *;
13 | #}
14 |
15 | # Uncomment this to preserve the line number information for
16 | # debugging stack traces.
17 | #-keepattributes SourceFile,LineNumberTable
18 |
19 | # If you keep the line number information, uncomment this to
20 | # hide the original source file name.
21 | #-renamesourcefileattribute SourceFile
22 |
--------------------------------------------------------------------------------
/header_du/src/main/AndroidManifest.xml:
--------------------------------------------------------------------------------
1 |
3 |
--------------------------------------------------------------------------------
/header_du/src/main/java/com/liaoinstan/springview/duheader/DuHeader.java:
--------------------------------------------------------------------------------
1 | package com.liaoinstan.springview.duheader;
2 |
3 | import android.view.LayoutInflater;
4 | import android.view.View;
5 | import android.view.ViewGroup;
6 |
7 | import com.liaoinstan.springview.container.BaseSimpleHeader;
8 |
9 | public class DuHeader extends BaseSimpleHeader {
10 |
11 | private DuView duView;
12 |
13 | @Override
14 | public View getView(LayoutInflater inflater, ViewGroup viewGroup) {
15 | View rootView = inflater.inflate(R.layout.du_header, viewGroup, false);
16 | duView = rootView.findViewById(R.id.du_view);
17 | return rootView;
18 | }
19 |
20 | @Override
21 | public void onDropAnim(View rootView, int dy) {
22 | int dragLimitHeight = getDragLimitHeight(rootView);
23 | float lv = 1 - (float) (dy) / (dragLimitHeight); //1-0
24 | duView.setProgress(lv * 100);
25 | //向下偏移半个view高度,平滑拖拽
26 | float height = duView.getMeasuredHeight() * 0.5f;
27 | float tranY = height * lv;
28 | duView.setTranslationY(tranY);
29 | }
30 |
31 | @Override
32 | public int getDragLimitHeight(View rootView) {
33 | return rootView.getMeasuredHeight();
34 | }
35 |
36 | @Override
37 | public void onLimitDes(View rootView, boolean upORdown) {
38 | }
39 |
40 | @Override
41 | public void onStartAnim() {
42 | duView.startAnim();
43 | }
44 |
45 | @Override
46 | public void onFinishAnim() {
47 | duView.resetAnim();
48 | }
49 | }
50 |
--------------------------------------------------------------------------------
/header_du/src/main/res/layout/du_header.xml:
--------------------------------------------------------------------------------
1 |
5 |
6 |
12 |
--------------------------------------------------------------------------------
/header_du/src/main/res/layout/view_top_bar.xml:
--------------------------------------------------------------------------------
1 |
10 |
--------------------------------------------------------------------------------
/header_du/src/main/res/values/strings.xml:
--------------------------------------------------------------------------------
1 |
2 | header_du
3 |
4 |
--------------------------------------------------------------------------------
/header_meituan/.gitignore:
--------------------------------------------------------------------------------
1 | /build
2 |
--------------------------------------------------------------------------------
/header_meituan/build.gradle:
--------------------------------------------------------------------------------
1 | apply plugin: 'com.android.library'
2 | apply plugin: 'com.novoda.bintray-release'
3 |
4 | android {
5 | compileSdkVersion rootProject.ext.compileSdkVersion
6 |
7 | defaultConfig {
8 | minSdkVersion rootProject.ext.minSdkVersion
9 | targetSdkVersion rootProject.ext.targetSdkVersion
10 | versionCode 1
11 | versionName "1.0"
12 | }
13 |
14 | buildTypes {
15 | release {
16 | minifyEnabled false
17 | proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
18 | }
19 | }
20 | }
21 |
22 | dependencies {
23 | implementation fileTree(dir: 'libs', include: ['*.jar'])
24 | implementation "androidx.appcompat:appcompat:$supportLibraryVersion"
25 | implementation "com.google.android.material:material:$materialLibraryVersion"
26 | implementation project(':library')
27 | // implementation 'com.liaoinstan.springview:library:1.7.0'
28 | }
29 |
30 | publish {
31 | artifactId = 'MeituanHeader' // artifactId
32 | uploadName = 'SpringView:MeituanHeader' // 展示名字
33 | publishVersion = '1.7.0' // 版本
34 | desc = rootProject.ext.desc
35 | userOrg = rootProject.userOrg
36 | groupId = rootProject.groupId
37 | website = rootProject.website
38 | licences = rootProject.licences
39 | autoPublish = false
40 | dryRun = true
41 | }
42 |
--------------------------------------------------------------------------------
/header_meituan/proguard-rules.pro:
--------------------------------------------------------------------------------
1 | # Add project specific ProGuard rules here.
2 | # You can control the set of applied configuration files using the
3 | # proguardFiles setting in build.gradle.
4 | #
5 | # For more details, see
6 | # http://developer.android.com/guide/developing/tools/proguard.html
7 |
8 | # If your project uses WebView with JS, uncomment the following
9 | # and specify the fully qualified class name to the JavaScript interface
10 | # class:
11 | #-keepclassmembers class fqcn.of.javascript.interface.for.webview {
12 | # public *;
13 | #}
14 |
15 | # Uncomment this to preserve the line number information for
16 | # debugging stack traces.
17 | #-keepattributes SourceFile,LineNumberTable
18 |
19 | # If you keep the line number information, uncomment this to
20 | # hide the original source file name.
21 | #-renamesourcefileattribute SourceFile
22 |
--------------------------------------------------------------------------------
/header_meituan/src/main/AndroidManifest.xml:
--------------------------------------------------------------------------------
1 |
3 |
--------------------------------------------------------------------------------
/header_meituan/src/main/java/com/liaoinstan/springview/meituanheader/MeituanFooter.java:
--------------------------------------------------------------------------------
1 | package com.liaoinstan.springview.meituanheader;
2 |
3 | import android.content.Context;
4 | import android.graphics.drawable.AnimationDrawable;
5 | import android.view.LayoutInflater;
6 | import android.view.View;
7 | import android.view.ViewGroup;
8 | import android.widget.ImageView;
9 |
10 | import androidx.core.content.ContextCompat;
11 |
12 | import com.liaoinstan.springview.container.BaseSimpleFooter;
13 | import com.liaoinstan.springview.widget.SpringView;
14 |
15 | /**
16 | * Created by Administrator on 2016/3/21.
17 | */
18 | public class MeituanFooter extends BaseSimpleFooter {
19 |
20 | private AnimationDrawable animationLoading;
21 |
22 | private Context context;
23 | private ImageView footer_img;
24 | private int[] loadingAnimSrcs = new int[]{R.drawable.mt_loading01, R.drawable.mt_loading02};
25 |
26 | public MeituanFooter(Context context) {
27 | this(context, null);
28 | }
29 |
30 | public MeituanFooter(Context context, int[] loadingAnimSrcs) {
31 | setType(SpringView.Type.FOLLOW);
32 | setMovePara(2.0f);
33 | this.context = context;
34 | if (loadingAnimSrcs != null) this.loadingAnimSrcs = loadingAnimSrcs;
35 | animationLoading = new AnimationDrawable();
36 | for (int src : this.loadingAnimSrcs) {
37 | animationLoading.addFrame(ContextCompat.getDrawable(context, src), 150);
38 | animationLoading.setOneShot(false);
39 | }
40 | }
41 |
42 | @Override
43 | public View getView(LayoutInflater inflater, ViewGroup viewGroup) {
44 | View view = inflater.inflate(R.layout.meituan_footer, viewGroup, false);
45 | footer_img = view.findViewById(R.id.meituan_footer_img);
46 | if (animationLoading != null) {
47 | footer_img.setImageDrawable(animationLoading);
48 | }
49 | return view;
50 | }
51 |
52 | @Override
53 | public void onPreDrag(View rootView) {
54 | animationLoading.stop();
55 | if (animationLoading != null && animationLoading.getNumberOfFrames() > 0) {
56 | footer_img.setImageDrawable(animationLoading.getFrame(0));
57 | }
58 | }
59 |
60 | @Override
61 | public void onDropAnim(View rootView, int dy) {
62 | }
63 |
64 | @Override
65 | public void onLimitDes(View rootView, boolean upORdown) {
66 | }
67 |
68 | @Override
69 | public void onStartAnim() {
70 | if (animationLoading != null) {
71 | footer_img.setImageDrawable(animationLoading);
72 | animationLoading.start();
73 | }
74 | }
75 |
76 | @Override
77 | public void onFinishAnim() {
78 | animationLoading.stop();
79 | if (animationLoading != null && animationLoading.getNumberOfFrames() > 0) {
80 | footer_img.setImageDrawable(animationLoading.getFrame(0));
81 | }
82 | }
83 | }
--------------------------------------------------------------------------------
/header_meituan/src/main/res/drawable-hdpi/mt_loading01.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/liaoinstan/SpringView/0a24d3e9ddc5ca4fa35e1ac26e6db448aacc1a18/header_meituan/src/main/res/drawable-hdpi/mt_loading01.png
--------------------------------------------------------------------------------
/header_meituan/src/main/res/drawable-hdpi/mt_loading02.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/liaoinstan/SpringView/0a24d3e9ddc5ca4fa35e1ac26e6db448aacc1a18/header_meituan/src/main/res/drawable-hdpi/mt_loading02.png
--------------------------------------------------------------------------------
/header_meituan/src/main/res/drawable-hdpi/mt_pull.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/liaoinstan/SpringView/0a24d3e9ddc5ca4fa35e1ac26e6db448aacc1a18/header_meituan/src/main/res/drawable-hdpi/mt_pull.png
--------------------------------------------------------------------------------
/header_meituan/src/main/res/drawable-hdpi/mt_pull01.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/liaoinstan/SpringView/0a24d3e9ddc5ca4fa35e1ac26e6db448aacc1a18/header_meituan/src/main/res/drawable-hdpi/mt_pull01.png
--------------------------------------------------------------------------------
/header_meituan/src/main/res/drawable-hdpi/mt_pull02.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/liaoinstan/SpringView/0a24d3e9ddc5ca4fa35e1ac26e6db448aacc1a18/header_meituan/src/main/res/drawable-hdpi/mt_pull02.png
--------------------------------------------------------------------------------
/header_meituan/src/main/res/drawable-hdpi/mt_pull03.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/liaoinstan/SpringView/0a24d3e9ddc5ca4fa35e1ac26e6db448aacc1a18/header_meituan/src/main/res/drawable-hdpi/mt_pull03.png
--------------------------------------------------------------------------------
/header_meituan/src/main/res/drawable-hdpi/mt_pull04.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/liaoinstan/SpringView/0a24d3e9ddc5ca4fa35e1ac26e6db448aacc1a18/header_meituan/src/main/res/drawable-hdpi/mt_pull04.png
--------------------------------------------------------------------------------
/header_meituan/src/main/res/drawable-hdpi/mt_pull05.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/liaoinstan/SpringView/0a24d3e9ddc5ca4fa35e1ac26e6db448aacc1a18/header_meituan/src/main/res/drawable-hdpi/mt_pull05.png
--------------------------------------------------------------------------------
/header_meituan/src/main/res/drawable-hdpi/mt_refreshing01.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/liaoinstan/SpringView/0a24d3e9ddc5ca4fa35e1ac26e6db448aacc1a18/header_meituan/src/main/res/drawable-hdpi/mt_refreshing01.png
--------------------------------------------------------------------------------
/header_meituan/src/main/res/drawable-hdpi/mt_refreshing02.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/liaoinstan/SpringView/0a24d3e9ddc5ca4fa35e1ac26e6db448aacc1a18/header_meituan/src/main/res/drawable-hdpi/mt_refreshing02.png
--------------------------------------------------------------------------------
/header_meituan/src/main/res/drawable-hdpi/mt_refreshing03.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/liaoinstan/SpringView/0a24d3e9ddc5ca4fa35e1ac26e6db448aacc1a18/header_meituan/src/main/res/drawable-hdpi/mt_refreshing03.png
--------------------------------------------------------------------------------
/header_meituan/src/main/res/drawable-hdpi/mt_refreshing04.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/liaoinstan/SpringView/0a24d3e9ddc5ca4fa35e1ac26e6db448aacc1a18/header_meituan/src/main/res/drawable-hdpi/mt_refreshing04.png
--------------------------------------------------------------------------------
/header_meituan/src/main/res/drawable-hdpi/mt_refreshing05.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/liaoinstan/SpringView/0a24d3e9ddc5ca4fa35e1ac26e6db448aacc1a18/header_meituan/src/main/res/drawable-hdpi/mt_refreshing05.png
--------------------------------------------------------------------------------
/header_meituan/src/main/res/drawable-hdpi/mt_refreshing06.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/liaoinstan/SpringView/0a24d3e9ddc5ca4fa35e1ac26e6db448aacc1a18/header_meituan/src/main/res/drawable-hdpi/mt_refreshing06.png
--------------------------------------------------------------------------------
/header_meituan/src/main/res/layout/meituan_footer.xml:
--------------------------------------------------------------------------------
1 |
2 |
6 |
7 |
13 |
14 |
--------------------------------------------------------------------------------
/header_meituan/src/main/res/layout/meituan_header.xml:
--------------------------------------------------------------------------------
1 |
2 |
6 |
7 |
13 |
14 |
--------------------------------------------------------------------------------
/header_meituan/src/main/res/values/strings.xml:
--------------------------------------------------------------------------------
1 |
2 | meituanheader
3 |
4 |
--------------------------------------------------------------------------------
/header_rotation/.gitignore:
--------------------------------------------------------------------------------
1 | /build
2 |
--------------------------------------------------------------------------------
/header_rotation/build.gradle:
--------------------------------------------------------------------------------
1 | apply plugin: 'com.android.library'
2 | apply plugin: 'com.novoda.bintray-release'
3 |
4 | android {
5 | compileSdkVersion rootProject.ext.compileSdkVersion
6 |
7 | defaultConfig {
8 | minSdkVersion rootProject.ext.minSdkVersion
9 | targetSdkVersion rootProject.ext.targetSdkVersion
10 | versionCode 1
11 | versionName "1.0"
12 | }
13 |
14 | buildTypes {
15 | release {
16 | minifyEnabled false
17 | proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
18 | }
19 | }
20 |
21 | }
22 |
23 | dependencies {
24 | implementation fileTree(dir: 'libs', include: ['*.jar'])
25 | implementation "androidx.appcompat:appcompat:$supportLibraryVersion"
26 | implementation "com.google.android.material:material:$materialLibraryVersion"
27 | implementation project(':library')
28 | // implementation 'com.liaoinstan.springview:library:1.7.0'
29 | }
30 |
31 | publish {
32 | artifactId = 'RotationHeader' // artifactId
33 | uploadName = 'SpringView:RotationHeader' // 展示名字
34 | publishVersion = '1.7.0' // 版本
35 | desc = rootProject.ext.desc
36 | userOrg = rootProject.userOrg
37 | groupId = rootProject.groupId
38 | website = rootProject.website
39 | licences = rootProject.licences
40 | autoPublish = false
41 | dryRun = true
42 | }
--------------------------------------------------------------------------------
/header_rotation/proguard-rules.pro:
--------------------------------------------------------------------------------
1 | # Add project specific ProGuard rules here.
2 | # You can control the set of applied configuration files using the
3 | # proguardFiles setting in build.gradle.
4 | #
5 | # For more details, see
6 | # http://developer.android.com/guide/developing/tools/proguard.html
7 |
8 | # If your project uses WebView with JS, uncomment the following
9 | # and specify the fully qualified class name to the JavaScript interface
10 | # class:
11 | #-keepclassmembers class fqcn.of.javascript.interface.for.webview {
12 | # public *;
13 | #}
14 |
15 | # Uncomment this to preserve the line number information for
16 | # debugging stack traces.
17 | #-keepattributes SourceFile,LineNumberTable
18 |
19 | # If you keep the line number information, uncomment this to
20 | # hide the original source file name.
21 | #-renamesourcefileattribute SourceFile
22 |
--------------------------------------------------------------------------------
/header_rotation/src/main/AndroidManifest.xml:
--------------------------------------------------------------------------------
1 |
3 |
--------------------------------------------------------------------------------
/header_rotation/src/main/java/com/liaoinstan/springview/rotationheader/RotationFooter.java:
--------------------------------------------------------------------------------
1 | package com.liaoinstan.springview.rotationheader;
2 |
3 | import android.view.LayoutInflater;
4 | import android.view.View;
5 | import android.view.ViewGroup;
6 | import android.view.animation.Animation;
7 | import android.view.animation.LinearInterpolator;
8 | import android.view.animation.RotateAnimation;
9 | import android.widget.ProgressBar;
10 |
11 | import com.liaoinstan.springview.container.BaseSimpleFooter;
12 | import com.liaoinstan.springview.widget.SpringView;
13 |
14 |
15 | /**
16 | * Created by Administrator on 2016/3/21.
17 | */
18 | public class RotationFooter extends BaseSimpleFooter {
19 |
20 | private RotateAnimation mRotateUpAnim;
21 | private ProgressBar footer_progress;
22 |
23 | //记录拖拽是否超过弹动高度
24 | private boolean hasOverLimitHeight;
25 |
26 | public RotationFooter() {
27 | setType(SpringView.Type.OVERLAP);
28 | setMovePara(2.0f);
29 |
30 | mRotateUpAnim = new RotateAnimation(0.0f, 360.0f, Animation.RELATIVE_TO_SELF, 0.5f, Animation.RELATIVE_TO_SELF, 0.5f);
31 | mRotateUpAnim.setInterpolator(new LinearInterpolator());
32 | mRotateUpAnim.setRepeatCount(Integer.MAX_VALUE);
33 | mRotateUpAnim.setDuration(600);
34 | mRotateUpAnim.setFillAfter(true);
35 | }
36 |
37 | @Override
38 | public View getView(LayoutInflater inflater, ViewGroup viewGroup) {
39 | View view = inflater.inflate(R.layout.rotation_footer, viewGroup, false);
40 | footer_progress = view.findViewById(R.id.rotation_footer_progress);
41 | return view;
42 | }
43 |
44 | @Override
45 | public int getDragLimitHeight(View rootView) {
46 | return rootView.getMeasuredHeight();
47 | }
48 |
49 | @Override
50 | public void onPreDrag(View rootView) {
51 | }
52 |
53 | @Override
54 | public void onDropAnim(View rootView, int dy) {
55 | int dragLimitHeight = getDragLimitHeight(rootView);
56 | if (dy >= dragLimitHeight) hasOverLimitHeight = true;
57 | if (!hasOverLimitHeight) {
58 | float rota = 360 * Math.abs(dy) / rootView.getMeasuredHeight();
59 | footer_progress.setRotation(rota);
60 | }
61 | }
62 |
63 | @Override
64 | public void onLimitDes(View rootView, boolean upORdown) {
65 | }
66 |
67 | @Override
68 | public void onStartAnim() {
69 | footer_progress.startAnimation(mRotateUpAnim);
70 | }
71 |
72 | @Override
73 | public void onFinishAnim() {
74 | footer_progress.clearAnimation();
75 | hasOverLimitHeight = false;
76 | }
77 | }
--------------------------------------------------------------------------------
/header_rotation/src/main/res/drawable/gear.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/liaoinstan/SpringView/0a24d3e9ddc5ca4fa35e1ac26e6db448aacc1a18/header_rotation/src/main/res/drawable/gear.png
--------------------------------------------------------------------------------
/header_rotation/src/main/res/drawable/progress_gear.xml:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/header_rotation/src/main/res/drawable/progress_gear_fu.xml:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/header_rotation/src/main/res/layout/rotation_footer.xml:
--------------------------------------------------------------------------------
1 |
4 |
5 |
12 |
--------------------------------------------------------------------------------
/header_rotation/src/main/res/layout/rotation_header.xml:
--------------------------------------------------------------------------------
1 |
4 |
5 |
6 |
14 |
15 |
25 |
26 |
35 |
36 |
44 |
45 |
54 |
--------------------------------------------------------------------------------
/header_rotation/src/main/res/values/strings.xml:
--------------------------------------------------------------------------------
1 |
2 | rotationheader
3 |
4 |
--------------------------------------------------------------------------------
/header_wangyi/.gitignore:
--------------------------------------------------------------------------------
1 | /build
2 |
--------------------------------------------------------------------------------
/header_wangyi/build.gradle:
--------------------------------------------------------------------------------
1 | apply plugin: 'com.android.library'
2 | apply plugin: 'com.novoda.bintray-release'
3 |
4 | android {
5 | compileSdkVersion rootProject.ext.compileSdkVersion
6 |
7 | defaultConfig {
8 | minSdkVersion rootProject.ext.minSdkVersion
9 | targetSdkVersion rootProject.ext.targetSdkVersion
10 | versionCode 1
11 | versionName "1.0"
12 | }
13 |
14 | buildTypes {
15 | release {
16 | minifyEnabled false
17 | proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
18 | }
19 | }
20 |
21 | }
22 |
23 | dependencies {
24 | implementation fileTree(dir: 'libs', include: ['*.jar'])
25 | implementation "androidx.appcompat:appcompat:$supportLibraryVersion"
26 | implementation "com.google.android.material:material:$materialLibraryVersion"
27 | implementation project(':library')
28 | // implementation 'com.liaoinstan.springview:library:1.7.0'
29 | }
30 |
31 | publish {
32 | artifactId = 'WangyiHeader' // artifactId
33 | uploadName = 'SpringView:WangyiHeader' // 展示名字
34 | publishVersion = '1.7.0' // 版本
35 | desc = rootProject.ext.desc
36 | userOrg = rootProject.userOrg
37 | groupId = rootProject.groupId
38 | website = rootProject.website
39 | licences = rootProject.licences
40 | autoPublish = false
41 | dryRun = true
42 | }
43 |
--------------------------------------------------------------------------------
/header_wangyi/proguard-rules.pro:
--------------------------------------------------------------------------------
1 | # Add project specific ProGuard rules here.
2 | # You can control the set of applied configuration files using the
3 | # proguardFiles setting in build.gradle.
4 | #
5 | # For more details, see
6 | # http://developer.android.com/guide/developing/tools/proguard.html
7 |
8 | # If your project uses WebView with JS, uncomment the following
9 | # and specify the fully qualified class name to the JavaScript interface
10 | # class:
11 | #-keepclassmembers class fqcn.of.javascript.interface.for.webview {
12 | # public *;
13 | #}
14 |
15 | # Uncomment this to preserve the line number information for
16 | # debugging stack traces.
17 | #-keepattributes SourceFile,LineNumberTable
18 |
19 | # If you keep the line number information, uncomment this to
20 | # hide the original source file name.
21 | #-renamesourcefileattribute SourceFile
22 |
--------------------------------------------------------------------------------
/header_wangyi/src/main/AndroidManifest.xml:
--------------------------------------------------------------------------------
1 |
3 |
--------------------------------------------------------------------------------
/header_wangyi/src/main/res/layout/wangyi_header.xml:
--------------------------------------------------------------------------------
1 |
6 |
7 |
12 |
13 |
18 |
19 |
20 |
21 |
31 |
32 |
33 |
--------------------------------------------------------------------------------
/header_wangyi/src/main/res/values/attrs.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
--------------------------------------------------------------------------------
/header_wangyi/src/main/res/values/strings.xml:
--------------------------------------------------------------------------------
1 |
2 | header_wangyi
3 |
4 |
--------------------------------------------------------------------------------
/header_weixin/.gitignore:
--------------------------------------------------------------------------------
1 | /build
2 |
--------------------------------------------------------------------------------
/header_weixin/build.gradle:
--------------------------------------------------------------------------------
1 | apply plugin: 'com.android.library'
2 | apply plugin: 'com.novoda.bintray-release'
3 |
4 | android {
5 | compileSdkVersion rootProject.ext.compileSdkVersion
6 |
7 | defaultConfig {
8 | minSdkVersion rootProject.ext.minSdkVersion
9 | targetSdkVersion rootProject.ext.targetSdkVersion
10 | versionCode 1
11 | versionName "1.0"
12 | }
13 |
14 | buildTypes {
15 | release {
16 | minifyEnabled false
17 | proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
18 | }
19 | }
20 | }
21 |
22 | dependencies {
23 | implementation fileTree(dir: 'libs', include: ['*.jar'])
24 | implementation "androidx.appcompat:appcompat:$supportLibraryVersion"
25 | implementation "com.google.android.material:material:$materialLibraryVersion"
26 | implementation project(':library')
27 | // implementation 'com.liaoinstan.springview:library:1.7.0'
28 | }
29 |
30 | publish {
31 | artifactId = 'WeixinHeader' // artifactId
32 | uploadName = 'SpringView:WeixinHeader' // 展示名字
33 | publishVersion = '1.7.0' // 版本
34 | desc = rootProject.ext.desc
35 | userOrg = rootProject.userOrg
36 | groupId = rootProject.groupId
37 | website = rootProject.website
38 | licences = rootProject.licences
39 | autoPublish = false
40 | dryRun = true
41 | }
42 |
--------------------------------------------------------------------------------
/header_weixin/proguard-rules.pro:
--------------------------------------------------------------------------------
1 | # Add project specific ProGuard rules here.
2 | # You can control the set of applied configuration files using the
3 | # proguardFiles setting in build.gradle.
4 | #
5 | # For more details, see
6 | # http://developer.android.com/guide/developing/tools/proguard.html
7 |
8 | # If your project uses WebView with JS, uncomment the following
9 | # and specify the fully qualified class name to the JavaScript interface
10 | # class:
11 | #-keepclassmembers class fqcn.of.javascript.interface.for.webview {
12 | # public *;
13 | #}
14 |
15 | # Uncomment this to preserve the line number information for
16 | # debugging stack traces.
17 | #-keepattributes SourceFile,LineNumberTable
18 |
19 | # If you keep the line number information, uncomment this to
20 | # hide the original source file name.
21 | #-renamesourcefileattribute SourceFile
22 |
--------------------------------------------------------------------------------
/header_weixin/src/main/AndroidManifest.xml:
--------------------------------------------------------------------------------
1 |
3 |
4 |
5 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/header_weixin/src/main/java/com/liaoinstan/springview/weixinheader/Program.java:
--------------------------------------------------------------------------------
1 | package com.liaoinstan.springview.weixinheader;
2 |
3 | import com.liaoinstan.springview.weixinheaderv2.RecycleAdapterWeixinHeaderV2;
4 |
5 | /**
6 | * 小程序实体类
7 | */
8 | public class Program {
9 | private int id;
10 | private String name;
11 | private String img;
12 |
13 | private int type;
14 | private String titleName;
15 |
16 | public Program() {
17 | }
18 |
19 | public Program(String name, String img) {
20 | this.name = name;
21 | this.img = img;
22 | this.type = RecycleAdapterWeixinHeaderV2.TYPE_ITEM;
23 | }
24 |
25 | public Program(String titleName, int type) {
26 | this.titleName = titleName;
27 | this.type = type;
28 | }
29 |
30 | public Program(int type) {
31 | this.type = type;
32 | }
33 |
34 | public int getId() {
35 | return id;
36 | }
37 |
38 | public void setId(int id) {
39 | this.id = id;
40 | }
41 |
42 | public String getImg() {
43 | return img;
44 | }
45 |
46 | public void setImg(String img) {
47 | this.img = img;
48 | }
49 |
50 | public String getName() {
51 | return name;
52 | }
53 |
54 | public void setName(String name) {
55 | this.name = name;
56 | }
57 |
58 | public int getType() {
59 | return type;
60 | }
61 |
62 | public void setType(int type) {
63 | this.type = type;
64 | }
65 |
66 | public String getTitleName() {
67 | return titleName;
68 | }
69 |
70 | public void setTitleName(String titleName) {
71 | this.titleName = titleName;
72 | }
73 | }
74 |
--------------------------------------------------------------------------------
/header_weixin/src/main/java/com/liaoinstan/springview/weixinheaderv2/Utils.java:
--------------------------------------------------------------------------------
1 | package com.liaoinstan.springview.weixinheaderv2;
2 |
3 | import android.Manifest;
4 | import android.app.Service;
5 | import android.content.Context;
6 | import android.os.Vibrator;
7 |
8 | import androidx.core.content.PermissionChecker;
9 |
10 | import com.liaoinstan.springview.weixinheader.Program;
11 |
12 | import java.util.List;
13 |
14 | class Utils {
15 | static int getMoreItemIndex(List programList) {
16 | for (int i = 0; i < programList.size(); i++) {
17 | Program program = programList.get(i);
18 | if (program.getType() == RecycleAdapterWeixinHeaderV2.TYPE_MORE) {
19 | return i;
20 | }
21 | }
22 | return -1;
23 | }
24 |
25 | //判断当前位置是否是"最近使用"小程序
26 | static boolean isRecentProgram(List programList, int position) {
27 | int indexMore = getMoreItemIndex(programList);
28 | return position < indexMore;
29 | }
30 |
31 | //判断是否正要拖拽到'最近使用'类别中
32 | static boolean isDragToRecentProgram(List programList, int position) {
33 | int indexMore = getMoreItemIndex(programList);
34 | return position <= indexMore;
35 | }
36 |
37 | static boolean isMineProgram(List programList, int position) {
38 | int indexMore = getMoreItemIndex(programList);
39 | return position > indexMore;
40 | }
41 |
42 | static boolean isLastItem(List programList, int position) {
43 | return position == programList.size() - 1;
44 | }
45 |
46 | static boolean hasMineProgram(List programList) {
47 | return programList.get(programList.size() - 1).getType() != RecycleAdapterWeixinHeaderV2.TYPE_HEADER;
48 | }
49 |
50 | static int getMineTitlePosition(List programList) {
51 | for (int i = programList.size() - 1; i >= 0; i--) {
52 | Program program = programList.get(i);
53 | if (program.getType() == RecycleAdapterWeixinHeaderV2.TYPE_HEADER) {
54 | return i;
55 | }
56 | }
57 | return -1;
58 | }
59 |
60 | static int getRecentProgramCount(List programList) {
61 | int indexMore = getMoreItemIndex(programList);
62 | return indexMore - 1;
63 | }
64 |
65 | static int getMineProgramCount(List programList) {
66 | int indexMore = getMoreItemIndex(programList);
67 | return programList.size() - indexMore - 2;
68 | }
69 |
70 | /**
71 | * 检查如果已经申请了震动权限,就震动一下,震动时长:time
72 | */
73 | static void vibrate(Context context, int time) {
74 | if (PermissionChecker.checkSelfPermission(context, Manifest.permission.VIBRATE) == PermissionChecker.PERMISSION_GRANTED) {
75 | Vibrator vib = (Vibrator) context.getSystemService(Service.VIBRATOR_SERVICE);
76 | if (vib != null) vib.vibrate(time);
77 | }
78 | }
79 | }
80 |
--------------------------------------------------------------------------------
/header_weixin/src/main/java/com/liaoinstan/springview/weixinheaderv2/WeixinV2InnerFooter.java:
--------------------------------------------------------------------------------
1 | package com.liaoinstan.springview.weixinheaderv2;
2 |
3 | import android.view.LayoutInflater;
4 | import android.view.View;
5 | import android.view.ViewGroup;
6 |
7 | import com.liaoinstan.springview.container.BaseSimpleFooter;
8 | import com.liaoinstan.springview.utils.DensityUtil;
9 | import com.liaoinstan.springview.widget.SpringView;
10 |
11 | public class WeixinV2InnerFooter extends BaseSimpleFooter {
12 |
13 | private OnDragFinishListener onDragFinishListener;
14 |
15 | WeixinV2InnerFooter(OnDragFinishListener onDragFinishListener) {
16 | setMovePara(2.0f);
17 | setType(SpringView.Type.FOLLOW);
18 | this.onDragFinishListener = onDragFinishListener;
19 | }
20 |
21 | @Override
22 | public View getView(LayoutInflater inflater, ViewGroup viewGroup) {
23 | View root = new View(viewGroup.getContext());
24 | ViewGroup.LayoutParams layoutParams = new ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, DensityUtil.dp2px(200));
25 | root.setLayoutParams(layoutParams);
26 | return root;
27 | }
28 |
29 | @Override
30 | public int getDragLimitHeight(View rootView) {
31 | return DensityUtil.dp2px(60);
32 | }
33 |
34 | @Override
35 | public int getDragMaxHeight(View rootView) {
36 | return rootView.getMeasuredHeight();
37 | }
38 |
39 | @Override
40 | public int getDragSpringHeight(View rootView) {
41 | return getDragMaxHeight(rootView) - 1;
42 | }
43 |
44 |
45 | @Override
46 | public void onPreDrag(View rootView) {
47 | }
48 |
49 | @Override
50 | public void onDropAnim(View rootView, int dy) {
51 | }
52 |
53 | @Override
54 | public void onLimitDes(View rootView, boolean upORdown) {
55 | }
56 |
57 | @Override
58 | public void onStartAnim() {
59 | if (onDragFinishListener != null) onDragFinishListener.onDragFinish();
60 | }
61 |
62 | @Override
63 | public void onFinishAnim() {
64 | }
65 |
66 | interface OnDragFinishListener {
67 | void onDragFinish();
68 | }
69 | }
70 |
--------------------------------------------------------------------------------
/header_weixin/src/main/java/com/liaoinstan/springview/weixinheaderv2/WeixinV2InnerHeader.java:
--------------------------------------------------------------------------------
1 | package com.liaoinstan.springview.weixinheaderv2;
2 |
3 | import android.graphics.drawable.Drawable;
4 | import android.view.LayoutInflater;
5 | import android.view.View;
6 | import android.view.ViewGroup;
7 | import android.widget.TextView;
8 |
9 | import androidx.core.graphics.drawable.DrawableCompat;
10 |
11 | import com.liaoinstan.springview.container.BaseSimpleHeader;
12 | import com.liaoinstan.springview.utils.DensityUtil;
13 | import com.liaoinstan.springview.weixinheader.R;
14 | import com.liaoinstan.springview.widget.SpringView;
15 |
16 | public class WeixinV2InnerHeader extends BaseSimpleHeader {
17 |
18 | private OnSearchClickListener onSearchClickListener;
19 |
20 | WeixinV2InnerHeader(OnSearchClickListener onSearchClickListener) {
21 | setMovePara(2.0f);
22 | setType(SpringView.Type.FOLLOW);
23 | this.onSearchClickListener = onSearchClickListener;
24 | }
25 |
26 | @Override
27 | public View getView(LayoutInflater inflater, ViewGroup viewGroup) {
28 | View root = inflater.inflate(R.layout.weixin_header_v2_inner, viewGroup, false);
29 | TextView text_search = root.findViewById(R.id.text_search);
30 | //搜索图标着色,用DrawableCompat着色可以向下兼容,而drawableTint属性不向下兼容
31 | Drawable originalSearchDrawable = viewGroup.getContext().getResources().getDrawable(R.drawable.weixin_ic_search_light).mutate();
32 | Drawable searchDrawable = DrawableCompat.wrap(originalSearchDrawable);
33 | DrawableCompat.setTintList(searchDrawable, text_search.getTextColors());
34 | text_search.setCompoundDrawablesWithIntrinsicBounds(searchDrawable, null, null, null);
35 | text_search.setOnClickListener(new View.OnClickListener() {
36 | @Override
37 | public void onClick(View v) {
38 | if (onSearchClickListener != null) onSearchClickListener.onSearchClick(v);
39 | }
40 | });
41 | return root;
42 | }
43 |
44 | @Override
45 | public int getDragLimitHeight(View rootView) {
46 | return getDragSpringHeight(rootView) / 2;
47 | }
48 |
49 | @Override
50 | public int getDragMaxHeight(View rootView) {
51 | return rootView.getMeasuredHeight() + DensityUtil.dp2px(100);
52 | }
53 |
54 | @Override
55 | public int getDragSpringHeight(View rootView) {
56 | return rootView.getMeasuredHeight();
57 | }
58 |
59 | @Override
60 | public void onPreDrag(View rootView) {
61 | }
62 |
63 | @Override
64 | public void onDropAnim(View rootView, int dy) {
65 | }
66 |
67 | @Override
68 | public void onLimitDes(View rootView, boolean upORdown) {
69 | }
70 |
71 | @Override
72 | public void onStartAnim() {
73 | }
74 |
75 | @Override
76 | public void onFinishAnim() {
77 | }
78 |
79 | interface OnSearchClickListener {
80 | void onSearchClick(View view);
81 | }
82 | }
83 |
--------------------------------------------------------------------------------
/header_weixin/src/main/res/drawable-xxhdpi/smoke.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/liaoinstan/SpringView/0a24d3e9ddc5ca4fa35e1ac26e6db448aacc1a18/header_weixin/src/main/res/drawable-xxhdpi/smoke.png
--------------------------------------------------------------------------------
/header_weixin/src/main/res/drawable-xxhdpi/weixin_ic_drop.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/liaoinstan/SpringView/0a24d3e9ddc5ca4fa35e1ac26e6db448aacc1a18/header_weixin/src/main/res/drawable-xxhdpi/weixin_ic_drop.png
--------------------------------------------------------------------------------
/header_weixin/src/main/res/drawable-xxhdpi/weixin_ic_drop_hot.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/liaoinstan/SpringView/0a24d3e9ddc5ca4fa35e1ac26e6db448aacc1a18/header_weixin/src/main/res/drawable-xxhdpi/weixin_ic_drop_hot.png
--------------------------------------------------------------------------------
/header_weixin/src/main/res/drawable-xxhdpi/weixin_ic_search.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/liaoinstan/SpringView/0a24d3e9ddc5ca4fa35e1ac26e6db448aacc1a18/header_weixin/src/main/res/drawable-xxhdpi/weixin_ic_search.png
--------------------------------------------------------------------------------
/header_weixin/src/main/res/drawable-xxhdpi/weixin_ic_search_light.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/liaoinstan/SpringView/0a24d3e9ddc5ca4fa35e1ac26e6db448aacc1a18/header_weixin/src/main/res/drawable-xxhdpi/weixin_ic_search_light.png
--------------------------------------------------------------------------------
/header_weixin/src/main/res/drawable/select_delete_bg.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
--------------------------------------------------------------------------------
/header_weixin/src/main/res/drawable/select_delete_drop.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
--------------------------------------------------------------------------------
/header_weixin/src/main/res/drawable/select_oval_dark_trans.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
--------------------------------------------------------------------------------
/header_weixin/src/main/res/drawable/shape_more.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 | -
4 |
5 |
6 |
9 |
10 |
11 |
12 | -
17 |
18 |
19 |
20 |
21 |
22 | -
27 |
28 |
29 |
30 |
31 |
32 | -
37 |
38 |
39 |
40 |
41 |
--------------------------------------------------------------------------------
/header_weixin/src/main/res/drawable/shape_none.xml:
--------------------------------------------------------------------------------
1 |
2 |
4 |
5 |
6 |
7 |
10 |
11 |
--------------------------------------------------------------------------------
/header_weixin/src/main/res/drawable/shape_oval_dark_trans.xml:
--------------------------------------------------------------------------------
1 |
2 |
4 |
5 |
6 |
7 |
10 |
11 |
--------------------------------------------------------------------------------
/header_weixin/src/main/res/drawable/shape_oval_dot.xml:
--------------------------------------------------------------------------------
1 |
2 |
4 |
5 |
6 |
7 |
10 |
11 |
--------------------------------------------------------------------------------
/header_weixin/src/main/res/drawable/shape_oval_dot_dark.xml:
--------------------------------------------------------------------------------
1 |
2 |
4 |
5 |
6 |
7 |
10 |
11 |
--------------------------------------------------------------------------------
/header_weixin/src/main/res/drawable/shape_rect_coner_dark.xml:
--------------------------------------------------------------------------------
1 |
2 |
4 |
5 |
6 |
7 |
8 |
9 |
--------------------------------------------------------------------------------
/header_weixin/src/main/res/drawable/shape_rect_coner_dash_line.xml:
--------------------------------------------------------------------------------
1 |
2 |
4 |
5 |
10 |
11 |
12 |
--------------------------------------------------------------------------------
/header_weixin/src/main/res/drawable/shape_rect_coner_top_bg.xml:
--------------------------------------------------------------------------------
1 |
2 |
4 |
5 |
6 |
7 |
9 |
10 |
--------------------------------------------------------------------------------
/header_weixin/src/main/res/drawable/shape_rect_gradient_weixinheader_bg.xml:
--------------------------------------------------------------------------------
1 |
2 |
4 |
9 |
--------------------------------------------------------------------------------
/header_weixin/src/main/res/layout/view_weixin_title_bar.xml:
--------------------------------------------------------------------------------
1 |
7 |
8 |
13 |
14 |
19 |
20 |
26 |
27 |
28 |
29 |
43 |
44 |
45 |
46 |
--------------------------------------------------------------------------------
/header_weixin/src/main/res/layout/weixin_header.xml:
--------------------------------------------------------------------------------
1 |
8 |
9 |
13 |
14 |
21 |
22 |
32 |
33 |
42 |
43 |
53 |
54 |
55 |
--------------------------------------------------------------------------------
/header_weixin/src/main/res/layout/weixin_header_item.xml:
--------------------------------------------------------------------------------
1 |
9 |
10 |
17 |
18 |
29 |
30 |
31 |
--------------------------------------------------------------------------------
/header_weixin/src/main/res/layout/weixin_header_item_more_v2.xml:
--------------------------------------------------------------------------------
1 |
8 |
9 |
16 |
17 |
23 |
24 |
25 |
--------------------------------------------------------------------------------
/header_weixin/src/main/res/layout/weixin_header_item_title_v2.xml:
--------------------------------------------------------------------------------
1 |
7 |
8 |
19 |
20 |
34 |
35 |
--------------------------------------------------------------------------------
/header_weixin/src/main/res/layout/weixin_header_item_v2.xml:
--------------------------------------------------------------------------------
1 |
8 |
9 |
16 |
17 |
28 |
29 |
30 |
--------------------------------------------------------------------------------
/header_weixin/src/main/res/layout/weixin_header_v2_inner.xml:
--------------------------------------------------------------------------------
1 |
10 |
11 |
30 |
31 |
32 |
33 |
34 |
--------------------------------------------------------------------------------
/header_weixin/src/main/res/values/colors.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 | #f1f1f1
4 | #191919
5 | #2BA245
6 | #f9f9f9
7 | #f3f3f7
8 | #E64340
9 | #22000000
10 |
11 |
--------------------------------------------------------------------------------
/header_weixin/src/main/res/values/strings.xml:
--------------------------------------------------------------------------------
1 |
2 | weixinheader
3 | 松手即可删除
4 | 拖到此处删除
5 |
6 |
--------------------------------------------------------------------------------
/library/.gitignore:
--------------------------------------------------------------------------------
1 | /build
2 |
--------------------------------------------------------------------------------
/library/build.gradle:
--------------------------------------------------------------------------------
1 | apply plugin: 'com.android.library'
2 | apply plugin: 'com.novoda.bintray-release'
3 |
4 | android {
5 | compileSdkVersion rootProject.ext.compileSdkVersion
6 |
7 | defaultConfig {
8 | minSdkVersion rootProject.ext.minSdkVersion
9 | targetSdkVersion rootProject.ext.targetSdkVersion
10 | versionCode 1
11 | versionName "1.0"
12 | }
13 | buildTypes {
14 | release {
15 | minifyEnabled false
16 | proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
17 | }
18 | }
19 | }
20 |
21 | dependencies {
22 | implementation fileTree(include: ['*.jar'], dir: 'libs')
23 | implementation "androidx.appcompat:appcompat:$supportLibraryVersion"
24 | implementation "com.google.android.material:material:$materialLibraryVersion"
25 | }
26 |
27 | publish {
28 | artifactId = 'library' // artifactId
29 | uploadName = 'SpringView' // 展示名字
30 | publishVersion = '1.7.0' // 版本
31 | desc = rootProject.desc
32 | userOrg = rootProject.userOrg
33 | groupId = rootProject.groupId
34 | website = rootProject.website
35 | licences = rootProject.licences
36 | autoPublish = false
37 | dryRun = true
38 | }
--------------------------------------------------------------------------------
/library/proguard-rules.pro:
--------------------------------------------------------------------------------
1 | # Add project specific ProGuard rules here.
2 | # By default, the flags in this file are appended to flags specified
3 | # in D:\LZ\develop\adt-eclipse\adt-bundle-windows-x86_64-20140702\sdk/tools/proguard/proguard-android.txt
4 | # You can edit the include path and order by changing the proguardFiles
5 | # directive in build.gradle.
6 | #
7 | # For more details, see
8 | # http://developer.android.com/guide/developing/tools/proguard.html
9 |
10 | # Add any project specific keep options here:
11 |
12 | # If your project uses WebView with JS, uncomment the following
13 | # and specify the fully qualified class name to the JavaScript interface
14 | # class:
15 | #-keepclassmembers class fqcn.of.javascript.interface.for.webview {
16 | # public *;
17 | #}
18 |
--------------------------------------------------------------------------------
/library/src/main/AndroidManifest.xml:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/library/src/main/java/com/liaoinstan/springview/container/AutoFooter.java:
--------------------------------------------------------------------------------
1 | package com.liaoinstan.springview.container;
2 |
3 | import android.view.LayoutInflater;
4 | import android.view.View;
5 | import android.view.ViewGroup;
6 | import android.widget.ProgressBar;
7 | import android.widget.TextView;
8 |
9 | import com.liaoinstan.springview.R;
10 | import com.liaoinstan.springview.widget.SpringView;
11 |
12 | public class AutoFooter extends BaseScrollFooter {
13 |
14 | protected View rootView;
15 | protected ProgressBar progress_auto;
16 | protected View lay_auto_bottom_line;
17 | protected TextView text_bottom;
18 | protected boolean isInProgress;
19 |
20 | private String bottomText;
21 |
22 | public AutoFooter() {
23 | this("我是有底线的");
24 | }
25 |
26 | public AutoFooter(String bottomText) {
27 | setType(SpringView.Type.SCROLL);
28 | this.bottomText = bottomText;
29 | }
30 |
31 | @Override
32 | public View getView(LayoutInflater inflater, ViewGroup viewGroup) {
33 | rootView = inflater.inflate(R.layout.auto_footer, viewGroup, false);
34 | progress_auto = rootView.findViewById(R.id.progress_auto);
35 | lay_auto_bottom_line = rootView.findViewById(R.id.lay_auto_bottom_line);
36 | text_bottom = rootView.findViewById(R.id.text_bottom);
37 | text_bottom.setText(bottomText);
38 | showProgressOrBottomLine(true);
39 | return rootView;
40 | }
41 |
42 | @Override
43 | protected void onScrollBottom() {
44 | }
45 |
46 | @Override
47 | protected void onScrollOut() {
48 | }
49 |
50 | @Override
51 | protected void onFooterMove(View rootView, int dy) {
52 | }
53 |
54 | @Override
55 | protected void onScreenFull(View rootView, boolean screenFull) {
56 | rootView.setVisibility(screenFull ? View.VISIBLE : View.GONE);
57 | }
58 |
59 | private void showProgressOrBottomLine(boolean isProgress) {
60 | this.isInProgress = isProgress;
61 | progress_auto.setVisibility(isProgress ? View.VISIBLE : View.GONE);
62 | lay_auto_bottom_line.setVisibility(!isProgress ? View.VISIBLE : View.GONE);
63 | }
64 |
65 | public void showProgress() {
66 | showProgressOrBottomLine(true);
67 | }
68 |
69 | public void showBottomLine() {
70 | showProgressOrBottomLine(false);
71 | }
72 |
73 | public boolean isInProgress() {
74 | return isInProgress;
75 | }
76 | }
77 |
--------------------------------------------------------------------------------
/library/src/main/java/com/liaoinstan/springview/container/BaseFooter.java:
--------------------------------------------------------------------------------
1 | package com.liaoinstan.springview.container;
2 |
3 | import android.view.View;
4 |
5 | import com.liaoinstan.springview.widget.SpringView;
6 |
7 | /**
8 | * Created by Administrator on 2016/3/24.
9 | * 这个类为所有尾部的虚基类,实现自定义的尾巴需继承自该类
10 | * 该类实现了SpringView.DragHander接口,为3个高度接口提供了默认的返回值
11 | */
12 | public abstract class BaseFooter implements SpringView.DragHander {
13 |
14 | public String TAG = getClass().getSimpleName();
15 |
16 | /**
17 | * 这个方法用于设置当前View的临界高度(limit hight),即拉动到多少会被认定为刷新操作,而没到达该高度则不会执行刷新
18 | * 返回值大于0才有效,如果<=0 则设置为默认footer的高度
19 | * 默认返回0
20 | */
21 | @Override
22 | public int getDragLimitHeight(View rootView) {
23 | return 0;
24 | }
25 |
26 | /**
27 | * 这个方法用于设置上拉最大高度(max height),无论怎么拉动都不会超过这个高度
28 | * 返回值大于0才有效,如果<=0 则默认600px
29 | * 默认返回0
30 | */
31 | @Override
32 | public int getDragMaxHeight(View rootView) {
33 | return 0;
34 | }
35 |
36 | /**
37 | * 这个方法用于设置上拉弹动高度(spring height),即弹动后停止状态的高度
38 | * 返回值大于0才有效,如果<=0 则设置为默认footer的高度
39 | */
40 | @Override
41 | public int getDragSpringHeight(View rootView) {
42 | return 0;
43 | }
44 |
45 | /**
46 | * 设置移动参数
47 | * 如果你的footer实现了该接口,那么SpringView会优先使用该接口返回的结果(忽略掉:SpringView.setMovePara())
48 | * 添加这个接口的目的是为了让不同的footer能够自行定义自己的摩擦阻力,而不再是由SpringView进行设置
49 | * 返回值大于0才有效,默认返回0
50 | */
51 | @Override
52 | public float getMovePara() {
53 | return 0;
54 | }
55 |
56 | /**
57 | * 返回header的拖动方式:type
58 | * 返回值非null才有效,默认返回null
59 | */
60 | @Override
61 | public SpringView.Type getType() {
62 | return null;
63 | }
64 |
65 | /**
66 | * 即将开始拖拽时的回调,可进行初始化操作
67 | */
68 | @Override
69 | public void onPreDrag(View rootView) {
70 | }
71 |
72 | /**
73 | * 拖拽结束时回调,不管是否拖拽超过limit阈值
74 | */
75 | @Override
76 | public void onFinishDrag(View rootView) {
77 | }
78 |
79 | @Override
80 | public void onResetAnim() {
81 | }
82 |
83 | //###################################################
84 | //############ 2018/9/13 新增收场动画接口 ###########
85 | //###################################################
86 |
87 | /**
88 | * 收场动画执行时间
89 | * 返回值大于0才有效
90 | * 默认返回0
91 | */
92 | @Override
93 | public int getEndingAnimTime() {
94 | return 0;
95 | }
96 |
97 | /**
98 | * 收场动画回弹高度
99 | * 返回值大于0才有效
100 | * 默认返回0
101 | */
102 | @Override
103 | public int getEndingAnimHeight(View rootView) {
104 | return 0;
105 | }
106 |
107 | /**
108 | * 收场动画开始执行,默认空实现,如需要收场动画重写该方法
109 | */
110 | @Override
111 | public void onEndingAnimStart() {
112 | }
113 |
114 | /**
115 | * 收场动画结束执行,默认空实现,如需要收场动画重写该方法
116 | */
117 | @Override
118 | public void onEndingAnimEnd() {
119 | }
120 | }
121 |
--------------------------------------------------------------------------------
/library/src/main/java/com/liaoinstan/springview/container/BaseHeader.java:
--------------------------------------------------------------------------------
1 | package com.liaoinstan.springview.container;
2 |
3 | import android.view.View;
4 |
5 | import com.liaoinstan.springview.widget.SpringView;
6 |
7 | /**
8 | * Created by liaoinstan on 2016/3/24.
9 | * 这个类为所有头部的虚基类,实现自定义的头部需继承自该类
10 | * 该类实现了SpringView.DragHander接口,为3个高度接口提供了默认的返回值
11 | */
12 | public abstract class BaseHeader implements SpringView.DragHander {
13 |
14 | public String TAG = getClass().getSimpleName();
15 |
16 | /**
17 | * 这个方法用于设置当前View的临界高度(limit hight),即拉动到多少会被认定为刷新超作,而没到达该高度则不会执行刷新
18 | * 返回值大于0才有效,如果<=0 则设置为默认header的高度
19 | * 默认返回0
20 | */
21 | @Override
22 | public int getDragLimitHeight(View rootView) {
23 | return 0;
24 | }
25 |
26 | /**
27 | * 这个方法用于设置下拉最大高度(max height),无论怎么拉动都不会超过这个高度
28 | * 返回值大于0才有效,如果<=0 则默认600px
29 | * 默认返回0
30 | */
31 | @Override
32 | public int getDragMaxHeight(View rootView) {
33 | return 0;
34 | }
35 |
36 | /**
37 | * 这个方法用于设置下拉弹动高度(spring height),即弹动后停止状态的高度
38 | * 返回值大于0才有效,如果<=0 则设置为默认header的高度
39 | * 默认返回0
40 | */
41 | @Override
42 | public int getDragSpringHeight(View rootView) {
43 | return 0;
44 | }
45 |
46 | /**
47 | * 设置移动参数
48 | * 如果你的header实现了该接口,那么SpringView会优先使用该接口返回的结果(忽略掉:SpringView.setMovePara())
49 | * 添加这个接口的目的是为了让不同的header能够自行定义自己的摩擦阻力,而不再是由SpringView进行设置
50 | * 返回值大于0才有效,默认返回0
51 | */
52 | @Override
53 | public float getMovePara() {
54 | return 0;
55 | }
56 |
57 | /**
58 | * 返回header的拖动方式:type
59 | * 返回值非null才有效,默认返回null
60 | */
61 | @Override
62 | public SpringView.Type getType() {
63 | return null;
64 | }
65 |
66 | /**
67 | * 即将开始拖拽时的回调,可进行初始化操作
68 | */
69 | @Override
70 | public void onPreDrag(View rootView) {
71 | }
72 |
73 | /**
74 | * 拖拽结束时回调,不管是否拖拽超过limit阈值
75 | */
76 | @Override
77 | public void onFinishDrag(View rootView) {
78 | }
79 |
80 | @Override
81 | public void onResetAnim() {
82 | }
83 |
84 | //###################################################
85 | //############ 2018/9/13 新增收场动画接口 ###########
86 | //###################################################
87 |
88 | /**
89 | * 收场动画执行时间
90 | * 返回值大于0才有效
91 | * 默认返回0
92 | */
93 | @Override
94 | public int getEndingAnimTime() {
95 | return 0;
96 | }
97 |
98 | /**
99 | * 收场动画回弹高度
100 | * 返回值大于0才有效
101 | * 默认返回0
102 | */
103 | @Override
104 | public int getEndingAnimHeight(View rootView) {
105 | return 0;
106 | }
107 |
108 | /**
109 | * 收场动画开始执行,默认空实现,如需要收场动画重写该方法
110 | */
111 | @Override
112 | public void onEndingAnimStart() {
113 | }
114 |
115 | /**
116 | * 收场动画结束执行,默认空实现,如需要收场动画重写该方法
117 | */
118 | @Override
119 | public void onEndingAnimEnd() {
120 | }
121 | }
122 |
--------------------------------------------------------------------------------
/library/src/main/java/com/liaoinstan/springview/container/BaseScrollFooter.java:
--------------------------------------------------------------------------------
1 | package com.liaoinstan.springview.container;
2 |
3 | import android.view.View;
4 |
5 | public abstract class BaseScrollFooter extends BaseSimpleFooter {
6 |
7 | @Override
8 | public final void onDropAnim(View rootView, int dy) {
9 | onFooterMove(rootView, dy);
10 | }
11 |
12 | @Override
13 | public final void onLimitDes(View rootView, boolean upORdown) {
14 | onScreenFull(rootView, upORdown);
15 | }
16 |
17 | @Override
18 | public final void onStartAnim() {
19 | onScrollBottom();
20 | }
21 |
22 | @Override
23 | public final void onFinishAnim() {
24 | onScrollOut();
25 | }
26 |
27 | @Override
28 | public final void onPreDrag(View rootView) {
29 | }
30 |
31 | @Override
32 | public final void onFinishDrag(View rootView) {
33 | }
34 |
35 | @Override
36 | public final int getDragLimitHeight(View rootView) {
37 | return 0;
38 | }
39 |
40 | @Override
41 | public final int getDragMaxHeight(View rootView) {
42 | return 0;
43 | }
44 |
45 | @Override
46 | public final int getDragSpringHeight(View rootView) {
47 | return 0;
48 | }
49 |
50 | @Override
51 | public final int getEndingAnimTime() {
52 | return 0;
53 | }
54 |
55 | @Override
56 | public final int getEndingAnimHeight(View rootView) {
57 | return 0;
58 | }
59 |
60 | @Override
61 | public final void onEndingAnimStart() {
62 | }
63 |
64 | @Override
65 | public final void onEndingAnimEnd() {
66 | }
67 |
68 | /**
69 | * 当页面滚动到最底部时回调(此时footer已经完全展示)
70 | */
71 | protected abstract void onScrollBottom();
72 |
73 | /**
74 | * 当页面滚动到footer完全不可见时回调(此时footer已经完全滚出页面)
75 | */
76 | protected abstract void onScrollOut();
77 |
78 | /**
79 | * 当正在滚动footer时回调,此时该方法会不断调用,并提供footer滚动距离:dy
80 | * dy 范围为 0 - footer最大高度,为0时footer刚好不可见,为footer最大高度时刚好完全可见
81 | */
82 | protected abstract void onFooterMove(View rootView, int dy);
83 |
84 | /**
85 | * 是否一屏可用完全展示内容回调
86 | * screenFull 为 false 时,表示此时页面内容高度不足一屏(无法滚动),为true表示大于一屏
87 | * 添加这个接口的主要目的是为了,在页面内容高度不足以支持滚动时不显示footer,如果有这种需求就可以在这个回调中处理,否则可用忽略
88 | */
89 | protected abstract void onScreenFull(View rootView, boolean screenFull);
90 | }
91 |
--------------------------------------------------------------------------------
/library/src/main/java/com/liaoinstan/springview/container/BaseScrollHeader.java:
--------------------------------------------------------------------------------
1 | package com.liaoinstan.springview.container;
2 |
3 | import android.util.Log;
4 | import android.view.LayoutInflater;
5 | import android.view.View;
6 | import android.view.ViewGroup;
7 |
8 | import com.liaoinstan.springview.R;
9 | import com.liaoinstan.springview.widget.SpringView;
10 |
11 | public class BaseScrollHeader extends BaseHeader {
12 |
13 | private View rootView;
14 |
15 | @Override
16 | public SpringView.Type getType() {
17 | return SpringView.Type.SCROLL;
18 | }
19 |
20 | @Override
21 | public View getView(LayoutInflater inflater, ViewGroup viewGroup) {
22 | rootView = inflater.inflate(R.layout.default_header, viewGroup, false);
23 | return rootView;
24 | }
25 |
26 | @Override
27 | public void onDropAnim(View rootView, int dy) {
28 | // Log.e(TAG, "onDropAnim -> dy:" + dy);
29 | }
30 |
31 | @Override
32 | public void onLimitDes(View rootView, boolean upORdown) {
33 | Log.e(TAG, "onLimitDes -> upORdown:" + upORdown);
34 | }
35 |
36 | @Override
37 | public void onStartAnim() {
38 | Log.e(TAG, "onStartAnim");
39 | }
40 |
41 | @Override
42 | public void onFinishAnim() {
43 | Log.e(TAG, "onFinishAnim");
44 | }
45 | }
46 |
--------------------------------------------------------------------------------
/library/src/main/java/com/liaoinstan/springview/container/BaseSimpleFooter.java:
--------------------------------------------------------------------------------
1 | package com.liaoinstan.springview.container;
2 |
3 | import com.liaoinstan.springview.widget.SpringView;
4 |
5 | /**
6 | * Create by liaoinstan 2019/12/9
7 | * 默认尾部的简单封装,主要把摩擦系数和type设置封装在内部,如果继承该类,则可直接调用 footer.setType(..),footer.setMovePara(..) 来改变type类型,和摩擦系数
8 | */
9 | public abstract class BaseSimpleFooter extends BaseHeader {
10 |
11 | private float movePara = 2.0f;
12 | private SpringView.Type type = SpringView.Type.FOLLOW;
13 |
14 | @Override
15 | public SpringView.Type getType() {
16 | return type;
17 | }
18 |
19 | @Override
20 | public float getMovePara() {
21 | return movePara;
22 | }
23 |
24 | public BaseSimpleFooter setType(SpringView.Type type) {
25 | this.type = type;
26 | return this;
27 | }
28 |
29 | public BaseSimpleFooter setMovePara(float movePara) {
30 | this.movePara = movePara;
31 | return this;
32 | }
33 | }
34 |
--------------------------------------------------------------------------------
/library/src/main/java/com/liaoinstan/springview/container/BaseSimpleHeader.java:
--------------------------------------------------------------------------------
1 | package com.liaoinstan.springview.container;
2 |
3 | import com.liaoinstan.springview.widget.SpringView;
4 |
5 | /**
6 | * Create by liaoinstan 2019/12/9
7 | * 默认头部的简单封装,主要把摩擦系数和type设置封装在内部,如果继承该类,则可直接调用 header.setType(..),header.setMovePara(..) 来改变type类型,和摩擦系数
8 | */
9 | public abstract class BaseSimpleHeader extends BaseHeader {
10 |
11 | private float movePara = 2.0f;
12 | private SpringView.Type type = SpringView.Type.FOLLOW;
13 |
14 | @Override
15 | public SpringView.Type getType() {
16 | return type;
17 | }
18 |
19 | @Override
20 | public float getMovePara() {
21 | return movePara;
22 | }
23 |
24 | public BaseSimpleHeader setType(SpringView.Type type) {
25 | this.type = type;
26 | return this;
27 | }
28 |
29 | public BaseSimpleHeader setMovePara(float movePara) {
30 | this.movePara = movePara;
31 | return this;
32 | }
33 | }
34 |
--------------------------------------------------------------------------------
/library/src/main/java/com/liaoinstan/springview/container/DefaultFooter.java:
--------------------------------------------------------------------------------
1 | package com.liaoinstan.springview.container;
2 |
3 | import android.content.Context;
4 | import android.view.LayoutInflater;
5 | import android.view.View;
6 | import android.view.ViewGroup;
7 | import android.widget.ProgressBar;
8 | import android.widget.TextView;
9 |
10 | import androidx.core.content.ContextCompat;
11 |
12 | import com.liaoinstan.springview.R;
13 | import com.liaoinstan.springview.widget.SpringView;
14 |
15 | /**
16 | * Created by Administrator on 2016/3/21.
17 | */
18 | public class DefaultFooter extends BaseSimpleFooter {
19 | private Context context;
20 | private int rotationSrc;
21 | private TextView footerTitle;
22 | private ProgressBar footerProgressbar;
23 |
24 | public DefaultFooter(Context context) {
25 | this(context, R.drawable.progress_small);
26 | }
27 |
28 | public DefaultFooter(Context context, int rotationSrc) {
29 | setType(SpringView.Type.FOLLOW);
30 | setMovePara(2.0f);
31 | this.context = context;
32 | this.rotationSrc = rotationSrc;
33 | }
34 |
35 | @Override
36 | public View getView(LayoutInflater inflater, ViewGroup viewGroup) {
37 | View view = inflater.inflate(R.layout.default_footer, viewGroup, false);
38 | footerTitle = view.findViewById(R.id.default_footer_title);
39 | footerProgressbar = view.findViewById(R.id.default_footer_progressbar);
40 | footerProgressbar.setIndeterminateDrawable(ContextCompat.getDrawable(context, rotationSrc));
41 | return view;
42 | }
43 |
44 | @Override
45 | public void onPreDrag(View rootView) {
46 | }
47 |
48 | @Override
49 | public void onDropAnim(View rootView, int dy) {
50 | }
51 |
52 | @Override
53 | public void onLimitDes(View rootView, boolean upORdown) {
54 | if (upORdown) {
55 | footerTitle.setText("松开载入更多");
56 | } else {
57 | footerTitle.setText("查看更多");
58 | }
59 | }
60 |
61 | @Override
62 | public void onStartAnim() {
63 | footerTitle.setVisibility(View.INVISIBLE);
64 | footerProgressbar.setVisibility(View.VISIBLE);
65 | }
66 |
67 | @Override
68 | public void onFinishAnim() {
69 | footerTitle.setText("查看更多");
70 | footerTitle.setVisibility(View.VISIBLE);
71 | footerProgressbar.setVisibility(View.INVISIBLE);
72 | }
73 | }
--------------------------------------------------------------------------------
/library/src/main/java/com/liaoinstan/springview/container/InnerFooter.java:
--------------------------------------------------------------------------------
1 | package com.liaoinstan.springview.container;
2 |
3 | import android.util.Log;
4 | import android.view.LayoutInflater;
5 | import android.view.View;
6 | import android.view.ViewGroup;
7 |
8 | import androidx.annotation.LayoutRes;
9 |
10 | /**
11 | * 直接在布局设置footer布局,会使用该类生成默认Footer
12 | */
13 | public class InnerFooter extends BaseHeader {
14 |
15 | private final String TAG = getClass().getSimpleName();
16 | private int layoutId;
17 |
18 | public InnerFooter(@LayoutRes int layoutId) {
19 | this.layoutId = layoutId;
20 | }
21 |
22 | @Override
23 | public View getView(LayoutInflater inflater, ViewGroup viewGroup) {
24 | return inflater.inflate(layoutId, viewGroup, false);
25 | }
26 |
27 | @Override
28 | public void onPreDrag(View rootView) {
29 | Log.d(TAG, "onPreDrag");
30 | }
31 |
32 | @Override
33 | public void onFinishDrag(View rootView) {
34 | Log.d(TAG, "onFinishDrag");
35 | }
36 |
37 | @Override
38 | public void onDropAnim(View rootView, int dy) {
39 | Log.v(TAG, "onDropAnim:" + dy);
40 | }
41 |
42 | @Override
43 | public void onLimitDes(View rootView, boolean upORdown) {
44 | Log.d(TAG, "onLimitDes:" + upORdown);
45 | }
46 |
47 | @Override
48 | public void onStartAnim() {
49 | Log.d(TAG, "onStartAnim");
50 | }
51 |
52 | @Override
53 | public void onFinishAnim() {
54 | Log.d(TAG, "onFinishAnim");
55 | }
56 |
57 | @Override
58 | public void onResetAnim() {
59 | Log.d(TAG, "onResetAnim");
60 | }
61 | }
62 |
--------------------------------------------------------------------------------
/library/src/main/java/com/liaoinstan/springview/container/InnerHeader.java:
--------------------------------------------------------------------------------
1 | package com.liaoinstan.springview.container;
2 |
3 | import android.util.Log;
4 | import android.view.LayoutInflater;
5 | import android.view.View;
6 | import android.view.ViewGroup;
7 |
8 | import androidx.annotation.LayoutRes;
9 |
10 | /**
11 | * 直接在布局设置header布局,会使用该类生成默认Header
12 | */
13 | public class InnerHeader extends BaseHeader {
14 |
15 | private final String TAG = getClass().getSimpleName();
16 | private int layoutId;
17 |
18 | public InnerHeader(@LayoutRes int layoutId) {
19 | this.layoutId = layoutId;
20 | }
21 |
22 | @Override
23 | public View getView(LayoutInflater inflater, ViewGroup viewGroup) {
24 | return inflater.inflate(layoutId, viewGroup, false);
25 | }
26 |
27 | @Override
28 | public void onPreDrag(View rootView) {
29 | Log.d(TAG, "onPreDrag");
30 | }
31 |
32 | @Override
33 | public void onFinishDrag(View rootView) {
34 | Log.d(TAG, "onFinishDrag");
35 | }
36 |
37 | @Override
38 | public void onDropAnim(View rootView, int dy) {
39 | Log.v(TAG, "onDropAnim:" + dy);
40 | }
41 |
42 | @Override
43 | public void onLimitDes(View rootView, boolean upORdown) {
44 | Log.d(TAG, "onLimitDes:" + upORdown);
45 | }
46 |
47 | @Override
48 | public void onStartAnim() {
49 | Log.d(TAG, "onStartAnim");
50 | }
51 |
52 | @Override
53 | public void onFinishAnim() {
54 | Log.d(TAG, "onFinishAnim");
55 | }
56 |
57 | @Override
58 | public void onResetAnim() {
59 | Log.d(TAG, "onResetAnim");
60 | }
61 | }
62 |
--------------------------------------------------------------------------------
/library/src/main/java/com/liaoinstan/springview/listener/AppBarStateChangeListener.java:
--------------------------------------------------------------------------------
1 | package com.liaoinstan.springview.listener;
2 |
3 | import com.google.android.material.appbar.AppBarLayout;
4 |
5 | /**
6 | * thanks jianghejie
7 | */
8 |
9 | public abstract class AppBarStateChangeListener implements AppBarLayout.OnOffsetChangedListener {
10 |
11 | public enum State {
12 | EXPANDED,
13 | COLLAPSED,
14 | IDLE
15 | }
16 |
17 | private State mCurrentState = State.IDLE;
18 |
19 | @Override
20 | public final void onOffsetChanged(AppBarLayout appBarLayout, int i) {
21 | if (i == 0) {
22 | if (mCurrentState != State.EXPANDED) {
23 | onStateChanged(appBarLayout, State.EXPANDED);
24 | }
25 | mCurrentState = State.EXPANDED;
26 | } else if (Math.abs(i) >= appBarLayout.getTotalScrollRange()) {
27 | if (mCurrentState != State.COLLAPSED) {
28 | onStateChanged(appBarLayout, State.COLLAPSED);
29 | }
30 | mCurrentState = State.COLLAPSED;
31 | } else {
32 | if (mCurrentState != State.IDLE) {
33 | onStateChanged(appBarLayout, State.IDLE);
34 | }
35 | mCurrentState = State.IDLE;
36 | }
37 | }
38 |
39 | public abstract void onStateChanged(AppBarLayout appBarLayout, State state);
40 | }
41 |
42 |
--------------------------------------------------------------------------------
/library/src/main/java/com/liaoinstan/springview/utils/DensityUtil.java:
--------------------------------------------------------------------------------
1 | package com.liaoinstan.springview.utils;
2 |
3 | import android.content.res.Resources;
4 | import android.util.TypedValue;
5 |
6 | /**
7 | * Created by Administrator on 2016/3/24.
8 | */
9 | public class DensityUtil {
10 | /**
11 | * dp转px
12 | */
13 | public static int dp2px(float dpVal) {
14 | return (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, dpVal, Resources.getSystem().getDisplayMetrics());
15 | }
16 |
17 | /**
18 | * sp转px
19 | */
20 | public static int sp2px(float spVal) {
21 | return (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_SP, spVal, Resources.getSystem().getDisplayMetrics());
22 | }
23 |
24 | /**
25 | * px转dp
26 | */
27 | public static float px2dp(float pxVal) {
28 | final float scale = Resources.getSystem().getDisplayMetrics().density;
29 | return (pxVal / scale);
30 | }
31 |
32 | /**
33 | * px转sp
34 | */
35 | public static float px2sp(float pxVal) {
36 | return (pxVal / Resources.getSystem().getDisplayMetrics().scaledDensity);
37 | }
38 | }
39 |
--------------------------------------------------------------------------------
/library/src/main/java/com/liaoinstan/springview/widget/Flag.java:
--------------------------------------------------------------------------------
1 | package com.liaoinstan.springview.widget;
2 |
3 | class Flag {
4 | //Flag:调用header/footer回调: startAnim finishAnim resetAnim
5 | int callHeaderAnimFlag = 0; //startAnim:0->1 finishAnim: 1->2 resetAnim: 2->0
6 | int callFooterAnimFlag = 0; //startAnim:0->1 finishAnim: 1->2 resetAnim: 2->0
7 |
8 | //Flag:全部回弹,刷新动画回弹,收场动画回弹 调用控制
9 | boolean hasCallFull = false;
10 | boolean hasCallRefresh = false;
11 | boolean hasCallEnding = false;
12 |
13 | //Flag:拖拽回调,用于在动画结束时判断动画类别以调用不同回调接口
14 | //0:没有拖拽
15 | //1:拖拽超过header阈值header.onResetAnim
16 | //2:拖拽超过footer阈值footer.onResetAnim
17 | //3:拖拽header但未超过阈值header.onFinishDrag
18 | //4:拖拽footer但未超过阈值header.onFinishDrag
19 | int callFreshOrLoad = 0;
20 | //Flag:记录回弹动画类别,用于在动画结束时判断动画类别以调用不同回调接口
21 | //回弹动画类别 0:结束动画1:回弹动画2:退场动画
22 | int scrollAnimType;
23 |
24 | //Flag:控制preDrag每个手势链只调用一次
25 | boolean hasCallPreDrag = false;
26 | }
27 |
--------------------------------------------------------------------------------
/library/src/main/java/com/liaoinstan/springview/widget/ScrollCallbackHelper.java:
--------------------------------------------------------------------------------
1 | package com.liaoinstan.springview.widget;
2 |
3 | import android.view.View;
4 |
5 | import com.liaoinstan.springview.widget.SpringView;
6 |
7 | /**
8 | * Scroll模式的callback处理类
9 | */
10 | class ScrollCallbackHelper {
11 |
12 | private int lastHeaderDropDy = -1;
13 | private int lastFooterDropDy = -1;
14 | private Boolean lastFooterInScreen = null;
15 | private boolean callStartFooter = true;
16 | private boolean callFinishFooter = true;
17 | private boolean callStartHeader = true;
18 | private boolean callFinishHeader = true;
19 |
20 | /**
21 | * header 在移动时回调
22 | */
23 | void onHeaderMove(SpringView.DragHander headerHander, View header, int offsetTop) {
24 | if (lastHeaderDropDy != offsetTop) {
25 | headerHander.onDropAnim(header, offsetTop);
26 | if (offsetTop == 0 && callFinishHeader) {
27 | headerHander.onFinishAnim();
28 | callFinishHeader = false;
29 | callStartHeader = true;
30 | }
31 | }
32 | lastHeaderDropDy = offsetTop;
33 | }
34 |
35 | /**
36 | * footer 在移动时回调
37 | */
38 | void onFooterMove(SpringView.DragHander footerHander, View footer, int offsetBottom) {
39 | if (lastFooterDropDy != offsetBottom) {
40 | footerHander.onDropAnim(footer, offsetBottom);
41 | if (offsetBottom == 0 && callFinishFooter) {
42 | footerHander.onFinishAnim();
43 | callFinishFooter = false;
44 | callStartFooter = true;
45 | }
46 | }
47 | lastFooterDropDy = offsetBottom;
48 | }
49 |
50 | /**
51 | * 滚动到了顶部时回调
52 | */
53 | void onScrollTop(SpringView.DragHander headerHander, SpringView.OnFreshListener listener) {
54 | if (callStartHeader) {
55 | if (headerHander != null) headerHander.onStartAnim();
56 | if (listener != null) listener.onRefresh();
57 | callStartHeader = false;
58 | callFinishHeader = true;
59 | }
60 | }
61 |
62 | /**
63 | * 滚动到了底部时回调
64 | */
65 | void onScrollBottom(SpringView.DragHander footerHander, SpringView.OnFreshListener listener) {
66 | if (callStartFooter) {
67 | if (footerHander != null) footerHander.onStartAnim();
68 | if (listener != null) listener.onLoadmore();
69 | callStartFooter = false;
70 | callFinishFooter = true;
71 | }
72 | }
73 |
74 | /**
75 | * 页面内容高度是否足够显示footer的回调
76 | */
77 | void onScreenFull(SpringView.DragHander footerHander, View footer, boolean upORdown) {
78 | if (lastFooterInScreen == null || upORdown != lastFooterInScreen) {
79 | footerHander.onLimitDes(footer, upORdown);
80 | lastFooterInScreen = upORdown;
81 | }
82 | }
83 |
84 |
85 | }
86 |
--------------------------------------------------------------------------------
/library/src/main/res/drawable-hdpi/arrow.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/liaoinstan/SpringView/0a24d3e9ddc5ca4fa35e1ac26e6db448aacc1a18/library/src/main/res/drawable-hdpi/arrow.png
--------------------------------------------------------------------------------
/library/src/main/res/drawable-hdpi/progress_small.xml:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/library/src/main/res/drawable/progress.xml:
--------------------------------------------------------------------------------
1 |
3 |
5 |
7 |
8 |
--------------------------------------------------------------------------------
/library/src/main/res/layout/auto_footer.xml:
--------------------------------------------------------------------------------
1 |
5 |
6 |
12 |
13 |
19 |
20 |
24 |
25 |
35 |
36 |
40 |
41 |
42 |
43 |
44 |
--------------------------------------------------------------------------------
/library/src/main/res/layout/default_footer.xml:
--------------------------------------------------------------------------------
1 |
4 |
5 |
9 |
10 |
16 |
17 |
25 |
26 |
27 |
--------------------------------------------------------------------------------
/library/src/main/res/layout/default_header.xml:
--------------------------------------------------------------------------------
1 |
6 |
7 |
10 |
11 |
18 |
19 |
26 |
27 |
31 |
32 |
38 |
39 |
46 |
47 |
48 |
49 |
56 |
57 |
66 |
67 |
68 |
--------------------------------------------------------------------------------
/library/src/main/res/values/attrs.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
--------------------------------------------------------------------------------
/library/src/main/res/values/strings.xml:
--------------------------------------------------------------------------------
1 |
2 | SpringView
3 |
4 |
--------------------------------------------------------------------------------
/screenshot/1459212323072.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/liaoinstan/SpringView/0a24d3e9ddc5ca4fa35e1ac26e6db448aacc1a18/screenshot/1459212323072.gif
--------------------------------------------------------------------------------
/screenshot/1459212323072_s.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/liaoinstan/SpringView/0a24d3e9ddc5ca4fa35e1ac26e6db448aacc1a18/screenshot/1459212323072_s.gif
--------------------------------------------------------------------------------
/screenshot/1459212372609.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/liaoinstan/SpringView/0a24d3e9ddc5ca4fa35e1ac26e6db448aacc1a18/screenshot/1459212372609.gif
--------------------------------------------------------------------------------
/screenshot/1459212372609_s.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/liaoinstan/SpringView/0a24d3e9ddc5ca4fa35e1ac26e6db448aacc1a18/screenshot/1459212372609_s.gif
--------------------------------------------------------------------------------
/screenshot/1459212462800.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/liaoinstan/SpringView/0a24d3e9ddc5ca4fa35e1ac26e6db448aacc1a18/screenshot/1459212462800.gif
--------------------------------------------------------------------------------
/screenshot/1459212462800_s.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/liaoinstan/SpringView/0a24d3e9ddc5ca4fa35e1ac26e6db448aacc1a18/screenshot/1459212462800_s.gif
--------------------------------------------------------------------------------
/screenshot/1459212485237.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/liaoinstan/SpringView/0a24d3e9ddc5ca4fa35e1ac26e6db448aacc1a18/screenshot/1459212485237.gif
--------------------------------------------------------------------------------
/screenshot/1459212485237_s.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/liaoinstan/SpringView/0a24d3e9ddc5ca4fa35e1ac26e6db448aacc1a18/screenshot/1459212485237_s.gif
--------------------------------------------------------------------------------
/screenshot/1459212517801.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/liaoinstan/SpringView/0a24d3e9ddc5ca4fa35e1ac26e6db448aacc1a18/screenshot/1459212517801.gif
--------------------------------------------------------------------------------
/screenshot/1459212517801_s.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/liaoinstan/SpringView/0a24d3e9ddc5ca4fa35e1ac26e6db448aacc1a18/screenshot/1459212517801_s.gif
--------------------------------------------------------------------------------
/screenshot/1459212658972.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/liaoinstan/SpringView/0a24d3e9ddc5ca4fa35e1ac26e6db448aacc1a18/screenshot/1459212658972.gif
--------------------------------------------------------------------------------
/screenshot/1459212658972_s.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/liaoinstan/SpringView/0a24d3e9ddc5ca4fa35e1ac26e6db448aacc1a18/screenshot/1459212658972_s.gif
--------------------------------------------------------------------------------
/screenshot/1459212769245.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/liaoinstan/SpringView/0a24d3e9ddc5ca4fa35e1ac26e6db448aacc1a18/screenshot/1459212769245.gif
--------------------------------------------------------------------------------
/screenshot/1459212769245_s.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/liaoinstan/SpringView/0a24d3e9ddc5ca4fa35e1ac26e6db448aacc1a18/screenshot/1459212769245_s.gif
--------------------------------------------------------------------------------
/screenshot/auto_footer.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/liaoinstan/SpringView/0a24d3e9ddc5ca4fa35e1ac26e6db448aacc1a18/screenshot/auto_footer.gif
--------------------------------------------------------------------------------
/screenshot/auto_footer_s.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/liaoinstan/SpringView/0a24d3e9ddc5ca4fa35e1ac26e6db448aacc1a18/screenshot/auto_footer_s.gif
--------------------------------------------------------------------------------
/screenshot/du_header.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/liaoinstan/SpringView/0a24d3e9ddc5ca4fa35e1ac26e6db448aacc1a18/screenshot/du_header.gif
--------------------------------------------------------------------------------
/screenshot/du_header_s.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/liaoinstan/SpringView/0a24d3e9ddc5ca4fa35e1ac26e6db448aacc1a18/screenshot/du_header_s.gif
--------------------------------------------------------------------------------
/screenshot/springview.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/liaoinstan/SpringView/0a24d3e9ddc5ca4fa35e1ac26e6db448aacc1a18/screenshot/springview.png
--------------------------------------------------------------------------------
/screenshot/weixin_header.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/liaoinstan/SpringView/0a24d3e9ddc5ca4fa35e1ac26e6db448aacc1a18/screenshot/weixin_header.gif
--------------------------------------------------------------------------------
/screenshot/weixin_header_s.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/liaoinstan/SpringView/0a24d3e9ddc5ca4fa35e1ac26e6db448aacc1a18/screenshot/weixin_header_s.gif
--------------------------------------------------------------------------------
/screenshot/weixin_header_v2.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/liaoinstan/SpringView/0a24d3e9ddc5ca4fa35e1ac26e6db448aacc1a18/screenshot/weixin_header_v2.gif
--------------------------------------------------------------------------------
/screenshot/weixin_header_v2_s.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/liaoinstan/SpringView/0a24d3e9ddc5ca4fa35e1ac26e6db448aacc1a18/screenshot/weixin_header_v2_s.gif
--------------------------------------------------------------------------------
/settings.gradle:
--------------------------------------------------------------------------------
1 | include ':library', ':demo', ':header_ali', ':header_meituan', ':header_rotation', ':header_acfun', ':header_weixin', ':header_wangyi', ':header_du'
2 |
--------------------------------------------------------------------------------