From 38b825d089f3c4d333ac8347214e071cfb83a791 Mon Sep 17 00:00:00 2001 From: Minamo <137987751@qq.com> Date: Sat, 18 Feb 2017 02:30:48 +0800 Subject: [PATCH 1/2] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E6=BB=91=E5=8A=A8?= =?UTF-8?q?=E9=98=BB=E5=B0=BC=E7=B3=BB=E6=95=B0&=E5=A4=B4=E5=83=8F?= =?UTF-8?q?=E7=BC=A9=E6=94=BE=E6=95=88=E6=9E=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ScrollableLayout/app/build.gradle | 2 +- .../scrollablelayout/simple/MainActivity.java | 10 ++++++ .../main/res/layout/view_userinfo_header.xml | 1 + ScrollableLayout/build.gradle | 3 +- .../gradle/wrapper/gradle-wrapper.properties | 4 +-- ScrollableLayout/library/build.gradle | 5 ++- .../scrollablelayout/ScrollableLayout.java | 34 ++++++++++++++++--- 7 files changed, 47 insertions(+), 12 deletions(-) diff --git a/ScrollableLayout/app/build.gradle b/ScrollableLayout/app/build.gradle index 24ecb5b..84e73d2 100644 --- a/ScrollableLayout/app/build.gradle +++ b/ScrollableLayout/app/build.gradle @@ -2,7 +2,7 @@ apply plugin: 'com.android.application' android { compileSdkVersion 23 - buildToolsVersion "23.0.2" + buildToolsVersion '25.0.0' defaultConfig { applicationId "com.scrollablelayout.simple" diff --git a/ScrollableLayout/app/src/main/java/com/scrollablelayout/simple/MainActivity.java b/ScrollableLayout/app/src/main/java/com/scrollablelayout/simple/MainActivity.java index 4241d9e..5e6b2ca 100644 --- a/ScrollableLayout/app/src/main/java/com/scrollablelayout/simple/MainActivity.java +++ b/ScrollableLayout/app/src/main/java/com/scrollablelayout/simple/MainActivity.java @@ -9,6 +9,7 @@ import android.support.v4.app.FragmentPagerAdapter; import android.support.v4.view.ViewPager; import android.support.v7.app.AppCompatActivity; +import android.util.Log; import android.view.View; import android.view.Window; import android.view.WindowManager; @@ -75,11 +76,15 @@ private void initView() { iv_spit.setVisibility(View.GONE); tv_title.setTranslationY(-1000); + sl_root.setDamping(true); + sl_root.computeScroll(); sl_root.setOnScrollListener(new ScrollableLayout.OnScrollListener() { @Override public void onScroll(int translationY, int maxY) { + Log.d("onScroll",translationY+"/"+maxY); translationY = -translationY; if (titleMaxScrollHeight == 0) { + //头部bar的高度 titleMaxScrollHeight = ((View) tv_title.getParent()).getBottom() - tv_title.getTop(); maxScrollHeight = hearderMaxHeight + titleMaxScrollHeight; } @@ -99,6 +104,10 @@ public void onScroll(int translationY, int maxY) { } else { iv_spit.setVisibility(View.GONE); } + if (-translationY < hearderMaxHeight) { + iv_avatar.setScaleX((hearderMaxHeight+translationY)/hearderMaxHeight); + iv_avatar.setScaleY((hearderMaxHeight+translationY)/hearderMaxHeight); + } iv_spit.getBackground().setAlpha(alpha); @@ -106,6 +115,7 @@ public void onScroll(int translationY, int maxY) { } }); + pfl_root.setPullToRefresh(false); pfl_root.setEnabledNextPtrAtOnce(true); pfl_root.setLastUpdateTimeRelateObject(this); pfl_root.setPtrHandler(this); diff --git a/ScrollableLayout/app/src/main/res/layout/view_userinfo_header.xml b/ScrollableLayout/app/src/main/res/layout/view_userinfo_header.xml index 61ab9e2..519b7d9 100755 --- a/ScrollableLayout/app/src/main/res/layout/view_userinfo_header.xml +++ b/ScrollableLayout/app/src/main/res/layout/view_userinfo_header.xml @@ -15,6 +15,7 @@ android:id="@+id/iv_avatar_alpha" android:layout_width="wrap_content" android:layout_height="wrap_content" + android:visibility="gone" android:layout_alignBottom="@+id/iv_avatar" android:layout_alignLeft="@+id/iv_avatar" android:layout_alignRight="@+id/iv_avatar" diff --git a/ScrollableLayout/build.gradle b/ScrollableLayout/build.gradle index fa971f2..cc82ec9 100644 --- a/ScrollableLayout/build.gradle +++ b/ScrollableLayout/build.gradle @@ -5,8 +5,7 @@ buildscript { jcenter() } dependencies { - classpath 'com.android.tools.build:gradle:2.0.0' - classpath 'com.github.dcendents:android-maven-gradle-plugin:1.3' + classpath 'com.android.tools.build:gradle:2.3.0-beta4' // NOTE: Do not place your application dependencies here; they belong // in the individual module build.gradle files diff --git a/ScrollableLayout/gradle/wrapper/gradle-wrapper.properties b/ScrollableLayout/gradle/wrapper/gradle-wrapper.properties index 563cc97..b291b3c 100644 --- a/ScrollableLayout/gradle/wrapper/gradle-wrapper.properties +++ b/ScrollableLayout/gradle/wrapper/gradle-wrapper.properties @@ -1,6 +1,6 @@ -#Mon Apr 11 12:52:13 CST 2016 +#Sat Feb 18 02:24:10 CST 2017 distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-2.10-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-3.3-all.zip diff --git a/ScrollableLayout/library/build.gradle b/ScrollableLayout/library/build.gradle index 657e7dc..e41f71f 100644 --- a/ScrollableLayout/library/build.gradle +++ b/ScrollableLayout/library/build.gradle @@ -1,11 +1,10 @@ apply plugin: 'com.android.library' -apply plugin: 'com.github.dcendents.android-maven' group='com.github.w446108264' android { compileSdkVersion 23 - buildToolsVersion "23.0.2" + buildToolsVersion '25.0.0' defaultConfig { minSdkVersion 11 @@ -22,5 +21,5 @@ android { } dependencies { - compile 'com.android.support:recyclerview-v7:22.1.1' + compile 'com.android.support:recyclerview-v7:23.1.1' } diff --git a/ScrollableLayout/library/src/main/java/com/scrollablelayout/ScrollableLayout.java b/ScrollableLayout/library/src/main/java/com/scrollablelayout/ScrollableLayout.java index eae8f3c..49b97a5 100644 --- a/ScrollableLayout/library/src/main/java/com/scrollablelayout/ScrollableLayout.java +++ b/ScrollableLayout/library/src/main/java/com/scrollablelayout/ScrollableLayout.java @@ -53,6 +53,7 @@ public class ScrollableLayout extends LinearLayout { private int mCurY; private boolean isClickHead; + private boolean isDamping; private int mScrollMinY = 10; enum DIRECTION { @@ -76,7 +77,9 @@ public ScrollableHelper getHelper() { return mHelper; } - public ScrollableLayout(Context context) { this(context, null); } + public ScrollableLayout(Context context) { + this(context, null); + } public ScrollableLayout(Context context, AttributeSet attrs) { this(context, attrs, 0); @@ -98,7 +101,7 @@ public ScrollableLayout(Context context, AttributeSet attrs, int defStyleAttr) { @Override protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { mHeadView = getChildAt(0); - if(mHeadView != null){ + if (mHeadView != null) { measureChildWithMargins(mHeadView, widthMeasureSpec, 0, MeasureSpec.UNSPECIFIED, 0); maxY = mHeadView.getMeasuredHeight(); mHeadHeight = mHeadView.getMeasuredHeight(); @@ -184,6 +187,7 @@ public boolean dispatchTouchEvent(MotionEvent ev) { } break; case MotionEvent.ACTION_UP: + checkDamping(); if (flag2 && shiftY > shiftX && shiftY > mTouchSlop) { mVelocityTracker.computeCurrentVelocity(1000, mMaximumVelocity); float yVelocity = -mVelocityTracker.getYVelocity(); @@ -249,9 +253,10 @@ public void computeScroll() { } } else { if (mHelper.isTop()) { - int deltaY = (currY - mLastScrollerY); +/* int deltaY = (currY - mLastScrollerY); int toY = getScrollY() + deltaY; - scrollTo(0, toY); + scrollTo(0, toY);*/ + checkDamping(); if (mCurY <= minY) { mScroller.forceFinished(true); return; @@ -311,6 +316,27 @@ private void recycleVelocityTracker() { } } + + private void checkDamping() { + if(isDamping){ + if (isClickHead || !isSticked()) { + if (maxY / 2 < mCurY) { + scrollTo(0, mHeadHeight); + } else { + scrollTo(0, 0); + } + } + } + } + + public boolean isDamping() { + return isDamping; + } + + public void setDamping(boolean damping) { + isDamping = damping; + } + private void checkIsClickHead(int downY, int headHeight, int scrollY) { isClickHead = downY + scrollY <= headHeight; } From 4e201a0706a5ce6b95d2222a52e5a9ea5b803266 Mon Sep 17 00:00:00 2001 From: Minamo <137987751@qq.com> Date: Sat, 25 Feb 2017 03:46:08 +0800 Subject: [PATCH 2/2] del annotation --- .../src/main/java/com/scrollablelayout/simple/MainActivity.java | 1 - 1 file changed, 1 deletion(-) diff --git a/ScrollableLayout/app/src/main/java/com/scrollablelayout/simple/MainActivity.java b/ScrollableLayout/app/src/main/java/com/scrollablelayout/simple/MainActivity.java index 5e6b2ca..72ce235 100644 --- a/ScrollableLayout/app/src/main/java/com/scrollablelayout/simple/MainActivity.java +++ b/ScrollableLayout/app/src/main/java/com/scrollablelayout/simple/MainActivity.java @@ -84,7 +84,6 @@ public void onScroll(int translationY, int maxY) { Log.d("onScroll",translationY+"/"+maxY); translationY = -translationY; if (titleMaxScrollHeight == 0) { - //头部bar的高度 titleMaxScrollHeight = ((View) tv_title.getParent()).getBottom() - tv_title.getTop(); maxScrollHeight = hearderMaxHeight + titleMaxScrollHeight; }