├── .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 |