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..72ce235 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,9 +76,12 @@ 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) { titleMaxScrollHeight = ((View) tv_title.getParent()).getBottom() - tv_title.getTop(); @@ -99,6 +103,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 +114,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; }