From d687b8dfe8cd795237e62cb4eaa877f57708601c Mon Sep 17 00:00:00 2001 From: aber Date: Tue, 6 Sep 2016 22:06:54 +0800 Subject: [PATCH 1/9] update AndroidStudio to 2.2.0-rc1 update build tool to 24.0.2. update minSdk to 9 update gradle to 2.14.1 --- build.gradle | 2 +- drawer-behavior/build.gradle | 10 ++++++---- gradle/wrapper/gradle-wrapper.properties | 2 +- sample/build.gradle | 8 ++++---- 4 files changed, 12 insertions(+), 10 deletions(-) diff --git a/build.gradle b/build.gradle index 6588cd8..7dc85c9 100644 --- a/build.gradle +++ b/build.gradle @@ -3,6 +3,6 @@ buildscript { mavenCentral() } dependencies { - classpath 'com.android.tools.build:gradle:2.1.0' + classpath 'com.android.tools.build:gradle:2.2.0-rc1' } } diff --git a/drawer-behavior/build.gradle b/drawer-behavior/build.gradle index 73f791b..c99cd51 100644 --- a/drawer-behavior/build.gradle +++ b/drawer-behavior/build.gradle @@ -1,14 +1,16 @@ apply plugin: 'com.android.library' android { - compileSdkVersion 23 - buildToolsVersion '23.0.3' + compileSdkVersion 24 + buildToolsVersion '24.0.2' defaultConfig { - minSdkVersion 7 + minSdkVersion 9 + return 0 } + } dependencies { - compile 'com.android.support:design:23.4.0' + compile 'com.android.support:design:24.2.0' } diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index ab100c0..04e285f 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -3,4 +3,4 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-2.13-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-2.14.1-all.zip diff --git a/sample/build.gradle b/sample/build.gradle index fe4ff63..f423e43 100644 --- a/sample/build.gradle +++ b/sample/build.gradle @@ -1,13 +1,13 @@ apply plugin: 'com.android.application' android { - compileSdkVersion 23 - buildToolsVersion '23.0.3' + compileSdkVersion 24 + buildToolsVersion '24.0.2' defaultConfig { applicationId 'com.example.behavior.drawer' - minSdkVersion 7 - targetSdkVersion 23 + minSdkVersion 9 + targetSdkVersion 24 versionCode 1 versionName '1.0' } From 3687b924758b10cfbe3ddcaf885b66c2c98ec34f Mon Sep 17 00:00:00 2001 From: tianbing Date: Wed, 21 Sep 2016 14:02:32 +0800 Subject: [PATCH 2/9] update to android studio 2.2, add a string for this behavior --- build.gradle | 2 +- drawer-behavior/build.gradle | 2 +- drawer-behavior/src/main/res/values/strings.xml | 4 ++++ sample/src/main/res/layout/drawer_behavior.xml | 2 +- 4 files changed, 7 insertions(+), 3 deletions(-) create mode 100644 drawer-behavior/src/main/res/values/strings.xml diff --git a/build.gradle b/build.gradle index 7dc85c9..9677afb 100644 --- a/build.gradle +++ b/build.gradle @@ -3,6 +3,6 @@ buildscript { mavenCentral() } dependencies { - classpath 'com.android.tools.build:gradle:2.2.0-rc1' + classpath 'com.android.tools.build:gradle:2.2.0' } } diff --git a/drawer-behavior/build.gradle b/drawer-behavior/build.gradle index c99cd51..f9965c9 100644 --- a/drawer-behavior/build.gradle +++ b/drawer-behavior/build.gradle @@ -12,5 +12,5 @@ android { } dependencies { - compile 'com.android.support:design:24.2.0' + compile 'com.android.support:design:24.2.1' } diff --git a/drawer-behavior/src/main/res/values/strings.xml b/drawer-behavior/src/main/res/values/strings.xml new file mode 100644 index 0000000..e02e8f7 --- /dev/null +++ b/drawer-behavior/src/main/res/values/strings.xml @@ -0,0 +1,4 @@ + + + com.jakewharton.behavior.drawer.DrawerBehavior + \ No newline at end of file diff --git a/sample/src/main/res/layout/drawer_behavior.xml b/sample/src/main/res/layout/drawer_behavior.xml index c8cb49c..2ff0592 100644 --- a/sample/src/main/res/layout/drawer_behavior.xml +++ b/sample/src/main/res/layout/drawer_behavior.xml @@ -11,6 +11,6 @@ android:layout_height="match_parent" android:layout_gravity="start" android:background="#ff00" - app:layout_behavior="com.jakewharton.behavior.drawer.DrawerBehavior" + app:layout_behavior="@string/jakewharton_drawer_behavior" /> From d18b50266b7577a8e87bd1d07752cadbb3baa824 Mon Sep 17 00:00:00 2001 From: aber Date: Wed, 23 Nov 2016 11:39:27 +0800 Subject: [PATCH 3/9] update target sdk to 25,android gradle plugin to 2.2.2, add a DrawerListener --- build.gradle | 9 +- drawer-behavior/build.gradle | 9 +- .../behavior/drawer/BehaviorDelegate.java | 43 +++++- .../behavior/drawer/DrawerBehavior.java | 134 ++++++++++++++++++ sample/build.gradle | 8 +- .../drawer/DrawerBehaviorActivity.java | 30 ++++ .../src/main/res/layout/drawer_behavior.xml | 1 + 7 files changed, 217 insertions(+), 17 deletions(-) diff --git a/build.gradle b/build.gradle index 9677afb..7aa6af0 100644 --- a/build.gradle +++ b/build.gradle @@ -3,6 +3,13 @@ buildscript { mavenCentral() } dependencies { - classpath 'com.android.tools.build:gradle:2.2.0' + classpath 'com.android.tools.build:gradle:2.2.2' } } + +ext { + androidBuildTool = '25.0.0' + androidTargetSdk = 25 + androidSupportLib = '25.0.1' + androidMinSdk = 9 +} \ No newline at end of file diff --git a/drawer-behavior/build.gradle b/drawer-behavior/build.gradle index f9965c9..9507eb7 100644 --- a/drawer-behavior/build.gradle +++ b/drawer-behavior/build.gradle @@ -1,16 +1,15 @@ apply plugin: 'com.android.library' android { - compileSdkVersion 24 - buildToolsVersion '24.0.2' + compileSdkVersion androidTargetSdk + buildToolsVersion androidBuildTool defaultConfig { - minSdkVersion 9 - return 0 + minSdkVersion androidMinSdk } } dependencies { - compile 'com.android.support:design:24.2.1' + compile 'com.android.support:design:' + androidSupportLib } diff --git a/drawer-behavior/src/main/java/com/jakewharton/behavior/drawer/BehaviorDelegate.java b/drawer-behavior/src/main/java/com/jakewharton/behavior/drawer/BehaviorDelegate.java index 44a736f..8d45a39 100644 --- a/drawer-behavior/src/main/java/com/jakewharton/behavior/drawer/BehaviorDelegate.java +++ b/drawer-behavior/src/main/java/com/jakewharton/behavior/drawer/BehaviorDelegate.java @@ -30,13 +30,18 @@ import static android.view.View.INVISIBLE; import static android.view.View.VISIBLE; +import static com.jakewharton.behavior.drawer.DrawerBehavior.DrawerListener; +import static com.jakewharton.behavior.drawer.DrawerBehavior.State; final class BehaviorDelegate extends ViewDragHelper.Callback { private static final int PEEK_DELAY = 160; // ms private static final int MIN_FLING_VELOCITY = 400; // dips per second - private static final int FLAG_IS_OPENED = 0x1; - private static final int FLAG_IS_OPENING = 0x2; - private static final int FLAG_IS_CLOSING = 0x4; + static final int FLAG_IS_OPENED = 0x1; + @SuppressWarnings("WeakerAccess") + static final int FLAG_IS_OPENING = 0x2; + @SuppressWarnings("unused") + static final int FLAG_IS_CLOSING = 0x4; + static final int FLAG_IS_CLOSED = 0x0; private static final int DEFAULT_SCRIM_COLOR = 0x99000000; private final CoordinatorLayout parent; @@ -45,12 +50,16 @@ final class BehaviorDelegate extends ViewDragHelper.Callback { private final ContentScrimDrawer scrimDrawer; private final ViewDragHelper dragger; + private DrawerListener listener; + private float initialMotionX; private float initialMotionY; private boolean childrenCanceledTouch; private int openState; private boolean isPeeking; private float onScreen; + + @State private int drawerState; private int scrimColor = DEFAULT_SCRIM_COLOR; @@ -134,6 +143,18 @@ private void cancelChildViewTouch() { } } + boolean isDrawerOpen() { + return openState == FLAG_IS_OPENED || openState == FLAG_IS_OPENING; + } + + void setDrawerState(int openState) { + this.openState = openState; + } + + void setDrawListener(DrawerListener listener) { + this.listener = listener; + } + boolean onInterceptTouchEvent(MotionEvent ev) { boolean interceptForDrag = dragger.shouldInterceptTouchEvent(ev); boolean interceptForTap = false; @@ -260,7 +281,7 @@ private void closeDrawers(boolean peekingOnly) { } private void updateDrawerState(int activeState, View activeDrawer) { - final int state = dragger.getViewDragState(); + @State final int state = dragger.getViewDragState(); if (activeDrawer != null && activeState == ViewDragHelper.STATE_IDLE) { if (onScreen == 0) { @@ -273,6 +294,8 @@ private void updateDrawerState(int activeState, View activeDrawer) { if (state != drawerState) { drawerState = state; } + if (listener != null) + listener.onDrawerStateChanged(drawerState); } private void dispatchOnDrawerClosed(View drawerView) { @@ -290,6 +313,8 @@ private void dispatchOnDrawerClosed(View drawerView) { rootView.sendAccessibilityEvent(AccessibilityEvent.TYPE_WINDOW_STATE_CHANGED); } } + if (listener != null) + listener.onDrawerClosed(drawerView); } } @@ -305,6 +330,8 @@ private void dispatchOnDrawerOpened(View drawerView) { } drawerView.requestFocus(); + if (listener != null) + listener.onDrawerOpened(drawerView); } } @@ -346,19 +373,21 @@ public void onViewPositionChanged(View changedView, int left, int top, int dx, i int color = imag << 24 | (scrimColor & 0xffffff); scrimDrawer.setColor(color); - setDrawerViewOffset(offset); + setDrawerViewOffset(changedView,offset); boolean gone = offset == 0; changedView.setVisibility(gone ? INVISIBLE : VISIBLE); scrimDrawer.setVisible(!gone); parent.invalidate(); } - private void setDrawerViewOffset(float slideOffset) { + private void setDrawerViewOffset(View drawerView,float slideOffset) { if (slideOffset == onScreen) { return; } onScreen = slideOffset; + if (listener != null) + listener.onDrawerSlide(drawerView,slideOffset); } @Override public void onEdgeTouched(int edgeFlags, int pointerId) { @@ -447,7 +476,7 @@ boolean onLayoutChild() { } if (changeOffset) { - setDrawerViewOffset(newOffset); + setDrawerViewOffset(child,newOffset); } int newVisibility = onScreen > 0 ? VISIBLE : INVISIBLE; diff --git a/drawer-behavior/src/main/java/com/jakewharton/behavior/drawer/DrawerBehavior.java b/drawer-behavior/src/main/java/com/jakewharton/behavior/drawer/DrawerBehavior.java index f228d60..4a0a235 100644 --- a/drawer-behavior/src/main/java/com/jakewharton/behavior/drawer/DrawerBehavior.java +++ b/drawer-behavior/src/main/java/com/jakewharton/behavior/drawer/DrawerBehavior.java @@ -17,16 +17,74 @@ import android.content.Context; import android.content.res.TypedArray; +import android.os.Parcel; +import android.os.Parcelable; +import android.support.annotation.IntDef; import android.support.annotation.Keep; +import android.support.annotation.RestrictTo; import android.support.design.widget.CoordinatorLayout; +import android.support.v4.os.ParcelableCompat; +import android.support.v4.os.ParcelableCompatCreatorCallbacks; import android.support.v4.util.SimpleArrayMap; +import android.support.v4.view.AbsSavedState; import android.support.v4.view.GravityCompat; +import android.support.v4.widget.ViewDragHelper; import android.util.AttributeSet; import android.view.Gravity; import android.view.MotionEvent; import android.view.View; +import android.view.ViewGroup; + +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; + +import static android.support.annotation.RestrictTo.Scope.GROUP_ID; public final class DrawerBehavior extends CoordinatorLayout.Behavior { + + /** @hide */ + @SuppressWarnings("WeakerAccess") + @RestrictTo(GROUP_ID) + @IntDef({ViewDragHelper.STATE_IDLE, ViewDragHelper.STATE_DRAGGING, ViewDragHelper.STATE_SETTLING}) + @Retention(RetentionPolicy.SOURCE) + public @interface State {} + + /** + * Listener for monitoring events about drawers. + */ + public interface DrawerListener { + /** + * Called when a drawer's position changes. + * @param drawerView The child view that was moved + * @param slideOffset The new offset of this drawer within its range, from 0-1 + */ + void onDrawerSlide(View drawerView, float slideOffset); + + /** + * Called when a drawer has settled in a completely open state. + * The drawer is interactive at this point. + * + * @param drawerView Drawer view that is now open + */ + void onDrawerOpened(View drawerView); + + /** + * Called when a drawer has settled in a completely closed state. + * + * @param drawerView Drawer view that is now closed + */ + void onDrawerClosed(View drawerView); + + /** + * Called when the drawer motion state changes. The new state will + * + * be one of {@link ViewDragHelper#STATE_IDLE}, {@link ViewDragHelper#STATE_DRAGGING} or {@link ViewDragHelper#STATE_SETTLING}. + * + * @param newState The new drawer motion state + */ + void onDrawerStateChanged(@State int newState); + } + private static void validateGravity(int gravity) { if (gravity != Gravity.LEFT && gravity != Gravity.RIGHT @@ -37,8 +95,11 @@ private static void validateGravity(int gravity) { } private final SimpleArrayMap delegates = new SimpleArrayMap<>(); + private final int gravity; + private DrawerListener listener; + @SuppressWarnings("unused") // Public API for programmatic instantiation. public DrawerBehavior(int gravity) { validateGravity(gravity); @@ -57,10 +118,15 @@ public DrawerBehavior(Context context, AttributeSet attrs) { this.gravity = gravity; } + public void setDrawerListener(DrawerListener listener) { + this.listener = listener; + } + private BehaviorDelegate delegate(CoordinatorLayout parent, View child) { BehaviorDelegate delegate = delegates.get(child); if (delegate == null) { delegate = new BehaviorDelegate(parent, child, gravity); + delegate.setDrawListener(listener); delegates.put(child, delegate); } return delegate; @@ -80,4 +146,72 @@ public boolean onInterceptTouchEvent(CoordinatorLayout parent, View child, Motio @Override public boolean onTouchEvent(CoordinatorLayout parent, View child, MotionEvent ev) { return delegate(parent, child).onTouchEvent(ev); } + + @Override + public Parcelable onSaveInstanceState(CoordinatorLayout parent, View child) { + return new SavedState(super.onSaveInstanceState(parent, child),delegates.get(child).isDrawerOpen()) ; + } + + @Override + public void onRestoreInstanceState(CoordinatorLayout parent, View child, Parcelable state) { + SavedState ss = (SavedState) state; + super.onRestoreInstanceState(parent, child, ss.getSuperState()); + delegates.get(child).setDrawerState(ss.openState?BehaviorDelegate.FLAG_IS_OPENED:BehaviorDelegate.FLAG_IS_CLOSED); + } + + private static class SavedState extends AbsSavedState { + + boolean openState; + + private SavedState(Parcelable superState,boolean openState) { + super(superState); + this.openState = openState; + } + + @SuppressWarnings("unused") + protected SavedState(Parcel source) { + this(source,null); + } + + private SavedState(Parcel source, ClassLoader loader) { + super(source, loader); + openState = source.readInt() != 0; + } + + @Override + public void writeToParcel(Parcel dest, int flags) { + super.writeToParcel(dest, flags); + dest.writeInt(openState?1:0); + } + + public static final Creator CREATOR = ParcelableCompat.newCreator( + new ParcelableCompatCreatorCallbacks() { + @Override + public SavedState createFromParcel(Parcel in, ClassLoader loader) { + return new SavedState(in,loader); + } + + @Override + public SavedState[] newArray(int size) { + return new SavedState[size]; + } + } + ); + } + + + public static DrawerBehavior from(View view) { + ViewGroup.LayoutParams layoutParams = view.getLayoutParams(); + if (!(layoutParams instanceof CoordinatorLayout.LayoutParams)) { + throw new IllegalArgumentException("The view is not a child of CoordinatorLayout"); + } + CoordinatorLayout.LayoutParams lp = (CoordinatorLayout.LayoutParams) layoutParams; + CoordinatorLayout.Behavior behavior = lp.getBehavior(); + if (!(behavior instanceof DrawerBehavior)) { + throw new IllegalArgumentException( + "The view is not associated with DrawerBehavior"); + } + return (DrawerBehavior) behavior; + } + } diff --git a/sample/build.gradle b/sample/build.gradle index f423e43..6bfa49c 100644 --- a/sample/build.gradle +++ b/sample/build.gradle @@ -1,13 +1,13 @@ apply plugin: 'com.android.application' android { - compileSdkVersion 24 - buildToolsVersion '24.0.2' + compileSdkVersion androidTargetSdk + buildToolsVersion androidBuildTool defaultConfig { applicationId 'com.example.behavior.drawer' - minSdkVersion 9 - targetSdkVersion 24 + minSdkVersion androidMinSdk + targetSdkVersion androidTargetSdk versionCode 1 versionName '1.0' } diff --git a/sample/src/main/java/com/example/behavior/drawer/DrawerBehaviorActivity.java b/sample/src/main/java/com/example/behavior/drawer/DrawerBehaviorActivity.java index 3283d43..4211391 100644 --- a/sample/src/main/java/com/example/behavior/drawer/DrawerBehaviorActivity.java +++ b/sample/src/main/java/com/example/behavior/drawer/DrawerBehaviorActivity.java @@ -1,11 +1,41 @@ package com.example.behavior.drawer; +import android.support.v4.widget.DrawerLayout; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; +import android.util.Log; +import android.view.View; + +import com.jakewharton.behavior.drawer.DrawerBehavior; public final class DrawerBehaviorActivity extends AppCompatActivity { + private static final String TAG = DrawerBehaviorActivity.class.getCanonicalName(); + @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.drawer_behavior); + View view = findViewById(R.id.view); + DrawerBehavior behavior = DrawerBehavior.from(view); + behavior.setDrawerListener(new DrawerBehavior.DrawerListener() { + @Override + public void onDrawerSlide(View drawerView, float slideOffset) { + + } + + @Override + public void onDrawerOpened(View drawerView) { + Log.d(TAG,"opened:"+ drawerView.toString()); + } + + @Override + public void onDrawerClosed(View drawerView) { + Log.d(TAG,"closed:"+ drawerView.toString()); + } + + @Override + public void onDrawerStateChanged(int newState) { + Log.d(TAG,"onDrawerStateChanged:"+ newState); + } + }); } } diff --git a/sample/src/main/res/layout/drawer_behavior.xml b/sample/src/main/res/layout/drawer_behavior.xml index 2ff0592..39f8b9f 100644 --- a/sample/src/main/res/layout/drawer_behavior.xml +++ b/sample/src/main/res/layout/drawer_behavior.xml @@ -7,6 +7,7 @@ android:background="#feee" > Date: Wed, 23 Nov 2016 11:48:12 +0800 Subject: [PATCH 4/9] update target sdk to 25,android gradle plugin to 2.2.2, add a DrawerListener --- .../com/jakewharton/behavior/drawer/BehaviorDelegate.java | 5 +++-- .../java/com/jakewharton/behavior/drawer/DrawerBehavior.java | 4 ++-- 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/drawer-behavior/src/main/java/com/jakewharton/behavior/drawer/BehaviorDelegate.java b/drawer-behavior/src/main/java/com/jakewharton/behavior/drawer/BehaviorDelegate.java index 8d45a39..b2c8f01 100644 --- a/drawer-behavior/src/main/java/com/jakewharton/behavior/drawer/BehaviorDelegate.java +++ b/drawer-behavior/src/main/java/com/jakewharton/behavior/drawer/BehaviorDelegate.java @@ -62,6 +62,7 @@ final class BehaviorDelegate extends ViewDragHelper.Callback { @State private int drawerState; + @SuppressWarnings("FieldCanBeLocal") private int scrimColor = DEFAULT_SCRIM_COLOR; private final Runnable peekRunnable = new Runnable() { @@ -215,7 +216,7 @@ boolean onTouchEvent(MotionEvent ev) { final int slop = dragger.getTouchSlop(); if (dx * dx + dy * dy < slop * slop) { // Taps close a dimmed open drawer but only if it isn't locked open. - if ((openState & FLAG_IS_OPENED) == FLAG_IS_OPENED) { // TODO isDrawerOpen method? + if ((openState & FLAG_IS_OPENED) == FLAG_IS_OPENED) { peekingOnly = false; } } @@ -295,7 +296,7 @@ private void updateDrawerState(int activeState, View activeDrawer) { drawerState = state; } if (listener != null) - listener.onDrawerStateChanged(drawerState); + listener.onDrawerStateChanged(activeDrawer,drawerState); } private void dispatchOnDrawerClosed(View drawerView) { diff --git a/drawer-behavior/src/main/java/com/jakewharton/behavior/drawer/DrawerBehavior.java b/drawer-behavior/src/main/java/com/jakewharton/behavior/drawer/DrawerBehavior.java index 4a0a235..ea4abc0 100644 --- a/drawer-behavior/src/main/java/com/jakewharton/behavior/drawer/DrawerBehavior.java +++ b/drawer-behavior/src/main/java/com/jakewharton/behavior/drawer/DrawerBehavior.java @@ -79,10 +79,10 @@ public interface DrawerListener { * Called when the drawer motion state changes. The new state will * * be one of {@link ViewDragHelper#STATE_IDLE}, {@link ViewDragHelper#STATE_DRAGGING} or {@link ViewDragHelper#STATE_SETTLING}. - * + * @param drawerView Drawer view which motion state is changed * @param newState The new drawer motion state */ - void onDrawerStateChanged(@State int newState); + void onDrawerStateChanged(View drawerView,@State int newState); } private static void validateGravity(int gravity) { From 8fc944a95ec59ee3a8cde29fcc77953ea65a0654 Mon Sep 17 00:00:00 2001 From: aber Date: Wed, 23 Nov 2016 11:53:23 +0800 Subject: [PATCH 5/9] update target sdk to 25,android gradle plugin to 2.2.2, add a DrawerListener --- .../com/jakewharton/behavior/drawer/BehaviorDelegate.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/drawer-behavior/src/main/java/com/jakewharton/behavior/drawer/BehaviorDelegate.java b/drawer-behavior/src/main/java/com/jakewharton/behavior/drawer/BehaviorDelegate.java index b2c8f01..9b248a3 100644 --- a/drawer-behavior/src/main/java/com/jakewharton/behavior/drawer/BehaviorDelegate.java +++ b/drawer-behavior/src/main/java/com/jakewharton/behavior/drawer/BehaviorDelegate.java @@ -240,6 +240,8 @@ private void closeDrawers(boolean peekingOnly) { return; } + removeCallbacks(); + boolean needsSettle; if (isLeft) { needsSettle = dragger.smoothSlideViewTo(child, -child.getWidth(), child.getTop()); @@ -248,8 +250,6 @@ private void closeDrawers(boolean peekingOnly) { } isPeeking = false; - removeCallbacks(); - if (needsSettle) { ViewCompat.postOnAnimation(parent, draggerSettle); } From 8b42410405c78dc727588b2c20ce9771689f1361 Mon Sep 17 00:00:00 2001 From: aber Date: Wed, 23 Nov 2016 12:25:36 +0800 Subject: [PATCH 6/9] update target sdk to 25,android gradle plugin to 2.2.2, add a DrawerListener --- .../com/example/behavior/drawer/DrawerBehaviorActivity.java | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/sample/src/main/java/com/example/behavior/drawer/DrawerBehaviorActivity.java b/sample/src/main/java/com/example/behavior/drawer/DrawerBehaviorActivity.java index 4211391..66d179b 100644 --- a/sample/src/main/java/com/example/behavior/drawer/DrawerBehaviorActivity.java +++ b/sample/src/main/java/com/example/behavior/drawer/DrawerBehaviorActivity.java @@ -1,6 +1,5 @@ package com.example.behavior.drawer; -import android.support.v4.widget.DrawerLayout; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.util.Log; @@ -33,7 +32,7 @@ public void onDrawerClosed(View drawerView) { } @Override - public void onDrawerStateChanged(int newState) { + public void onDrawerStateChanged(View drawerView, int newState) { Log.d(TAG,"onDrawerStateChanged:"+ newState); } }); From 8cd0eb79a0d1dae13d546b47811ec763a6049438 Mon Sep 17 00:00:00 2001 From: belle tian Date: Mon, 13 Mar 2017 10:06:21 +0800 Subject: [PATCH 7/9] update target sdk to 25,android gradle plugin to 2.3.0,clear old code --- build.gradle | 6 +++--- .../com/jakewharton/behavior/drawer/BehaviorDelegate.java | 2 +- .../com/jakewharton/behavior/drawer/DrawerBehavior.java | 4 ++-- gradle/wrapper/gradle-wrapper.properties | 2 +- 4 files changed, 7 insertions(+), 7 deletions(-) diff --git a/build.gradle b/build.gradle index 7aa6af0..722f79b 100644 --- a/build.gradle +++ b/build.gradle @@ -3,13 +3,13 @@ buildscript { mavenCentral() } dependencies { - classpath 'com.android.tools.build:gradle:2.2.2' + classpath 'com.android.tools.build:gradle:2.3.0' } } ext { - androidBuildTool = '25.0.0' + androidBuildTool = '25.0.2' androidTargetSdk = 25 - androidSupportLib = '25.0.1' + androidSupportLib = '25.2.0' androidMinSdk = 9 } \ No newline at end of file diff --git a/drawer-behavior/src/main/java/com/jakewharton/behavior/drawer/BehaviorDelegate.java b/drawer-behavior/src/main/java/com/jakewharton/behavior/drawer/BehaviorDelegate.java index 9b248a3..3403311 100644 --- a/drawer-behavior/src/main/java/com/jakewharton/behavior/drawer/BehaviorDelegate.java +++ b/drawer-behavior/src/main/java/com/jakewharton/behavior/drawer/BehaviorDelegate.java @@ -59,7 +59,7 @@ final class BehaviorDelegate extends ViewDragHelper.Callback { private boolean isPeeking; private float onScreen; - @State + @State private int drawerState; @SuppressWarnings("FieldCanBeLocal") diff --git a/drawer-behavior/src/main/java/com/jakewharton/behavior/drawer/DrawerBehavior.java b/drawer-behavior/src/main/java/com/jakewharton/behavior/drawer/DrawerBehavior.java index ea4abc0..4ddb890 100644 --- a/drawer-behavior/src/main/java/com/jakewharton/behavior/drawer/DrawerBehavior.java +++ b/drawer-behavior/src/main/java/com/jakewharton/behavior/drawer/DrawerBehavior.java @@ -38,13 +38,13 @@ import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; -import static android.support.annotation.RestrictTo.Scope.GROUP_ID; +import static android.support.annotation.RestrictTo.Scope.LIBRARY_GROUP; public final class DrawerBehavior extends CoordinatorLayout.Behavior { /** @hide */ @SuppressWarnings("WeakerAccess") - @RestrictTo(GROUP_ID) + @RestrictTo(LIBRARY_GROUP) @IntDef({ViewDragHelper.STATE_IDLE, ViewDragHelper.STATE_DRAGGING, ViewDragHelper.STATE_SETTLING}) @Retention(RetentionPolicy.SOURCE) public @interface State {} diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index 04e285f..8469c94 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -3,4 +3,4 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-2.14.1-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-3.4-all.zip From 8cd34eaaa02dcf533b4727824411da220d6dad0c Mon Sep 17 00:00:00 2001 From: belle tian Date: Mon, 13 Mar 2017 10:17:59 +0800 Subject: [PATCH 8/9] update target sdk to 25,android gradle plugin to 2.3.0,clear old code --- .../behavior/drawer/BehaviorDelegate.java | 14 +++++++------- .../behavior/drawer/DrawerBehavior.java | 4 +++- 2 files changed, 10 insertions(+), 8 deletions(-) diff --git a/drawer-behavior/src/main/java/com/jakewharton/behavior/drawer/BehaviorDelegate.java b/drawer-behavior/src/main/java/com/jakewharton/behavior/drawer/BehaviorDelegate.java index 3403311..fa6d47d 100644 --- a/drawer-behavior/src/main/java/com/jakewharton/behavior/drawer/BehaviorDelegate.java +++ b/drawer-behavior/src/main/java/com/jakewharton/behavior/drawer/BehaviorDelegate.java @@ -36,12 +36,12 @@ final class BehaviorDelegate extends ViewDragHelper.Callback { private static final int PEEK_DELAY = 160; // ms private static final int MIN_FLING_VELOCITY = 400; // dips per second - static final int FLAG_IS_OPENED = 0x1; - @SuppressWarnings("WeakerAccess") - static final int FLAG_IS_OPENING = 0x2; - @SuppressWarnings("unused") - static final int FLAG_IS_CLOSING = 0x4; - static final int FLAG_IS_CLOSED = 0x0; + static final int FLAG_IS_OPENED = 0x1; + @SuppressWarnings("WeakerAccess") + static final int FLAG_IS_OPENING = 0x2; + @SuppressWarnings("unused") + static final int FLAG_IS_CLOSING = 0x4; + static final int FLAG_IS_CLOSED = 0x0; private static final int DEFAULT_SCRIM_COLOR = 0x99000000; private final CoordinatorLayout parent; @@ -50,7 +50,7 @@ final class BehaviorDelegate extends ViewDragHelper.Callback { private final ContentScrimDrawer scrimDrawer; private final ViewDragHelper dragger; - private DrawerListener listener; + private DrawerListener listener; private float initialMotionX; private float initialMotionY; diff --git a/drawer-behavior/src/main/java/com/jakewharton/behavior/drawer/DrawerBehavior.java b/drawer-behavior/src/main/java/com/jakewharton/behavior/drawer/DrawerBehavior.java index 4ddb890..e8615d0 100644 --- a/drawer-behavior/src/main/java/com/jakewharton/behavior/drawer/DrawerBehavior.java +++ b/drawer-behavior/src/main/java/com/jakewharton/behavior/drawer/DrawerBehavior.java @@ -199,7 +199,9 @@ public SavedState[] newArray(int size) { ); } - + /** + * todo + * */ public static DrawerBehavior from(View view) { ViewGroup.LayoutParams layoutParams = view.getLayoutParams(); if (!(layoutParams instanceof CoordinatorLayout.LayoutParams)) { From c26954f5157779bb79ce7178ecc136685fd9e653 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=94=B0=E5=85=B5?= Date: Thu, 23 Nov 2017 11:03:36 +0800 Subject: [PATCH 9/9] up to min sdk 14 --- build.gradle | 18 ++++-- drawer-behavior/build.gradle | 2 +- .../behavior/drawer/BehaviorDelegate.java | 60 +++++++++++-------- .../behavior/drawer/DrawerBehavior.java | 35 ++++++----- gradle/wrapper/gradle-wrapper.properties | 2 +- sample/build.gradle | 4 +- .../drawer/DrawerBehaviorActivity.java | 4 +- 7 files changed, 74 insertions(+), 51 deletions(-) diff --git a/build.gradle b/build.gradle index 722f79b..eea0f7e 100644 --- a/build.gradle +++ b/build.gradle @@ -1,15 +1,23 @@ buildscript { repositories { mavenCentral() + google() } dependencies { - classpath 'com.android.tools.build:gradle:2.3.0' + classpath 'com.android.tools.build:gradle:3.0.1' + } +} + +allprojects { + repositories { + mavenCentral() + google() } } ext { - androidBuildTool = '25.0.2' - androidTargetSdk = 25 - androidSupportLib = '25.2.0' - androidMinSdk = 9 + androidBuildTool = '27.0.1' + androidTargetSdk = 27 + androidSupportLib = '27.0.1' + androidMinSdk = 14 } \ No newline at end of file diff --git a/drawer-behavior/build.gradle b/drawer-behavior/build.gradle index 9507eb7..eb46eb8 100644 --- a/drawer-behavior/build.gradle +++ b/drawer-behavior/build.gradle @@ -11,5 +11,5 @@ android { } dependencies { - compile 'com.android.support:design:' + androidSupportLib + implementation 'com.android.support:design:' + androidSupportLib } diff --git a/drawer-behavior/src/main/java/com/jakewharton/behavior/drawer/BehaviorDelegate.java b/drawer-behavior/src/main/java/com/jakewharton/behavior/drawer/BehaviorDelegate.java index fa6d47d..56fd9d3 100644 --- a/drawer-behavior/src/main/java/com/jakewharton/behavior/drawer/BehaviorDelegate.java +++ b/drawer-behavior/src/main/java/com/jakewharton/behavior/drawer/BehaviorDelegate.java @@ -18,11 +18,13 @@ import android.os.Build; import android.os.SystemClock; +import android.support.annotation.NonNull; +import android.support.annotation.Nullable; import android.support.design.widget.CoordinatorLayout; import android.support.v4.view.GravityCompat; -import android.support.v4.view.MotionEventCompat; import android.support.v4.view.ViewCompat; import android.support.v4.widget.ViewDragHelper; +import android.util.Log; import android.view.Gravity; import android.view.MotionEvent; import android.view.View; @@ -34,6 +36,7 @@ import static com.jakewharton.behavior.drawer.DrawerBehavior.State; final class BehaviorDelegate extends ViewDragHelper.Callback { + private static final boolean DEBUG = true; private static final int PEEK_DELAY = 160; // ms private static final int MIN_FLING_VELOCITY = 400; // dips per second static final int FLAG_IS_OPENED = 0x1; @@ -144,22 +147,22 @@ private void cancelChildViewTouch() { } } - boolean isDrawerOpen() { - return openState == FLAG_IS_OPENED || openState == FLAG_IS_OPENING; - } + boolean isDrawerOpen() { + return openState == FLAG_IS_OPENED || openState == FLAG_IS_OPENING; + } - void setDrawerState(int openState) { - this.openState = openState; - } + void setDrawerState(int openState) { + this.openState = openState; + } - void setDrawListener(DrawerListener listener) { - this.listener = listener; - } + void setDrawListener(DrawerListener listener) { + this.listener = listener; + } boolean onInterceptTouchEvent(MotionEvent ev) { boolean interceptForDrag = dragger.shouldInterceptTouchEvent(ev); boolean interceptForTap = false; - switch (MotionEventCompat.getActionMasked(ev)) { + switch (ev.getActionMasked()) { case MotionEvent.ACTION_DOWN: { float x = ev.getX(); float y = ev.getY(); @@ -197,7 +200,7 @@ boolean onInterceptTouchEvent(MotionEvent ev) { boolean onTouchEvent(MotionEvent ev) { dragger.processTouchEvent(ev); - switch (MotionEventCompat.getActionMasked(ev)) { + switch (ev.getActionMasked()) { case MotionEvent.ACTION_DOWN: { initialMotionX = ev.getX(); initialMotionY = ev.getY(); @@ -240,7 +243,7 @@ private void closeDrawers(boolean peekingOnly) { return; } - removeCallbacks(); + removeCallbacks(); boolean needsSettle; if (isLeft) { @@ -255,11 +258,11 @@ private void closeDrawers(boolean peekingOnly) { } } - @Override public void onViewCaptured(View capturedChild, int activePointerId) { + @Override public void onViewCaptured(@NonNull View capturedChild, int activePointerId) { isPeeking = false; } - @Override public void onViewReleased(View releasedChild, float xvel, float yvel) { + @Override public void onViewReleased(@NonNull View releasedChild, float xvel, float yvel) { // Offset is how open the drawer is, therefore left/right values // are reversed from one another. float offset = onScreen; @@ -281,9 +284,17 @@ private void closeDrawers(boolean peekingOnly) { updateDrawerState(state, dragger.getCapturedView()); } - private void updateDrawerState(int activeState, View activeDrawer) { + private void updateDrawerState(int activeState,@Nullable View activeDrawer) { @State final int state = dragger.getViewDragState(); - + if (DEBUG) { + if (activeDrawer != null) + Log.d("updateDrawerState","activeState: " + + activeState + "activeDrawer position: " + + activeDrawer.getLeft() + ":" + activeDrawer.getRight()); + else + Log.d("updateDrawerState", "activeState: " + + "activeDrawer is null"); + } if (activeDrawer != null && activeState == ViewDragHelper.STATE_IDLE) { if (onScreen == 0) { dispatchOnDrawerClosed(activeDrawer); @@ -354,9 +365,9 @@ private void updateChildrenImportantForAccessibility(View drawerView, boolean is } @Override - public void onViewPositionChanged(View changedView, int left, int top, int dx, int dy) { + public void onViewPositionChanged(@NonNull View changedView, int left, int top, int dx, int dy) { int childWidth = changedView.getWidth(); - + Log.d("onViewPositionChanged",left +":" +top+ ":"+dx+":"+dy); // This reverses the positioning shown in onLayout. float offset; if (isLeft) { @@ -387,7 +398,7 @@ private void setDrawerViewOffset(View drawerView,float slideOffset) { } onScreen = slideOffset; - if (listener != null) + if (listener != null) listener.onDrawerSlide(drawerView,slideOffset); } @@ -395,7 +406,7 @@ private void setDrawerViewOffset(View drawerView,float slideOffset) { parent.postDelayed(peekRunnable, PEEK_DELAY); } - @Override public boolean tryCaptureView(View child, int pointerId) { + @Override public boolean tryCaptureView(@NonNull View child, int pointerId) { return isDrawerView(child); } @@ -406,11 +417,11 @@ private void setDrawerViewOffset(View drawerView,float slideOffset) { } } - @Override public int getViewHorizontalDragRange(View child) { + @Override public int getViewHorizontalDragRange(@NonNull View child) { return isDrawerView(child) ? child.getWidth() : 0; } - @Override public int clampViewPositionHorizontal(View child, int left, int dx) { + @Override public int clampViewPositionHorizontal(@NonNull View child, int left, int dx) { if (isLeft) { return Math.max(-child.getWidth(), Math.min(left, 0)); } else { @@ -419,7 +430,8 @@ private void setDrawerViewOffset(View drawerView,float slideOffset) { } } - @Override public int clampViewPositionVertical(View child, int top, int dy) { + @Override public int clampViewPositionVertical(@NonNull View child, int top, int dy) { + Log.d("ViewPositionVertical", "" + child.getTop()); return child.getTop(); } diff --git a/drawer-behavior/src/main/java/com/jakewharton/behavior/drawer/DrawerBehavior.java b/drawer-behavior/src/main/java/com/jakewharton/behavior/drawer/DrawerBehavior.java index e8615d0..36d0d76 100644 --- a/drawer-behavior/src/main/java/com/jakewharton/behavior/drawer/DrawerBehavior.java +++ b/drawer-behavior/src/main/java/com/jakewharton/behavior/drawer/DrawerBehavior.java @@ -23,8 +23,6 @@ import android.support.annotation.Keep; import android.support.annotation.RestrictTo; import android.support.design.widget.CoordinatorLayout; -import android.support.v4.os.ParcelableCompat; -import android.support.v4.os.ParcelableCompatCreatorCallbacks; import android.support.v4.util.SimpleArrayMap; import android.support.v4.view.AbsSavedState; import android.support.v4.view.GravityCompat; @@ -42,7 +40,6 @@ public final class DrawerBehavior extends CoordinatorLayout.Behavior { - /** @hide */ @SuppressWarnings("WeakerAccess") @RestrictTo(LIBRARY_GROUP) @IntDef({ViewDragHelper.STATE_IDLE, ViewDragHelper.STATE_DRAGGING, ViewDragHelper.STATE_SETTLING}) @@ -168,8 +165,7 @@ private SavedState(Parcelable superState,boolean openState) { this.openState = openState; } - @SuppressWarnings("unused") - protected SavedState(Parcel source) { + private SavedState(Parcel source) { this(source,null); } @@ -184,19 +180,22 @@ public void writeToParcel(Parcel dest, int flags) { dest.writeInt(openState?1:0); } - public static final Creator CREATOR = ParcelableCompat.newCreator( - new ParcelableCompatCreatorCallbacks() { - @Override - public SavedState createFromParcel(Parcel in, ClassLoader loader) { - return new SavedState(in,loader); - } - - @Override - public SavedState[] newArray(int size) { - return new SavedState[size]; - } - } - ); + public static final Creator CREATOR = new ClassLoaderCreator() { + @Override + public SavedState createFromParcel(Parcel parcel, ClassLoader classLoader) { + return new SavedState(parcel, classLoader); + } + + @Override + public SavedState createFromParcel(Parcel parcel) { + return new SavedState(parcel); + } + + @Override + public SavedState[] newArray(int i) { + return new SavedState[i]; + } + }; } /** diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index 8469c94..fc9b829 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -3,4 +3,4 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-3.4-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-4.1-all.zip diff --git a/sample/build.gradle b/sample/build.gradle index 6bfa49c..a9547be 100644 --- a/sample/build.gradle +++ b/sample/build.gradle @@ -14,5 +14,7 @@ android { } dependencies { - compile project(':drawer-behavior') + implementation project(':drawer-behavior') + implementation "com.android.support:appcompat-v7:27.0.1" + implementation 'com.android.support:design:' + androidSupportLib } diff --git a/sample/src/main/java/com/example/behavior/drawer/DrawerBehaviorActivity.java b/sample/src/main/java/com/example/behavior/drawer/DrawerBehaviorActivity.java index 66d179b..83ee4eb 100644 --- a/sample/src/main/java/com/example/behavior/drawer/DrawerBehaviorActivity.java +++ b/sample/src/main/java/com/example/behavior/drawer/DrawerBehaviorActivity.java @@ -18,7 +18,9 @@ public final class DrawerBehaviorActivity extends AppCompatActivity { behavior.setDrawerListener(new DrawerBehavior.DrawerListener() { @Override public void onDrawerSlide(View drawerView, float slideOffset) { - + Log.d(TAG, "onDrawerSlide: drawerView: " + + drawerView.toString() + + " slideOffset: " + slideOffset); } @Override