From 609f7df00c285efebabdf5144c266f5284194ae5 Mon Sep 17 00:00:00 2001 From: liaoinstan Date: Fri, 1 Apr 2016 09:55:57 +0800 Subject: [PATCH 001/145] show gif --- library/build.gradle | 2 +- .../liaoinstan/springview/widget/SpringView.java | 16 ++++++++-------- 2 files changed, 9 insertions(+), 9 deletions(-) diff --git a/library/build.gradle b/library/build.gradle index e82d70e..86d570d 100644 --- a/library/build.gradle +++ b/library/build.gradle @@ -2,7 +2,7 @@ apply plugin: 'com.android.library' apply plugin: 'com.github.dcendents.android-maven' apply plugin: 'com.jfrog.bintray' -version = "1.2.0" // #CONFIG# // project version +version = "1.2.1" // #CONFIG# // project version android { compileSdkVersion 23 diff --git a/library/src/main/java/com/liaoinstan/springview/widget/SpringView.java b/library/src/main/java/com/liaoinstan/springview/widget/SpringView.java index 173cbed..43acc4d 100644 --- a/library/src/main/java/com/liaoinstan/springview/widget/SpringView.java +++ b/library/src/main/java/com/liaoinstan/springview/widget/SpringView.java @@ -6,18 +6,14 @@ import android.support.v4.view.MotionEventCompat; import android.support.v4.view.ViewCompat; import android.util.AttributeSet; -import android.util.Log; import android.view.LayoutInflater; import android.view.MotionEvent; import android.view.View; import android.view.ViewGroup; import android.view.animation.Animation; import android.view.animation.TranslateAnimation; -import android.widget.AbsListView; -import android.widget.Adapter; import android.widget.ListView; import android.widget.OverScroller; -import android.widget.ScrollView; import com.liaoinstan.springview.R; @@ -199,6 +195,9 @@ public boolean dispatchTouchEvent(MotionEvent event) { switch (action){ case MotionEvent.ACTION_DOWN: mfirstY = event.getY(); + boolean isTop = isChildScrollToTop(); + boolean isBottom = isChildScrollToBottomFull(isFullEnable); + if (isTop||isBottom) isNeedMyMove = false; break; case MotionEvent.ACTION_MOVE: dsY += dy; @@ -285,6 +284,7 @@ public boolean onTouchEvent(MotionEvent event) { _firstDrag = true; restSmartPosition(); dsY = 0; + dy = 0; break; case MotionEvent.ACTION_CANCEL: break; @@ -473,12 +473,12 @@ private boolean isNeedMyMove(float dy) { boolean isBottom = isChildScrollToBottomFull(isFullEnable); //false不满一屏也算在底部,true不满一屏不算在底部 if (type==Type.OVERLAP){ if (header!=null) { - if (isTop && dy >= 0 || contentView.getTop() > 0 + 20) { + if (isTop && dy > 0 || contentView.getTop() > 0 + 20) { return true; } } if (footer!=null) { - if (isBottom && dy <= 0 || contentView.getBottom() < mRect.bottom - 20) { + if (isBottom && dy < 0 || contentView.getBottom() < mRect.bottom - 20) { // if (isFullScrean()&&!isFullEnable) // return true; // else @@ -489,12 +489,12 @@ private boolean isNeedMyMove(float dy) { }else if(type==Type.FOLLOW){ if (header!=null) { //其中的20是一个防止触摸误差的偏移量 - if (isTop && dy >= 0 || getScrollY() < 0 - 20) { + if (isTop && dy > 0 || getScrollY() < 0 - 20) { return true; } } if (footer!=null) { - if (isBottom && dy <= 0 || getScrollY() > 0 + 20) { + if (isBottom && dy < 0 || getScrollY() > 0 + 20) { return true; } } From fc29588496ad5c0ffe2e84ed946d66157c8bfea6 Mon Sep 17 00:00:00 2001 From: liaoinstan Date: Fri, 1 Apr 2016 10:01:20 +0800 Subject: [PATCH 002/145] Update README.md --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 178d416..3639c79 100644 --- a/README.md +++ b/README.md @@ -66,7 +66,7 @@ springView.setListener(new SpringView.OnFreshListener() { 使用 Gradle: ``` dependencies { - compile 'com.liaoinstan.springview:library:1.2.0' + compile 'com.liaoinstan.springview:library:1.2.1' } ``` 或者 Maven: @@ -74,7 +74,7 @@ dependencies { com.liaoinstan.springview library - 1.2.0 + 1.2.1 pom ``` From 332211b62a7d2ff254e8321e82d38fcdc3c18552 Mon Sep 17 00:00:00 2001 From: liaoinstan Date: Thu, 28 Apr 2016 10:02:09 +0800 Subject: [PATCH 003/145] update README --- README.md | 42 +++++++++++----------- README_CN.md | 91 +++++++++++++++++++++++++++++++++++++++++++++++ demo/build.gradle | 2 +- 3 files changed, 113 insertions(+), 22 deletions(-) create mode 100644 README_CN.md diff --git a/README.md b/README.md index 3639c79..fcf3208 100644 --- a/README.md +++ b/README.md @@ -1,18 +1,18 @@ -更多请移步至:[我的CSDN博客](http://blog.csdn.net/liaoinstan/article/details/51023907)     apk演示:[点击下载](https://github.com/liaoinstan/SpringView/blob/master/apk/demo-debug.apk?raw=true) +More, please visit:[My CSDN](http://blog.csdn.net/liaoinstan/article/details/51023907)     apk demo:[download](https://github.com/liaoinstan/SpringView/blob/master/apk/demo-debug.apk?raw=true)     中文文档:[中文文档](https://github.com/liaoinstan/SpringView/blob/master/README_CN.md) SpringView ===== -**SpringView** 是一个提供了上下拖拽的功能组件,能够进行高度自定义,实现各种下拉\上拉动画效果,demo里实现了:仿阿里旅行、仿美团,仿QQ下拉刷红包,仿acfun等,完全兼容源生控件如ListView、RecyclerView、ScrollView、WebView等,使用简单,轻易定制自己风格的拖拽页面 +**SpringView** is one provides the function of the upper and lower drag and drop components, can be highly customized, implement all kinds of drop-down \ pull painting effect, implementation in the demo: imitation ali travel, imitation Meituan, imitation QQ drop-down brush red envelopes, imitation acfun etc., is fully compatible with the source control such as ListView, RecyclerView, ScrollView, WebView, etc., using a simple, easily customize their style of drag and drop page ![这里写图片描述](https://github.com/liaoinstan/SpringView/blob/master/screenshot/springview.png) -**SpringView** 单独将头部/尾部独立出来,几乎可是实现任何你想要的效果,只需要继承BaseHeader(或Footer)实现接口 +**SpringView** Individual independence will head/foot, almost achieve the effect of whatever you want, just need to inherit BaseHeader (or Footer) to implement the interface -**SpringView** 能动态地替换头部/尾部,只需要设置不同的头尾即可:springView.setHeader(MyHeader()); +**SpringView** Can dynamically replace the head/tail, you just need to set up different Footer:springView.setHeader(MyHeader()); -**SpringView** 支持多点触控,可以两只手连续拖拽,你可以定制一些有趣味的效果 +**SpringView** Multi-touch support, can two hands drag and drop in a row, you can customize some interesting results -**SpringView** 提供了2种拖拽方式(重叠和跟随),可以动态地切换 +**SpringView** Provides two methods for drag and drop (overlap and follow), can be dynamically switching -**SpringView** 为不想去自定义头/尾的懒人提供了7种默认的实现(模仿了阿里,腾讯,美团等多种风格)如下,还会继续增加 +**SpringView** For lazy people don't want to go to the custom head/tail provides 7 kinds of the default implementation (mimics the ali, tencent, Meituan etc. Various style) as follows, will continue to increase     @@ -21,10 +21,10 @@ SpringView ![这里写图片描述](https://github.com/liaoinstan/SpringView/blob/master/screenshot/1459212517801_s.gif) ![这里写图片描述](https://github.com/liaoinstan/SpringView/blob/master/screenshot/1459212658972_s.gif) ![这里写图片描述](https://github.com/liaoinstan/SpringView/blob/master/screenshot/1459212769245_s.gif) -**如何使用 SpringView** +**How to use SpringView** -------- -在布局文件中添加SpringView,注意SpringView和ScrollView有同样的限制:只能有一个子元素: +Add Spring View in the layout file, note that Spring View and ScrollView have the same limitation: only one child element: ``` ``` -当然,你也可以不再布局中设置,使用代码动态添加: +Of course, you also can not in the layout setting, use the code dynamically added: ``` springView.setHeader(new DefaultHeader(this)); springView.setFooter(new DefaultFooter(this)); ``` -**添加监听** +**Add Listener** -------- -如果需要处理的话,只需在代码中添加监听: +If you need to deal with the case, just add a listener in code: ``` springView.setListener(new SpringView.OnFreshListener() { @@ -61,15 +61,15 @@ springView.setListener(new SpringView.OnFreshListener() { }); ``` -**获取SpringView** +**Get SpringView** -------- -使用 Gradle: +use Gradle: ``` dependencies { compile 'com.liaoinstan.springview:library:1.2.1' } ``` -或者 Maven: +or Maven: ``` com.liaoinstan.springview @@ -79,13 +79,13 @@ dependencies { ``` -**反馈** +**Feedback** -------- -如果遇到问题或者好的建议,请反馈到我的邮箱:liaoinstan@outlook.com -或者在我的博客留言 +If there are any questions or Suggestions, please feedback to my email: liaoinstan@outlook.com +Or in my blog -如果觉得对你有用的话,点一下右上的星星赞一下吧 +If it works for you, click the upper right of the stars praise -**更多** +**More** -------- -更多请移步至:[我的CSDN博客](http://blog.csdn.net/liaoinstan) +More, please visit:[my CSDN blog](http://blog.csdn.net/liaoinstan) diff --git a/README_CN.md b/README_CN.md new file mode 100644 index 0000000..3639c79 --- /dev/null +++ b/README_CN.md @@ -0,0 +1,91 @@ +更多请移步至:[我的CSDN博客](http://blog.csdn.net/liaoinstan/article/details/51023907)     apk演示:[点击下载](https://github.com/liaoinstan/SpringView/blob/master/apk/demo-debug.apk?raw=true) + +SpringView +===== +**SpringView** 是一个提供了上下拖拽的功能组件,能够进行高度自定义,实现各种下拉\上拉动画效果,demo里实现了:仿阿里旅行、仿美团,仿QQ下拉刷红包,仿acfun等,完全兼容源生控件如ListView、RecyclerView、ScrollView、WebView等,使用简单,轻易定制自己风格的拖拽页面 +![这里写图片描述](https://github.com/liaoinstan/SpringView/blob/master/screenshot/springview.png) +**SpringView** 单独将头部/尾部独立出来,几乎可是实现任何你想要的效果,只需要继承BaseHeader(或Footer)实现接口 + +**SpringView** 能动态地替换头部/尾部,只需要设置不同的头尾即可:springView.setHeader(MyHeader()); + +**SpringView** 支持多点触控,可以两只手连续拖拽,你可以定制一些有趣味的效果 + +**SpringView** 提供了2种拖拽方式(重叠和跟随),可以动态地切换 + +**SpringView** 为不想去自定义头/尾的懒人提供了7种默认的实现(模仿了阿里,腾讯,美团等多种风格)如下,还会继续增加 +  +  + +![这里写图片描述](https://github.com/liaoinstan/SpringView/blob/master/screenshot/1459212323072_s.gif) ![这里写图片描述](https://github.com/liaoinstan/SpringView/blob/master/screenshot/1459212372609_s.gif) +![这里写图片描述](https://github.com/liaoinstan/SpringView/blob/master/screenshot/1459212462800_s.gif) ![这里写图片描述](https://github.com/liaoinstan/SpringView/blob/master/screenshot/1459212485237_s.gif) +![这里写图片描述](https://github.com/liaoinstan/SpringView/blob/master/screenshot/1459212517801_s.gif) ![这里写图片描述](https://github.com/liaoinstan/SpringView/blob/master/screenshot/1459212658972_s.gif) +![这里写图片描述](https://github.com/liaoinstan/SpringView/blob/master/screenshot/1459212769245_s.gif) + +**如何使用 SpringView** +-------- + +在布局文件中添加SpringView,注意SpringView和ScrollView有同样的限制:只能有一个子元素: + +``` + + + + + +``` +当然,你也可以不再布局中设置,使用代码动态添加: + +``` + springView.setHeader(new DefaultHeader(this)); + springView.setFooter(new DefaultFooter(this)); +``` + +**添加监听** +-------- +如果需要处理的话,只需在代码中添加监听: + +``` +springView.setListener(new SpringView.OnFreshListener() { + @Override + public void onRefresh() { + } + @Override + public void onLoadmore() { + } +}); +``` + +**获取SpringView** +-------- +使用 Gradle: +``` +dependencies { + compile 'com.liaoinstan.springview:library:1.2.1' +} +``` +或者 Maven: +``` + + com.liaoinstan.springview + library + 1.2.1 + pom + +``` + +**反馈** +-------- +如果遇到问题或者好的建议,请反馈到我的邮箱:liaoinstan@outlook.com +或者在我的博客留言 + +如果觉得对你有用的话,点一下右上的星星赞一下吧 + +**更多** +-------- +更多请移步至:[我的CSDN博客](http://blog.csdn.net/liaoinstan) diff --git a/demo/build.gradle b/demo/build.gradle index c9e373e..afb4b86 100644 --- a/demo/build.gradle +++ b/demo/build.gradle @@ -27,6 +27,6 @@ dependencies { compile 'com.android.support:appcompat-v7:23.2.0' compile 'com.android.support:design:23.2.0' - compile 'com.liaoinstan.springview:library:1.2.0' + compile 'com.liaoinstan.springview:library:1.2.1' // compile project(':library') } From 694eb008732b3a58e5822e2f5db0d003e06ea402 Mon Sep 17 00:00:00 2001 From: liaoinstan Date: Thu, 28 Apr 2016 10:10:09 +0800 Subject: [PATCH 004/145] Update README_CN.md --- README_CN.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README_CN.md b/README_CN.md index 3639c79..c426a48 100644 --- a/README_CN.md +++ b/README_CN.md @@ -1,4 +1,4 @@ -更多请移步至:[我的CSDN博客](http://blog.csdn.net/liaoinstan/article/details/51023907)     apk演示:[点击下载](https://github.com/liaoinstan/SpringView/blob/master/apk/demo-debug.apk?raw=true) +更多请移步至:[我的CSDN博客](http://blog.csdn.net/liaoinstan/article/details/51023907)     apk演示:[点击下载](https://github.com/liaoinstan/SpringView/blob/master/apk/demo-debug.apk?raw=true)     English document:[English document](https://github.com/liaoinstan/SpringView/blob/master/README.md) SpringView ===== From 260d3c5002b3ce22884aed68fbe5bedd55dff81b Mon Sep 17 00:00:00 2001 From: liaoinstan Date: Thu, 28 Apr 2016 10:12:28 +0800 Subject: [PATCH 005/145] Update README_CN.md --- README_CN.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/README_CN.md b/README_CN.md index c426a48..e0557bf 100644 --- a/README_CN.md +++ b/README_CN.md @@ -16,10 +16,10 @@ SpringView     -![这里写图片描述](https://github.com/liaoinstan/SpringView/blob/master/screenshot/1459212323072_s.gif) ![这里写图片描述](https://github.com/liaoinstan/SpringView/blob/master/screenshot/1459212372609_s.gif) -![这里写图片描述](https://github.com/liaoinstan/SpringView/blob/master/screenshot/1459212462800_s.gif) ![这里写图片描述](https://github.com/liaoinstan/SpringView/blob/master/screenshot/1459212485237_s.gif) -![这里写图片描述](https://github.com/liaoinstan/SpringView/blob/master/screenshot/1459212517801_s.gif) ![这里写图片描述](https://github.com/liaoinstan/SpringView/blob/master/screenshot/1459212658972_s.gif) -![这里写图片描述](https://github.com/liaoinstan/SpringView/blob/master/screenshot/1459212769245_s.gif) +![这里写图片描述](https://github.com/liaoinstan/SpringView/blob/master/screenshot/1459212323072.gif) ![这里写图片描述](https://github.com/liaoinstan/SpringView/blob/master/screenshot/1459212372609.gif) +![这里写图片描述](https://github.com/liaoinstan/SpringView/blob/master/screenshot/1459212462800.gif) ![这里写图片描述](https://github.com/liaoinstan/SpringView/blob/master/screenshot/1459212485237.gif) +![这里写图片描述](https://github.com/liaoinstan/SpringView/blob/master/screenshot/1459212517801.gif) ![这里写图片描述](https://github.com/liaoinstan/SpringView/blob/master/screenshot/1459212658972.gif) +![这里写图片描述](https://github.com/liaoinstan/SpringView/blob/master/screenshot/1459212769245.gif) **如何使用 SpringView** -------- From ee7891f84747320172e0d3a2dc0e306a10ffd2f4 Mon Sep 17 00:00:00 2001 From: liaoinstan Date: Thu, 28 Apr 2016 10:16:25 +0800 Subject: [PATCH 006/145] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index fcf3208..e88cf84 100644 --- a/README.md +++ b/README.md @@ -84,7 +84,7 @@ or Maven: If there are any questions or Suggestions, please feedback to my email: liaoinstan@outlook.com Or in my blog -If it works for you, click the upper right of the stars praise +If it works for you, click the stars for my hardwork ,thank you **More** -------- From 81a02b125a288d1ded421cf4d730cf0fd2668c83 Mon Sep 17 00:00:00 2001 From: liaoinstan Date: Tue, 17 May 2016 23:48:17 +0800 Subject: [PATCH 007/145] Update SpringView.java MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 修复FOLLOW模式下刷新和加载操作回调多次的问题 --- .../liaoinstan/springview/widget/SpringView.java | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) diff --git a/library/src/main/java/com/liaoinstan/springview/widget/SpringView.java b/library/src/main/java/com/liaoinstan/springview/widget/SpringView.java index 43acc4d..318d0b7 100644 --- a/library/src/main/java/com/liaoinstan/springview/widget/SpringView.java +++ b/library/src/main/java/com/liaoinstan/springview/widget/SpringView.java @@ -6,6 +6,7 @@ import android.support.v4.view.MotionEventCompat; import android.support.v4.view.ViewCompat; import android.util.AttributeSet; +import android.util.Log; import android.view.LayoutInflater; import android.view.MotionEvent; import android.view.View; @@ -194,6 +195,8 @@ public boolean dispatchTouchEvent(MotionEvent event) { int action = event.getAction(); switch (action){ case MotionEvent.ACTION_DOWN: + hasCallFull = false; + hasCallRefresh = false; mfirstY = event.getY(); boolean isTop = isChildScrollToTop(); boolean isBottom = isChildScrollToBottomFull(isFullEnable); @@ -451,16 +454,25 @@ public void computeScroll() { invalidate(); } //在滚动动画完全结束后回调接口 + //滚动回调过程中mScroller.isFinished会多次返回true,导致判断条件被多次进入,设置标志位保证只调用一次 if (!isMoveNow && type==Type.FOLLOW && mScroller.isFinished()){ if (isFullAnim) { - callOnAfterFullAnim(); + if (!hasCallFull){ + hasCallFull = true; + callOnAfterFullAnim(); + } } else { - callOnAfterRefreshAnim(); + if (!hasCallRefresh) { + hasCallRefresh = true; + callOnAfterRefreshAnim(); + } } } } private int callFreshORload = 0; private boolean isFullAnim; + private boolean hasCallFull = false; + private boolean hasCallRefresh = false; /** * 判断是否需要由该控件来控制滑动事件 From d220c5c6f0bafb197af187d5a488368a258940b2 Mon Sep 17 00:00:00 2001 From: liaoinstan Date: Sun, 22 May 2016 16:39:43 +0800 Subject: [PATCH 008/145] Update README.md --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index e88cf84..a362b62 100644 --- a/README.md +++ b/README.md @@ -39,7 +39,7 @@ Add Spring View in the layout file, note that Spring View and ScrollView have th ``` -Of course, you also can not in the layout setting, use the code dynamically added: +Of course, you also can not add in the layout, use the code dynamically added: ``` springView.setHeader(new DefaultHeader(this)); @@ -84,7 +84,7 @@ or Maven: If there are any questions or Suggestions, please feedback to my email: liaoinstan@outlook.com Or in my blog -If it works for you, click the stars for my hardwork ,thank you +If it works to you, please give me a star for my hardwork ,thank you **More** -------- From 1e4387420cb6c5790d7d50dc9a6f1ba97555ad6b Mon Sep 17 00:00:00 2001 From: liaoinstan Date: Mon, 23 May 2016 13:10:59 +0800 Subject: [PATCH 009/145] test commit --- .idea/gradle.xml | 7 +++++++ .../com/liaoinstan/demospring/demo1/Demo1Activity.java | 1 + 2 files changed, 8 insertions(+) diff --git a/.idea/gradle.xml b/.idea/gradle.xml index aff7781..0e9eab9 100644 --- a/.idea/gradle.xml +++ b/.idea/gradle.xml @@ -13,6 +13,13 @@ + diff --git a/demo/src/main/java/com/liaoinstan/demospring/demo1/Demo1Activity.java b/demo/src/main/java/com/liaoinstan/demospring/demo1/Demo1Activity.java index e48db4f..f804a4b 100644 --- a/demo/src/main/java/com/liaoinstan/demospring/demo1/Demo1Activity.java +++ b/demo/src/main/java/com/liaoinstan/demospring/demo1/Demo1Activity.java @@ -12,6 +12,7 @@ public class Demo1Activity extends AppCompatActivity { + private SpringView springView; @Override From 23e0ca491c39adbecc92e47f82c7b383e678e3d1 Mon Sep 17 00:00:00 2001 From: liaoinstan Date: Wed, 25 May 2016 13:04:11 +0800 Subject: [PATCH 010/145] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index a362b62..0d754dc 100644 --- a/README.md +++ b/README.md @@ -66,7 +66,7 @@ springView.setListener(new SpringView.OnFreshListener() { use Gradle: ``` dependencies { - compile 'com.liaoinstan.springview:library:1.2.1' + compile 'com.liaoinstan.springview:library:1.2.2' } ``` or Maven: From 83f0a7b5f8a6184c53b6706e4d08c7e7df5f594d Mon Sep 17 00:00:00 2001 From: liaoinstan Date: Wed, 25 May 2016 13:04:28 +0800 Subject: [PATCH 011/145] Update README_CN.md --- README_CN.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README_CN.md b/README_CN.md index e0557bf..94322c9 100644 --- a/README_CN.md +++ b/README_CN.md @@ -66,7 +66,7 @@ springView.setListener(new SpringView.OnFreshListener() { 使用 Gradle: ``` dependencies { - compile 'com.liaoinstan.springview:library:1.2.1' + compile 'com.liaoinstan.springview:library:1.2.2' } ``` 或者 Maven: From 0f95c8684a7476ebd7ed52eb26c8816a64a1c83a Mon Sep 17 00:00:00 2001 From: liaoinstan Date: Wed, 25 May 2016 16:15:11 +0800 Subject: [PATCH 012/145] call refresh --- .idea/compiler.xml | 2 +- .idea/encodings.xml | 16 +-- .idea/gradle.xml | 1 - .idea/misc.xml | 18 +-- demo/build.gradle | 4 +- .../demospring/ApplicationTest.java | 13 -- demo/src/main/AndroidManifest.xml | 26 ++-- .../liaoinstan/demospring/MainActivity.java | 6 + .../demospring/demo7/Demo7Activity.java | 2 + .../demospring/demo8/Demo8Activity.java | 131 ++++++++++++++++++ .../demospring/demo8/MyItemTouchCallback.java | 75 ++++++++++ .../demospring/test/TestActivity.java | 1 + demo/src/main/res/layout/activity_demo7.xml | 1 - demo/src/main/res/layout/activity_demo8.xml | 47 +++++++ demo/src/main/res/layout/activity_main.xml | 6 + demo/src/main/res/values/strings.xml | 1 + .../demospring/ExampleUnitTest.java | 15 -- library/build.gradle | 2 +- .../springview/ApplicationTest.java | 13 -- .../springview/widget/SpringView.java | 55 +++++++- .../springview/ExampleUnitTest.java | 15 -- 21 files changed, 343 insertions(+), 107 deletions(-) delete mode 100644 demo/src/androidTest/java/com/liaoinstan/demospring/ApplicationTest.java create mode 100644 demo/src/main/java/com/liaoinstan/demospring/demo8/Demo8Activity.java create mode 100644 demo/src/main/java/com/liaoinstan/demospring/demo8/MyItemTouchCallback.java create mode 100644 demo/src/main/res/layout/activity_demo8.xml delete mode 100644 demo/src/test/java/com/liaoinstan/demospring/ExampleUnitTest.java delete mode 100644 library/src/androidTest/java/com/liaoinstan/springview/ApplicationTest.java delete mode 100644 library/src/test/java/com/liaoinstan/springview/ExampleUnitTest.java diff --git a/.idea/compiler.xml b/.idea/compiler.xml index 96cc43e..9a8b7e5 100644 --- a/.idea/compiler.xml +++ b/.idea/compiler.xml @@ -1,6 +1,7 @@ + - + - - - - - 1.7 - - - - - - - \ No newline at end of file diff --git a/demo/build.gradle b/demo/build.gradle index afb4b86..cca1efe 100644 --- a/demo/build.gradle +++ b/demo/build.gradle @@ -27,6 +27,6 @@ dependencies { compile 'com.android.support:appcompat-v7:23.2.0' compile 'com.android.support:design:23.2.0' - compile 'com.liaoinstan.springview:library:1.2.1' -// compile project(':library') +// compile 'com.liaoinstan.springview:library:1.2.2' + compile project(':library') } diff --git a/demo/src/androidTest/java/com/liaoinstan/demospring/ApplicationTest.java b/demo/src/androidTest/java/com/liaoinstan/demospring/ApplicationTest.java deleted file mode 100644 index ea54fac..0000000 --- a/demo/src/androidTest/java/com/liaoinstan/demospring/ApplicationTest.java +++ /dev/null @@ -1,13 +0,0 @@ -package com.liaoinstan.demospring; - -import android.app.Application; -import android.test.ApplicationTestCase; - -/** - * Testing Fundamentals - */ -public class ApplicationTest extends ApplicationTestCase { - public ApplicationTest() { - super(Application.class); - } -} \ No newline at end of file diff --git a/demo/src/main/AndroidManifest.xml b/demo/src/main/AndroidManifest.xml index 3d21d34..aecf363 100644 --- a/demo/src/main/AndroidManifest.xml +++ b/demo/src/main/AndroidManifest.xml @@ -2,7 +2,7 @@ - + + android:theme="@style/AppTheme.NoActionBar" /> + android:theme="@style/AppTheme.NoActionBar" /> + android:theme="@style/AppTheme.NoActionBar" /> + android:theme="@style/AppTheme.NoActionBar" /> + android:theme="@style/AppTheme.NoActionBar" /> + android:theme="@style/AppTheme.NoActionBar" /> + android:theme="@style/AppTheme.NoActionBar" /> + + android:theme="@style/AppTheme.NoActionBar" /> + android:theme="@style/AppTheme.NoActionBar" /> + - + \ No newline at end of file diff --git a/demo/src/main/java/com/liaoinstan/demospring/MainActivity.java b/demo/src/main/java/com/liaoinstan/demospring/MainActivity.java index 665ec57..47c010a 100644 --- a/demo/src/main/java/com/liaoinstan/demospring/MainActivity.java +++ b/demo/src/main/java/com/liaoinstan/demospring/MainActivity.java @@ -12,6 +12,7 @@ import com.liaoinstan.demospring.demo3.Demo3Activity; import com.liaoinstan.demospring.demo7.Demo7Activity; import com.liaoinstan.demospring.demo4.Demo4Activity; +import com.liaoinstan.demospring.demo8.Demo8Activity; import com.liaoinstan.demospring.test.TestActivity; import com.liaoinstan.demospring.warning.WarningActivity; @@ -28,6 +29,7 @@ protected void onCreate(Bundle savedInstanceState) { findViewById(R.id.demo5).setOnClickListener(this); findViewById(R.id.demo6).setOnClickListener(this); findViewById(R.id.demo7).setOnClickListener(this); + findViewById(R.id.demo8).setOnClickListener(this); findViewById(R.id.warning).setOnClickListener(this); findViewById(R.id.test).setOnClickListener(this); } @@ -64,6 +66,10 @@ public void onClick(View v) { intent.setClass(this,Demo7Activity.class); startActivity(intent); break; + case R.id.demo8: + intent.setClass(this,Demo8Activity.class); + startActivity(intent); + break; case R.id.warning: intent.setClass(this, WarningActivity.class); startActivity(intent); diff --git a/demo/src/main/java/com/liaoinstan/demospring/demo7/Demo7Activity.java b/demo/src/main/java/com/liaoinstan/demospring/demo7/Demo7Activity.java index 117fd7e..e4cb298 100644 --- a/demo/src/main/java/com/liaoinstan/demospring/demo7/Demo7Activity.java +++ b/demo/src/main/java/com/liaoinstan/demospring/demo7/Demo7Activity.java @@ -6,6 +6,8 @@ import android.os.Handler; import android.support.v7.app.AppCompatActivity; import android.support.v7.widget.Toolbar; +import android.util.Log; +import android.view.View; import com.liaoinstan.demospring.R; import com.liaoinstan.springview.container.MeituanFooter; diff --git a/demo/src/main/java/com/liaoinstan/demospring/demo8/Demo8Activity.java b/demo/src/main/java/com/liaoinstan/demospring/demo8/Demo8Activity.java new file mode 100644 index 0000000..d6b0cae --- /dev/null +++ b/demo/src/main/java/com/liaoinstan/demospring/demo8/Demo8Activity.java @@ -0,0 +1,131 @@ +package com.liaoinstan.demospring.demo8; + +import android.content.Context; +import android.os.Handler; +import android.support.v7.app.AppCompatActivity; +import android.os.Bundle; +import android.support.v7.widget.LinearLayoutManager; +import android.support.v7.widget.RecyclerView; +import android.support.v7.widget.Toolbar; +import android.support.v7.widget.helper.ItemTouchHelper; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.TextView; + +import com.liaoinstan.demospring.R; +import com.liaoinstan.springview.container.DefaultFooter; +import com.liaoinstan.springview.container.DefaultHeader; +import com.liaoinstan.springview.widget.SpringView; + +import java.util.ArrayList; +import java.util.List; + +public class Demo8Activity extends AppCompatActivity { + private List mDatas = new ArrayList(); + private SpringView springView; + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_demo8); + Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); + setSupportActionBar(toolbar); + + initData(); + + springView = (SpringView) findViewById(R.id.springview); + springView.setType(SpringView.Type.FOLLOW); + springView.setListener(new SpringView.OnFreshListener() { + @Override + public void onRefresh() { + new Handler().postDelayed(new Runnable() { + @Override + public void run() { + springView.onFinishFreshAndLoad(); + } + }, 1000); + } + + @Override + public void onLoadmore() { + new Handler().postDelayed(new Runnable() { + @Override + public void run() { + springView.onFinishFreshAndLoad(); + } + }, 1000); + } + }); + springView.setHeader(new DefaultHeader(this)); + springView.setFooter(new DefaultFooter(this)); + + RecyclerView recyclerView = (RecyclerView) findViewById(R.id.recycle); + recyclerView.setHasFixedSize(true); + RecyclerAdapter recyclerAdapter = new RecyclerAdapter(R.layout.item, mDatas); + recyclerView.setAdapter(recyclerAdapter); + recyclerView.setLayoutManager(new LinearLayoutManager(this)); + + final ItemTouchHelper itemTouchHelper = new ItemTouchHelper(new MyItemTouchCallback(recyclerAdapter)); + itemTouchHelper.attachToRecyclerView(recyclerView); + } + + private void initData(){ + for (int i = 0; i < 20; i++) { + mDatas.add(i==0?"SpringView处理了水平滑动的手势冲突,侧滑删除试试":"item"+i); + } + } + + private class RecyclerAdapter extends RecyclerView.Adapter implements MyItemTouchCallback.ItemTouchAdapter { + + private Context context; + private int src; + private List results; + + public RecyclerAdapter(int src, List results){ + this.results = results; + this.src = src; + } + + @Override + public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { + this.context = parent.getContext(); + View itemView = LayoutInflater.from(parent.getContext()).inflate(src, parent, false); + return new MyViewHolder(itemView); + } + + @Override + public void onBindViewHolder(final MyViewHolder holder, int position) { + holder.textView.setText(results.get(position)); + } + + @Override + public int getItemCount() { + return results.size(); + } + + @Override + public void onMove(int fromPosition, int toPosition) { + } + + @Override + public void onSwiped(int position) { + results.remove(position); + notifyItemRemoved(position); + } + + public class MyViewHolder extends RecyclerView.ViewHolder{ + + public TextView textView; + + public MyViewHolder(View itemView) { + super(itemView); + ViewGroup.LayoutParams layoutParams = itemView.getLayoutParams(); + layoutParams.height = 100; + itemView.setLayoutParams(layoutParams); + textView = (TextView) itemView.findViewById(R.id.item_text); + } + } + } + +} diff --git a/demo/src/main/java/com/liaoinstan/demospring/demo8/MyItemTouchCallback.java b/demo/src/main/java/com/liaoinstan/demospring/demo8/MyItemTouchCallback.java new file mode 100644 index 0000000..09bd969 --- /dev/null +++ b/demo/src/main/java/com/liaoinstan/demospring/demo8/MyItemTouchCallback.java @@ -0,0 +1,75 @@ +package com.liaoinstan.demospring.demo8; + +import android.graphics.Canvas; +import android.graphics.Color; +import android.graphics.drawable.Drawable; +import android.support.v7.widget.GridLayoutManager; +import android.support.v7.widget.RecyclerView; +import android.support.v7.widget.helper.ItemTouchHelper; + +/** + * Created by Administrator on 2016/4/12. + * 实现侧滑删除功能 + */ +public class MyItemTouchCallback extends ItemTouchHelper.Callback { + + private ItemTouchAdapter itemTouchAdapter; + public MyItemTouchCallback(ItemTouchAdapter itemTouchAdapter){ + this.itemTouchAdapter = itemTouchAdapter; + } + + @Override + public boolean isLongPressDragEnabled() { + return false; + } + + @Override + public boolean isItemViewSwipeEnabled() { + return true; + } + + + @Override + public int getMovementFlags(RecyclerView recyclerView, RecyclerView.ViewHolder viewHolder) { + if (recyclerView.getLayoutManager() instanceof GridLayoutManager) { + final int dragFlags = ItemTouchHelper.UP | ItemTouchHelper.DOWN | ItemTouchHelper.LEFT | ItemTouchHelper.RIGHT; + final int swipeFlags = 0; + return makeMovementFlags(dragFlags, swipeFlags); + } else { + final int dragFlags = ItemTouchHelper.UP | ItemTouchHelper.DOWN; + final int swipeFlags = ItemTouchHelper.START | ItemTouchHelper.END; + return makeMovementFlags(dragFlags, swipeFlags); + } + } + + @Override + public boolean onMove(RecyclerView recyclerView, RecyclerView.ViewHolder viewHolder, RecyclerView.ViewHolder target) { + int fromPosition = viewHolder.getAdapterPosition();//得到拖动ViewHolder的position + int toPosition = target.getAdapterPosition();//得到目标ViewHolder的position + itemTouchAdapter.onMove(fromPosition,toPosition); + return true; + } + + @Override + public void onSwiped(RecyclerView.ViewHolder viewHolder, int direction) { + int position = viewHolder.getAdapterPosition(); + itemTouchAdapter.onSwiped(position); + } + + @Override + public void onChildDraw(Canvas c, RecyclerView recyclerView, RecyclerView.ViewHolder viewHolder, float dX, float dY, int actionState, boolean isCurrentlyActive) { + if (actionState == ItemTouchHelper.ACTION_STATE_SWIPE) { + //滑动时改变Item的透明度 + final float alpha = 1 - Math.abs(dX) / (float) viewHolder.itemView.getWidth(); + viewHolder.itemView.setAlpha(alpha); + viewHolder.itemView.setTranslationX(dX); + } else { + super.onChildDraw(c, recyclerView, viewHolder, dX, dY, actionState, isCurrentlyActive); + } + } + + public interface ItemTouchAdapter { + void onMove(int fromPosition, int toPosition); + void onSwiped(int position); + } +} diff --git a/demo/src/main/java/com/liaoinstan/demospring/test/TestActivity.java b/demo/src/main/java/com/liaoinstan/demospring/test/TestActivity.java index f9642f6..cdfb9fb 100644 --- a/demo/src/main/java/com/liaoinstan/demospring/test/TestActivity.java +++ b/demo/src/main/java/com/liaoinstan/demospring/test/TestActivity.java @@ -3,6 +3,7 @@ import android.app.Activity; import android.os.Bundle; import android.os.Handler; +import android.view.View; import android.widget.RadioGroup; import android.widget.Toast; diff --git a/demo/src/main/res/layout/activity_demo7.xml b/demo/src/main/res/layout/activity_demo7.xml index d938990..75e8d98 100644 --- a/demo/src/main/res/layout/activity_demo7.xml +++ b/demo/src/main/res/layout/activity_demo7.xml @@ -43,7 +43,6 @@ android:orientation="vertical" android:layout_width="match_parent" android:layout_height="match_parent"> - + + + + + + + + + + + + + + + + + + + diff --git a/demo/src/main/res/layout/activity_main.xml b/demo/src/main/res/layout/activity_main.xml index 81504c2..322c720 100644 --- a/demo/src/main/res/layout/activity_main.xml +++ b/demo/src/main/res/layout/activity_main.xml @@ -51,6 +51,12 @@ android:layout_height="50dp" android:text="demo7" /> +