From 03d6373a0f76d099679c509a0bf2d040c904994c Mon Sep 17 00:00:00 2001 From: Fiddl3 Date: Fri, 5 Dec 2014 00:05:04 +0100 Subject: [PATCH 01/19] Gradle update Gradle wrapper update (2.2.1) Build Gradle plugin update (1.0.0-rc3) Build Tools and target SDK updated to lastest YoutubePlayerApi no longer exist on gradle (not uses jar library) --- build.gradle | 2 +- draggablepanel/build.gradle | 2 +- gradle.properties | 6 +++--- gradle/wrapper/gradle-wrapper.properties | 4 ++-- sample/AndroidManifest.xml | 7 ++----- sample/build.gradle | 2 +- sample/libs/YouTubeAndroidPlayerApi.jar | Bin 0 -> 106239 bytes 7 files changed, 10 insertions(+), 13 deletions(-) create mode 100644 sample/libs/YouTubeAndroidPlayerApi.jar diff --git a/build.gradle b/build.gradle index 5c5b600..7266d1b 100644 --- a/build.gradle +++ b/build.gradle @@ -3,7 +3,7 @@ buildscript { mavenCentral() } dependencies { - classpath 'com.android.tools.build:gradle:0.12.2' + classpath 'com.android.tools.build:gradle:1.0.0-rc3' } } diff --git a/draggablepanel/build.gradle b/draggablepanel/build.gradle index 272e796..4cc7ec3 100644 --- a/draggablepanel/build.gradle +++ b/draggablepanel/build.gradle @@ -2,7 +2,7 @@ apply plugin: 'com.android.library' apply plugin: 'checkstyle' dependencies { - compile 'com.android.support:support-v4:20.0.0' + compile 'com.android.support:support-v4:21.0.2' compile 'com.nineoldandroids:library:2.4.0' } diff --git a/gradle.properties b/gradle.properties index 7886a14..b21707d 100644 --- a/gradle.properties +++ b/gradle.properties @@ -13,7 +13,7 @@ POM_LICENCE_DIST=repo POM_DEVELOPER_ID=pedrovgs POM_DEVELOPER_NAME=Pedro Vicente Gómez Sánchez -ANDROID_BUILD_TOOLS_VERSION=20.0.0 -ANDROID_COMPILE_SDK_VERSION=20 -ANDROID_TARGET_SDK_VERSION=20 +ANDROID_BUILD_TOOLS_VERSION=21.1.1 +ANDROID_COMPILE_SDK_VERSION=21 +ANDROID_TARGET_SDK_VERSION=21 ANDROID_MIN_SDK=8 \ No newline at end of file diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index e14ef43..fad6672 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,6 +1,6 @@ -#Mon Aug 18 23:56:49 PDT 2014 +#Thu Dec 04 23:43:56 CET 2014 distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-1.12-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-2.2.1-all.zip diff --git a/sample/AndroidManifest.xml b/sample/AndroidManifest.xml index 725671f..960a0f2 100755 --- a/sample/AndroidManifest.xml +++ b/sample/AndroidManifest.xml @@ -1,11 +1,8 @@ + package="com.github.pedrovgs.sample"> - + diff --git a/sample/build.gradle b/sample/build.gradle index 854b56b..047b963 100644 --- a/sample/build.gradle +++ b/sample/build.gradle @@ -8,10 +8,10 @@ dependencies { compile 'com.squareup.dagger:dagger-compiler:1.1.0' compile 'com.jakewharton:butterknife:4.0.1' compile 'com.squareup.dagger:dagger:1.1.0' - compile 'com.google.android:youtube-android-player-api:1.0.0' compile 'com.github.pedrovgs:renderers:1.0.9' compile 'com.google.android.gms:play-services:4.1.32' compile 'com.actionbarsherlock:actionbarsherlock:4.4.0@aar' + compile files('libs/YouTubeAndroidPlayerApi.jar') } android { diff --git a/sample/libs/YouTubeAndroidPlayerApi.jar b/sample/libs/YouTubeAndroidPlayerApi.jar new file mode 100644 index 0000000000000000000000000000000000000000..c7825a757161dc7735d028d2fcafa3b79e9e3899 GIT binary patch literal 106239 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 literal 0 HcmV?d00001 From ba33447ae423c3fa6ca4083fbb456d924eea6274 Mon Sep 17 00:00:00 2001 From: Fiddl3 Date: Fri, 5 Dec 2014 00:35:42 +0100 Subject: [PATCH 02/19] Fix for issue #12 and #20 Fixed SecondView positionig in Maximized State Fixed Preview in Android Studio (DraggablePanel should be treated as RelativeLayout) ex: layout\activity_tv_shows_sample.xml Fixed horizontal drag issues --- .../java/com/github/pedrovgs/DraggableView.java | 16 +++++++++------- .../github/pedrovgs/DraggableViewCallback.java | 10 +++++----- 2 files changed, 14 insertions(+), 12 deletions(-) diff --git a/draggablepanel/src/main/java/com/github/pedrovgs/DraggableView.java b/draggablepanel/src/main/java/com/github/pedrovgs/DraggableView.java index d2c72d4..97394f8 100644 --- a/draggablepanel/src/main/java/com/github/pedrovgs/DraggableView.java +++ b/draggablepanel/src/main/java/com/github/pedrovgs/DraggableView.java @@ -290,13 +290,15 @@ private MotionEvent cloneMotionEventWithAction(MotionEvent event, int action) { * Override method to configure the dragged view and secondView layout properly. */ @Override protected void onLayout(boolean changed, int left, int top, int right, int bottom) { - int newTop = (int) transformer.getViewHeight(); - int lastTopPosition = transformer.getLastTopPosition(); - int lastLeftPosition = transformer.getLastLeftPosition(); - int newRight = transformer.getLastRightPosition(); - int newBottom = lastTopPosition + newTop; - dragView.layout(lastLeftPosition, lastTopPosition, newRight, newBottom); - secondView.layout(0, (int) transformer.getOriginalHeight(), right, getHeight()); + if (isInEditMode()) + super.onLayout(changed, left, top, right, bottom); + else if (isDragViewAtTop()) { + dragView.layout(left, top, right, (int) transformer.getOriginalHeight()); + secondView.layout(left, (int) transformer.getOriginalHeight(), right, bottom); + + ViewHelper.setY(dragView, top); + ViewHelper.setY(secondView, transformer.getOriginalHeight()); + } } /** diff --git a/draggablepanel/src/main/java/com/github/pedrovgs/DraggableViewCallback.java b/draggablepanel/src/main/java/com/github/pedrovgs/DraggableViewCallback.java index 542657c..109f063 100644 --- a/draggablepanel/src/main/java/com/github/pedrovgs/DraggableViewCallback.java +++ b/draggablepanel/src/main/java/com/github/pedrovgs/DraggableViewCallback.java @@ -26,10 +26,10 @@ */ class DraggableViewCallback extends ViewDragHelper.Callback { - private static final int MINIMUN_DX_FOR_HORIZONTAL_DRAG = 25; + private static final int MINIMUM_DX_FOR_HORIZONTAL_DRAG = 10; private static final int MINIMUM_DY_FOR_VERTICAL_DRAG = 15; - private static final float X_MIN_VELOCITY = 1300; - private static final float Y_MIN_VELOCITY = 1300; + private static final float X_MIN_VELOCITY = 1500; + private static final float Y_MIN_VELOCITY = 1000; private DraggableView draggableView; private View draggedView; @@ -108,7 +108,7 @@ public DraggableViewCallback(DraggableView draggableView, View draggedView) { */ @Override public int clampViewPositionHorizontal(View child, int left, int dx) { int newLeft = draggedView.getLeft(); - if ((draggableView.isMinimized() && Math.abs(dx) > MINIMUN_DX_FOR_HORIZONTAL_DRAG) || ( + if ((draggableView.isMinimized() && Math.abs(dx) > MINIMUM_DX_FOR_HORIZONTAL_DRAG) || ( draggableView.isDragViewAtBottom() && !draggableView.isDragViewAtRight())) { newLeft = left; @@ -163,7 +163,7 @@ private void triggerOnReleaseActionsWhileVerticalDrag(float yVel) { * the x axis velocity. */ private void triggerOnReleaseActionsWhileHorizontalDrag(float xVel) { - if (xVel < 0 && xVel <= X_MIN_VELOCITY) { + if (xVel < 0 && xVel <= -X_MIN_VELOCITY) { draggableView.closeToLeft(); } else if (xVel > 0 && xVel >= X_MIN_VELOCITY) { draggableView.closeToRight(); From 94672d45d46dd1575881b27d8ff73ca755097a51 Mon Sep 17 00:00:00 2001 From: Fiddl3 Date: Fri, 5 Dec 2014 13:44:41 +0100 Subject: [PATCH 03/19] Changes in ScaleTransformer isNextToLeftBound & isNextToRightBound methods --- .../com/github/pedrovgs/transformer/ScaleTransformer.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/draggablepanel/src/main/java/com/github/pedrovgs/transformer/ScaleTransformer.java b/draggablepanel/src/main/java/com/github/pedrovgs/transformer/ScaleTransformer.java index 80f6f6f..eb53fcb 100644 --- a/draggablepanel/src/main/java/com/github/pedrovgs/transformer/ScaleTransformer.java +++ b/draggablepanel/src/main/java/com/github/pedrovgs/transformer/ScaleTransformer.java @@ -86,7 +86,7 @@ class ScaleTransformer extends Transformer { * the parent width. */ @Override public boolean isNextToRightBound() { - return (getView().getLeft() - getMarginRight()) > getParentView().getWidth() * 0.25; + return (getView().getRight() - getMarginRight()) > getParentView().getWidth() * 1.25; } /** @@ -94,7 +94,7 @@ class ScaleTransformer extends Transformer { * the parent width. */ @Override public boolean isNextToLeftBound() { - return (getView().getLeft() - getMarginRight()) < getParentView().getWidth() * 0.25; + return (getView().getRight() - getMarginRight()) < getParentView().getWidth() * 0.6; } /** From 2403ee20491c0460eb8a8a8a493dd16314a2b91b Mon Sep 17 00:00:00 2001 From: Fiddl3 Date: Fri, 5 Dec 2014 13:54:34 +0100 Subject: [PATCH 04/19] Removed unnecessary variables & methods Every methods/variables related to last position. This was used in old onLayout() implementation --- .../com/github/pedrovgs/DraggableView.java | 9 ------ .../pedrovgs/DraggableViewCallback.java | 1 - .../transformer/ResizeTransformer.java | 4 +-- .../transformer/ScaleTransformer.java | 3 -- .../pedrovgs/transformer/Transformer.java | 30 ------------------- 5 files changed, 2 insertions(+), 45 deletions(-) diff --git a/draggablepanel/src/main/java/com/github/pedrovgs/DraggableView.java b/draggablepanel/src/main/java/com/github/pedrovgs/DraggableView.java index 97394f8..c227ced 100644 --- a/draggablepanel/src/main/java/com/github/pedrovgs/DraggableView.java +++ b/draggablepanel/src/main/java/com/github/pedrovgs/DraggableView.java @@ -350,15 +350,6 @@ void attachBottomFragment(Fragment bottomFragment) { addFragmentToView(R.id.second_view, bottomFragment); } - /** - * Update the last top and left position when the view is dragged. This last positions are used - * to recreate the dragged view and secondView positions if the requestLayout method is called. - */ - void updateLastDragViewPosition(int lastTopPosition, int lastLeftPosition) { - transformer.setLastTopPosition(lastTopPosition); - transformer.setLastLeftPosition(lastLeftPosition); - } - /** * Modify dragged view pivot based on the dragged view vertical position to simulate a horizontal * displacement while the view is dragged. diff --git a/draggablepanel/src/main/java/com/github/pedrovgs/DraggableViewCallback.java b/draggablepanel/src/main/java/com/github/pedrovgs/DraggableViewCallback.java index 109f063..b3bf495 100644 --- a/draggablepanel/src/main/java/com/github/pedrovgs/DraggableViewCallback.java +++ b/draggablepanel/src/main/java/com/github/pedrovgs/DraggableViewCallback.java @@ -54,7 +54,6 @@ public DraggableViewCallback(DraggableView draggableView, View draggedView) { * @param dy change in Y position from the last call. */ @Override public void onViewPositionChanged(View changedView, int left, int top, int dx, int dy) { - draggableView.updateLastDragViewPosition(top, left); if (draggableView.isDragViewAtBottom()) { draggableView.changeDragViewViewAlpha(); } else { diff --git a/draggablepanel/src/main/java/com/github/pedrovgs/transformer/ResizeTransformer.java b/draggablepanel/src/main/java/com/github/pedrovgs/transformer/ResizeTransformer.java index 322aa21..5bcf44a 100644 --- a/draggablepanel/src/main/java/com/github/pedrovgs/transformer/ResizeTransformer.java +++ b/draggablepanel/src/main/java/com/github/pedrovgs/transformer/ResizeTransformer.java @@ -41,7 +41,7 @@ class ResizeTransformer extends Transformer { RelativeLayout.LayoutParams params = (RelativeLayout.LayoutParams) getView().getLayoutParams(); int newWidth = (int) (getOriginalWidth() * (1 - verticalDragOffset / getXScaleFactor())); params.width = newWidth; - setLastLeftPosition((int) (getOriginalWidth() - newWidth)); + getView().setLayoutParams(params); } @@ -74,7 +74,7 @@ class ResizeTransformer extends Transformer { int left, top, right, bottom; left = (int) (getOriginalWidth() - getViewWidth()); right = getViewRightPosition(verticalDragOffset); - setLastRightPosition(right); + top = getView().getTop(); bottom = getView().getBottom(); getView().layout(left, top, right, bottom); diff --git a/draggablepanel/src/main/java/com/github/pedrovgs/transformer/ScaleTransformer.java b/draggablepanel/src/main/java/com/github/pedrovgs/transformer/ScaleTransformer.java index eb53fcb..b042f81 100644 --- a/draggablepanel/src/main/java/com/github/pedrovgs/transformer/ScaleTransformer.java +++ b/draggablepanel/src/main/java/com/github/pedrovgs/transformer/ScaleTransformer.java @@ -111,7 +111,4 @@ class ScaleTransformer extends Transformer { return (int) getOriginalWidth(); } - @Override public int getLastLeftPosition() { - return 0; - } } diff --git a/draggablepanel/src/main/java/com/github/pedrovgs/transformer/Transformer.java b/draggablepanel/src/main/java/com/github/pedrovgs/transformer/Transformer.java index b231a2e..0424856 100644 --- a/draggablepanel/src/main/java/com/github/pedrovgs/transformer/Transformer.java +++ b/draggablepanel/src/main/java/com/github/pedrovgs/transformer/Transformer.java @@ -42,9 +42,6 @@ public abstract class Transformer { private float yScaleFactor; private float marginRight; private float marginBottom; - private int lastTopPosition; - private int lastLeftPosition; - private int lastRightPosition; private float originalHeight; private float originalWidth; @@ -105,33 +102,6 @@ public void setViewHeight(float viewHeight) { } } - public int getLastRightPosition() { - if (lastRightPosition <= 0) { - lastRightPosition = view.getMeasuredWidth(); - } - return lastRightPosition; - } - - public void setLastRightPosition(int lastRightPosition) { - this.lastRightPosition = lastRightPosition; - } - - public int getLastTopPosition() { - return lastTopPosition; - } - - public void setLastTopPosition(int lastTopPosition) { - this.lastTopPosition = lastTopPosition; - } - - public int getLastLeftPosition() { - return lastLeftPosition; - } - - public void setLastLeftPosition(int lastLeftPosition) { - this.lastLeftPosition = lastLeftPosition; - } - protected View getView() { return view; } From 1eff270c436935b6fcfb5b55c7b120765510605b Mon Sep 17 00:00:00 2001 From: Fiddl3 Date: Fri, 5 Dec 2014 14:17:50 +0100 Subject: [PATCH 05/19] Changed data type in all dimensions related fields/methods float to int everywhere except scaleFactor --- .../com/github/pedrovgs/DraggablePanel.java | 22 +++++----- .../com/github/pedrovgs/DraggableView.java | 12 +++--- .../transformer/ResizeTransformer.java | 6 +-- .../pedrovgs/transformer/Transformer.java | 40 ++++++++++--------- 4 files changed, 41 insertions(+), 39 deletions(-) diff --git a/draggablepanel/src/main/java/com/github/pedrovgs/DraggablePanel.java b/draggablepanel/src/main/java/com/github/pedrovgs/DraggablePanel.java index 027e1eb..97e55c1 100644 --- a/draggablepanel/src/main/java/com/github/pedrovgs/DraggablePanel.java +++ b/draggablepanel/src/main/java/com/github/pedrovgs/DraggablePanel.java @@ -34,9 +34,9 @@ */ public class DraggablePanel extends FrameLayout { - private static final float DEFAULT_TOP_FRAGMENT_HEIGHT = 200; + private static final int DEFAULT_TOP_FRAGMENT_HEIGHT = 200; + private static final int DEFAULT_TOP_FRAGMENT_MARGIN = 0; private static final float DEFAULT_SCALE_FACTOR = 2; - private static final float DEFAULT_TOP_FRAGMENT_MARGIN = 0; private static final boolean DEFAULT_ENABLE_HORIZONTAL_ALPHA_EFFECT = true; private static final boolean DEFAULT_TOP_FRAGMENT_RESIZE = false; @@ -46,9 +46,9 @@ public class DraggablePanel extends FrameLayout { private FragmentManager fragmentManager; private Fragment topFragment; private Fragment bottomFragment; - private float topFragmentHeight; - private float topFragmentMarginRight; - private float topFragmentMarginBottom; + private int topFragmentHeight; + private int topFragmentMarginRight; + private int topFragmentMarginBottom; private float xScaleFactor; private float yScaleFactor; private boolean enableHorizontalAlphaEffect; @@ -99,7 +99,7 @@ public void setBottomFragment(Fragment bottomFragment) { * * @param topFragmentHeight in pixels. */ - public void setTopViewHeight(float topFragmentHeight) { + public void setTopViewHeight(int topFragmentHeight) { this.topFragmentHeight = topFragmentHeight; } @@ -124,7 +124,7 @@ public void setYScaleFactor(float yScaleFactor) { * * @param topFragmentMarginRight in pixels. */ - public void setTopFragmentMarginRight(float topFragmentMarginRight) { + public void setTopFragmentMarginRight(int topFragmentMarginRight) { this.topFragmentMarginRight = topFragmentMarginRight; } @@ -133,7 +133,7 @@ public void setTopFragmentMarginRight(float topFragmentMarginRight) { * * @param topFragmentMarginBottom in pixels. */ - public void setTopFragmentMarginBottom(float topFragmentMarginBottom) { + public void setTopFragmentMarginBottom(int topFragmentMarginBottom) { this.topFragmentMarginBottom = topFragmentMarginBottom; } @@ -253,17 +253,17 @@ public boolean isClosedAtLeft() { private void initializeAttrs(AttributeSet attrs) { TypedArray attributes = getContext().obtainStyledAttributes(attrs, R.styleable.draggable_panel); this.topFragmentHeight = - attributes.getDimension(R.styleable.draggable_panel_top_fragment_height, + attributes.getDimensionPixelSize(R.styleable.draggable_panel_top_fragment_height, DEFAULT_TOP_FRAGMENT_HEIGHT); this.xScaleFactor = attributes.getFloat(R.styleable.draggable_panel_x_scale_factor, DEFAULT_SCALE_FACTOR); this.yScaleFactor = attributes.getFloat(R.styleable.draggable_panel_y_scale_factor, DEFAULT_SCALE_FACTOR); this.topFragmentMarginRight = - attributes.getDimension(R.styleable.draggable_panel_top_fragment_margin_right, + attributes.getDimensionPixelSize(R.styleable.draggable_panel_top_fragment_margin_right, DEFAULT_TOP_FRAGMENT_MARGIN); this.topFragmentMarginBottom = - attributes.getDimension(R.styleable.draggable_panel_top_fragment_margin_bottom, + attributes.getDimensionPixelSize(R.styleable.draggable_panel_top_fragment_margin_bottom, DEFAULT_TOP_FRAGMENT_MARGIN); this.enableHorizontalAlphaEffect = attributes.getBoolean(R.styleable.draggable_panel_enable_horizontal_alpha_effect, diff --git a/draggablepanel/src/main/java/com/github/pedrovgs/DraggableView.java b/draggablepanel/src/main/java/com/github/pedrovgs/DraggableView.java index c227ced..0573660 100644 --- a/draggablepanel/src/main/java/com/github/pedrovgs/DraggableView.java +++ b/draggablepanel/src/main/java/com/github/pedrovgs/DraggableView.java @@ -40,7 +40,7 @@ public class DraggableView extends RelativeLayout { private static final int DEFAULT_SCALE_FACTOR = 2; private static final int DEFAULT_TOP_VIEW_MARGIN = 30; - private static final float DEFAULT_TOP_VIEW_HEIGHT = -1; + private static final int DEFAULT_TOP_VIEW_HEIGHT = -1; private static final float SLIDE_TOP = 0f; private static final float SLIDE_BOTTOM = 1f; private static final boolean DEFAULT_ENABLE_HORIZONTAL_ALPHA_EFFECT = true; @@ -96,14 +96,14 @@ public void setYTopViewScaleFactor(float yScaleFactor) { * * @param topFragmentMarginRight in pixels. */ - public void setTopViewMarginRight(float topFragmentMarginRight) { + public void setTopViewMarginRight(int topFragmentMarginRight) { transformer.setMarginRight(topFragmentMarginRight); } /** * Configure the dragView margin bottom applied when the dragView is minimized. */ - public void setTopViewMarginBottom(float topFragmentMarginBottom) { + public void setTopViewMarginBottom(int topFragmentMarginBottom) { transformer.setMarginBottom(topFragmentMarginBottom); } @@ -517,7 +517,7 @@ private void initializeTransformer(TypedArray attributes) { attributes.getBoolean(R.styleable.draggable_view_top_view_resize, DEFAULT_TOP_VIEW_RESIZE); TransformerFactory transformerFactory = new TransformerFactory(); transformer = transformerFactory.getTransformer(topViewResize, dragView, this); - transformer.setViewHeight(attributes.getDimension(R.styleable.draggable_view_top_view_height, + transformer.setViewHeight(attributes.getDimensionPixelSize(R.styleable.draggable_view_top_view_height, DEFAULT_TOP_VIEW_HEIGHT)); transformer.setXScaleFactor( attributes.getFloat(R.styleable.draggable_view_top_view_x_scale_factor, @@ -526,10 +526,10 @@ private void initializeTransformer(TypedArray attributes) { attributes.getFloat(R.styleable.draggable_view_top_view_y_scale_factor, DEFAULT_SCALE_FACTOR)); transformer.setMarginRight( - attributes.getDimension(R.styleable.draggable_view_top_view_margin_right, + attributes.getDimensionPixelSize(R.styleable.draggable_view_top_view_margin_right, DEFAULT_TOP_VIEW_MARGIN)); transformer.setMarginBottom( - attributes.getDimension(R.styleable.draggable_view_top_view_margin_bottom, + attributes.getDimensionPixelSize(R.styleable.draggable_view_top_view_margin_bottom, DEFAULT_TOP_VIEW_MARGIN)); } diff --git a/draggablepanel/src/main/java/com/github/pedrovgs/transformer/ResizeTransformer.java b/draggablepanel/src/main/java/com/github/pedrovgs/transformer/ResizeTransformer.java index 5bcf44a..277af6a 100644 --- a/draggablepanel/src/main/java/com/github/pedrovgs/transformer/ResizeTransformer.java +++ b/draggablepanel/src/main/java/com/github/pedrovgs/transformer/ResizeTransformer.java @@ -26,7 +26,7 @@ */ class ResizeTransformer extends Transformer { - private float lastHeight; + private int lastHeight; ResizeTransformer(View view, View parent) { super(view, parent); @@ -61,7 +61,7 @@ class ResizeTransformer extends Transformer { /** * @return last updated height or the view height if the view hasn't been changed yet. */ - @Override public float getViewHeight() { + @Override public int getViewHeight() { return lastHeight == 0 ? super.getViewHeight() : lastHeight; } @@ -72,7 +72,7 @@ class ResizeTransformer extends Transformer { */ @Override public void updateXPosition(float verticalDragOffset) { int left, top, right, bottom; - left = (int) (getOriginalWidth() - getViewWidth()); + left = getOriginalWidth() - getViewWidth(); right = getViewRightPosition(verticalDragOffset); top = getView().getTop(); diff --git a/draggablepanel/src/main/java/com/github/pedrovgs/transformer/Transformer.java b/draggablepanel/src/main/java/com/github/pedrovgs/transformer/Transformer.java index 0424856..a63c422 100644 --- a/draggablepanel/src/main/java/com/github/pedrovgs/transformer/Transformer.java +++ b/draggablepanel/src/main/java/com/github/pedrovgs/transformer/Transformer.java @@ -37,13 +37,15 @@ public abstract class Transformer { private final View view; private final View parent; - private float viewHeight; + private int viewHeight; + private int marginRight; + private int marginBottom; + private float xScaleFactor; private float yScaleFactor; - private float marginRight; - private float marginBottom; - private float originalHeight; - private float originalWidth; + + private int originalHeight; + private int originalWidth; public Transformer(View view, View parent) { this.view = view; @@ -66,38 +68,38 @@ public void setYScaleFactor(float yScaleFactor) { this.yScaleFactor = yScaleFactor; } - public float getMarginRight() { + public int getMarginRight() { return marginRight; } - public void setMarginRight(float marginRight) { - this.marginRight = marginRight; + public void setMarginRight(int marginRight) { + this.marginRight = Math.round(marginRight); } - public float getMarginBottom() { + public int getMarginBottom() { return marginBottom; } - public void setMarginBottom(float marginBottom) { - this.marginBottom = marginBottom; + public void setMarginBottom(int marginBottom) { + this.marginBottom = Math.round(marginBottom); } - public float getViewHeight() { + public int getViewHeight() { return viewHeight < 0f ? view.getMeasuredHeight() : viewHeight; } /** * Change view height using the LayoutParams of the view. * - * @param viewHeight to change.. + * @param newHeight to change.. */ - public void setViewHeight(float viewHeight) { - this.viewHeight = viewHeight; - if (viewHeight > 0f) { + public void setViewHeight(int newHeight) { + viewHeight = newHeight; + if (viewHeight > 0) { originalHeight = viewHeight; RelativeLayout.LayoutParams layoutParams = (RelativeLayout.LayoutParams) view.getLayoutParams(); - layoutParams.height = (int) viewHeight; + layoutParams.height = viewHeight; view.setLayoutParams(layoutParams); } } @@ -121,7 +123,7 @@ protected View getParentView() { /** * @return height of the view before it has change the size. */ - public float getOriginalHeight() { + public int getOriginalHeight() { if (originalHeight == 0) { originalHeight = viewHeight < 0 ? view.getMeasuredHeight() : viewHeight; } @@ -131,7 +133,7 @@ public float getOriginalHeight() { /** * @return width of the view before it has change the size. */ - public float getOriginalWidth() { + public int getOriginalWidth() { if (originalWidth == 0) { originalWidth = view.getMeasuredWidth(); } From 3fde7a966a6bf53c5c696e3637be9f7d24b5680d Mon Sep 17 00:00:00 2001 From: Fiddl3 Date: Fri, 5 Dec 2014 14:44:27 +0100 Subject: [PATCH 06/19] ResizeTransformer Fix Changed implementatnio of position calculation Changed implemenation of getMinWidth() method Fixed sample app (I forgot about that in prev commit) --- .../java/com/github/pedrovgs/DraggableView.java | 2 +- .../pedrovgs/transformer/ResizeTransformer.java | 16 ++++++++-------- .../pedrovgs/transformer/ScaleTransformer.java | 2 +- .../github/pedrovgs/transformer/Transformer.java | 2 +- .../sample/activity/PlacesSampleActivity.java | 6 +++--- 5 files changed, 14 insertions(+), 14 deletions(-) diff --git a/draggablepanel/src/main/java/com/github/pedrovgs/DraggableView.java b/draggablepanel/src/main/java/com/github/pedrovgs/DraggableView.java index 0573660..2a7a717 100644 --- a/draggablepanel/src/main/java/com/github/pedrovgs/DraggableView.java +++ b/draggablepanel/src/main/java/com/github/pedrovgs/DraggableView.java @@ -555,7 +555,7 @@ private void initializeAttributes(AttributeSet attrs) { */ private boolean smoothSlideTo(float slideOffset) { final int topBound = getPaddingTop(); - int x = (int) (slideOffset * (getWidth() - transformer.getMinWidth())); + int x = (int) (slideOffset * (getWidth() - transformer.getMinWidthPlusMarginRight())); int y = (int) (topBound + slideOffset * getVerticalDragRange()); if (viewDragHelper.smoothSlideViewTo(dragView, x, y)) { ViewCompat.postInvalidateOnAnimation(this); diff --git a/draggablepanel/src/main/java/com/github/pedrovgs/transformer/ResizeTransformer.java b/draggablepanel/src/main/java/com/github/pedrovgs/transformer/ResizeTransformer.java index 277af6a..004f1e3 100644 --- a/draggablepanel/src/main/java/com/github/pedrovgs/transformer/ResizeTransformer.java +++ b/draggablepanel/src/main/java/com/github/pedrovgs/transformer/ResizeTransformer.java @@ -70,13 +70,13 @@ class ResizeTransformer extends Transformer { * * @param verticalDragOffset used to calculate the new X position. */ - @Override public void updateXPosition(float verticalDragOffset) { - int left, top, right, bottom; - left = getOriginalWidth() - getViewWidth(); - right = getViewRightPosition(verticalDragOffset); + @Override + public void updateXPosition(float verticalDragOffset) { + int right = getViewRightPosition(verticalDragOffset); + int left = right - getViewWidth(); + int top = getView().getTop(); + int bottom = top + getViewHeight(); - top = getView().getTop(); - bottom = getView().getBottom(); getView().layout(left, top, right, bottom); } @@ -129,8 +129,8 @@ class ResizeTransformer extends Transformer { /** * Uses the X scale factor to calculate the min possible width. */ - @Override public int getMinWidth() { - return (int) (getOriginalWidth() / getXScaleFactor()); + @Override public int getMinWidthPlusMarginRight() { + return (int) (getOriginalWidth() * (1 - 1 / getXScaleFactor()) + getMarginRight()); } /** diff --git a/draggablepanel/src/main/java/com/github/pedrovgs/transformer/ScaleTransformer.java b/draggablepanel/src/main/java/com/github/pedrovgs/transformer/ScaleTransformer.java index b042f81..d912b90 100644 --- a/draggablepanel/src/main/java/com/github/pedrovgs/transformer/ScaleTransformer.java +++ b/draggablepanel/src/main/java/com/github/pedrovgs/transformer/ScaleTransformer.java @@ -107,7 +107,7 @@ class ScaleTransformer extends Transformer { /** * @return min view width. */ - @Override public int getMinWidth() { + @Override public int getMinWidthPlusMarginRight() { return (int) getOriginalWidth(); } diff --git a/draggablepanel/src/main/java/com/github/pedrovgs/transformer/Transformer.java b/draggablepanel/src/main/java/com/github/pedrovgs/transformer/Transformer.java index a63c422..d835aa7 100644 --- a/draggablepanel/src/main/java/com/github/pedrovgs/transformer/Transformer.java +++ b/draggablepanel/src/main/java/com/github/pedrovgs/transformer/Transformer.java @@ -173,5 +173,5 @@ public boolean isAboveTheMiddle() { /** * @return min possible width, after apply the transformation. */ - public abstract int getMinWidth(); + public abstract int getMinWidthPlusMarginRight(); } diff --git a/sample/src/main/java/com/github/pedrovgs/sample/activity/PlacesSampleActivity.java b/sample/src/main/java/com/github/pedrovgs/sample/activity/PlacesSampleActivity.java index e323fe4..f7136e4 100644 --- a/sample/src/main/java/com/github/pedrovgs/sample/activity/PlacesSampleActivity.java +++ b/sample/src/main/java/com/github/pedrovgs/sample/activity/PlacesSampleActivity.java @@ -249,11 +249,11 @@ private void initializeDraggablePanel() { float yScaleFactor = typedValue.getFloat(); draggablePanel.setXScaleFactor(xScaleFactor); draggablePanel.setYScaleFactor(yScaleFactor); - draggablePanel.setTopViewHeight(getResources().getDimension(R.dimen.top_fragment_height)); + draggablePanel.setTopViewHeight(getResources().getDimensionPixelSize(R.dimen.top_fragment_height)); draggablePanel.setTopFragmentMarginRight( - getResources().getDimension(R.dimen.top_fragment_margin)); + getResources().getDimensionPixelSize(R.dimen.top_fragment_margin)); draggablePanel.setTopFragmentMarginBottom( - getResources().getDimension(R.dimen.top_fragment_margin)); + getResources().getDimensionPixelSize(R.dimen.top_fragment_margin)); draggablePanel.initializeView(); draggablePanel.setVisibility(View.GONE); } From ca33ccf0e0d873ff667a0a642c7083f646bf6b70 Mon Sep 17 00:00:00 2001 From: Fiddl3 Date: Fri, 5 Dec 2014 15:57:11 +0100 Subject: [PATCH 07/19] Cleaned up Transformers code Removed unnecesary metods & variables Methods where size is calculated are merged - now in one pas of dragEvent dragView is redrawed only once, not twice --- .../com/github/pedrovgs/DraggableView.java | 6 +-- .../transformer/ResizeTransformer.java | 51 +++++-------------- .../transformer/ScaleTransformer.java | 26 ++-------- .../pedrovgs/transformer/Transformer.java | 29 +++-------- 4 files changed, 27 insertions(+), 85 deletions(-) diff --git a/draggablepanel/src/main/java/com/github/pedrovgs/DraggableView.java b/draggablepanel/src/main/java/com/github/pedrovgs/DraggableView.java index 2a7a717..57bab15 100644 --- a/draggablepanel/src/main/java/com/github/pedrovgs/DraggableView.java +++ b/draggablepanel/src/main/java/com/github/pedrovgs/DraggableView.java @@ -355,8 +355,7 @@ void attachBottomFragment(Fragment bottomFragment) { * displacement while the view is dragged. */ void changeDragViewPosition() { - transformer.updateXPosition(getVerticalDragOffset()); - transformer.updateYPosition(getVerticalDragOffset()); + transformer.updatePosition(getVerticalDragOffset()); } /** @@ -370,8 +369,7 @@ void changeSecondViewPosition() { * Modify dragged view scale based on the dragged view vertical position and the scale factor. */ void changeDragViewScale() { - transformer.updateWidth(getVerticalDragOffset()); - transformer.updateHeight(getVerticalDragOffset()); + transformer.updateScale(getVerticalDragOffset()); } /** diff --git a/draggablepanel/src/main/java/com/github/pedrovgs/transformer/ResizeTransformer.java b/draggablepanel/src/main/java/com/github/pedrovgs/transformer/ResizeTransformer.java index 004f1e3..2fc9c63 100644 --- a/draggablepanel/src/main/java/com/github/pedrovgs/transformer/ResizeTransformer.java +++ b/draggablepanel/src/main/java/com/github/pedrovgs/transformer/ResizeTransformer.java @@ -16,6 +16,7 @@ package com.github.pedrovgs.transformer; import android.view.View; +import android.widget.FrameLayout; import android.widget.RelativeLayout; /** @@ -26,44 +27,25 @@ */ class ResizeTransformer extends Transformer { - private int lastHeight; + private final RelativeLayout.LayoutParams layoutParams; ResizeTransformer(View view, View parent) { super(view, parent); + layoutParams = (RelativeLayout.LayoutParams)view.getLayoutParams(); } /** - * Changes view width using view's LayoutParam. + * Changes view scale using view's LayoutParam. * - * @param verticalDragOffset used to calculate the new width. + * @param verticalDragOffset used to calculate the new size. */ - @Override public void updateWidth(float verticalDragOffset) { - RelativeLayout.LayoutParams params = (RelativeLayout.LayoutParams) getView().getLayoutParams(); - int newWidth = (int) (getOriginalWidth() * (1 - verticalDragOffset / getXScaleFactor())); - params.width = newWidth; + @Override public void updateScale(float verticalDragOffset) { + layoutParams.width = (int) (getOriginalWidth() * (1 - verticalDragOffset / getXScaleFactor())); + layoutParams.height = (int) (getOriginalHeight() * (1 - verticalDragOffset / getYScaleFactor())); - getView().setLayoutParams(params); + getView().setLayoutParams(layoutParams); } - /** - * Changes view height using view's LayoutParam. - * - * @param verticalDragOffset used to calculate the new width. - */ - @Override public void updateHeight(float verticalDragOffset) { - RelativeLayout.LayoutParams params = (RelativeLayout.LayoutParams) getView().getLayoutParams(); - int newHeight = (int) (getOriginalHeight() * (1 - verticalDragOffset / getYScaleFactor())); - params.height = newHeight; - lastHeight = newHeight; - getView().setLayoutParams(params); - } - - /** - * @return last updated height or the view height if the view hasn't been changed yet. - */ - @Override public int getViewHeight() { - return lastHeight == 0 ? super.getViewHeight() : lastHeight; - } /** * Changes X view position using layout() method. @@ -71,21 +53,15 @@ class ResizeTransformer extends Transformer { * @param verticalDragOffset used to calculate the new X position. */ @Override - public void updateXPosition(float verticalDragOffset) { + public void updatePosition(float verticalDragOffset) { int right = getViewRightPosition(verticalDragOffset); - int left = right - getViewWidth(); + int left = right - layoutParams.width; int top = getView().getTop(); - int bottom = top + getViewHeight(); + int bottom = top + layoutParams.height; getView().layout(left, top, right, bottom); } - /** - * Empty implementation. ViewDragHelper already changes the Y position. - */ - @Override public void updateYPosition(float verticalDragOffset) { - // Empty - } /** * @return true if the right position of the view plus the right margin is equals to the parent @@ -116,7 +92,7 @@ public void updateXPosition(float verticalDragOffset) { * the parent width. */ @Override public boolean isNextToLeftBound() { - return (getView().getLeft() - getMarginRight()) < getParentView().getWidth() * 0.25; + return (getView().getLeft() - getMarginRight()) < getParentView().getWidth() * 0.1; } /** @@ -141,4 +117,5 @@ public void updateXPosition(float verticalDragOffset) { private int getViewRightPosition(float verticalDragOffset) { return (int) ((getOriginalWidth()) - getMarginRight() * verticalDragOffset); } + } diff --git a/draggablepanel/src/main/java/com/github/pedrovgs/transformer/ScaleTransformer.java b/draggablepanel/src/main/java/com/github/pedrovgs/transformer/ScaleTransformer.java index d912b90..acab82a 100644 --- a/draggablepanel/src/main/java/com/github/pedrovgs/transformer/ScaleTransformer.java +++ b/draggablepanel/src/main/java/com/github/pedrovgs/transformer/ScaleTransformer.java @@ -32,38 +32,22 @@ class ScaleTransformer extends Transformer { } /** - * Uses Nineoldandroids to change the scale in the X axis. + * Uses Nineoldandroids to change the scale. * * @param verticalDragOffset used to calculate the new scale. */ - @Override public void updateWidth(float verticalDragOffset) { + @Override public void updateScale(float verticalDragOffset) { ViewHelper.setScaleX(getView(), 1 - verticalDragOffset / getXScaleFactor()); - } - - /** - * Uses Nineoldandroids to change the scale in the Y axis. - * - * @param verticalDragOffset used to calculate the new scale. - */ - @Override public void updateHeight(float verticalDragOffset) { ViewHelper.setScaleY(getView(), 1 - verticalDragOffset / getYScaleFactor()); } /** - * Uses Nineoldandroids to change the X position of the view. + * Uses Nineoldandroids to change the position of the view. * - * @param verticalDragOffset used to calculate the new X position. + * @param verticalDragOffset used to calculate the new position. */ - @Override public void updateXPosition(float verticalDragOffset) { + @Override public void updatePosition(float verticalDragOffset) { ViewHelper.setPivotX(getView(), getView().getWidth() - getMarginRight()); - } - - /** - * Uses Nineoldandroids to change the Y position of the view. - * - * @param verticalDragOffset used to calculate the new Y position. - */ - @Override public void updateYPosition(float verticalDragOffset) { ViewHelper.setPivotY(getView(), getView().getHeight() - getMarginBottom()); } diff --git a/draggablepanel/src/main/java/com/github/pedrovgs/transformer/Transformer.java b/draggablepanel/src/main/java/com/github/pedrovgs/transformer/Transformer.java index d835aa7..93a248c 100644 --- a/draggablepanel/src/main/java/com/github/pedrovgs/transformer/Transformer.java +++ b/draggablepanel/src/main/java/com/github/pedrovgs/transformer/Transformer.java @@ -37,7 +37,6 @@ public abstract class Transformer { private final View view; private final View parent; - private int viewHeight; private int marginRight; private int marginBottom; @@ -84,22 +83,17 @@ public void setMarginBottom(int marginBottom) { this.marginBottom = Math.round(marginBottom); } - public int getViewHeight() { - return viewHeight < 0f ? view.getMeasuredHeight() : viewHeight; - } - /** * Change view height using the LayoutParams of the view. * * @param newHeight to change.. */ public void setViewHeight(int newHeight) { - viewHeight = newHeight; - if (viewHeight > 0) { - originalHeight = viewHeight; + if (newHeight > 0) { + originalHeight = newHeight; RelativeLayout.LayoutParams layoutParams = (RelativeLayout.LayoutParams) view.getLayoutParams(); - layoutParams.height = viewHeight; + layoutParams.height = newHeight; view.setLayoutParams(layoutParams); } } @@ -112,20 +106,16 @@ protected View getParentView() { return parent; } - public abstract void updateXPosition(float verticalDragOffset); - - public abstract void updateYPosition(float verticalDragOffset); - - public abstract void updateWidth(float verticalDragOffset); + public abstract void updatePosition(float verticalDragOffset); - public abstract void updateHeight(float verticalDragOffset); + public abstract void updateScale(float verticalDragOffset); /** * @return height of the view before it has change the size. */ public int getOriginalHeight() { if (originalHeight == 0) { - originalHeight = viewHeight < 0 ? view.getMeasuredHeight() : viewHeight; + originalHeight = view.getMeasuredHeight(); } return originalHeight; } @@ -140,13 +130,6 @@ public int getOriginalWidth() { return originalWidth; } - /** - * @return current width of the view. - */ - public int getViewWidth() { - return getView().getMeasuredWidth(); - } - public boolean isViewAtTop() { return view.getTop() == 0; } From 22decc0394572ffb0038a03f03aeeac06504dffd Mon Sep 17 00:00:00 2001 From: Fiddl3 Date: Fri, 5 Dec 2014 16:35:58 +0100 Subject: [PATCH 08/19] downgrade gradle plugin --- build.gradle | 2 +- draggablepanel/build.gradle | 2 +- gradle.properties | 6 +++--- gradle/wrapper/gradle-wrapper.properties | 4 ++-- 4 files changed, 7 insertions(+), 7 deletions(-) diff --git a/build.gradle b/build.gradle index 7266d1b..8d0a477 100644 --- a/build.gradle +++ b/build.gradle @@ -3,7 +3,7 @@ buildscript { mavenCentral() } dependencies { - classpath 'com.android.tools.build:gradle:1.0.0-rc3' + classpath 'com.android.tools.build:gradle:0.12.2' } } diff --git a/draggablepanel/build.gradle b/draggablepanel/build.gradle index 4cc7ec3..149fbde 100644 --- a/draggablepanel/build.gradle +++ b/draggablepanel/build.gradle @@ -2,7 +2,7 @@ apply plugin: 'com.android.library' apply plugin: 'checkstyle' dependencies { - compile 'com.android.support:support-v4:21.0.2' + compile 'com.android.support:support-v4:20.0.0' compile 'com.nineoldandroids:library:2.4.0' } diff --git a/gradle.properties b/gradle.properties index b21707d..7886a14 100644 --- a/gradle.properties +++ b/gradle.properties @@ -13,7 +13,7 @@ POM_LICENCE_DIST=repo POM_DEVELOPER_ID=pedrovgs POM_DEVELOPER_NAME=Pedro Vicente Gómez Sánchez -ANDROID_BUILD_TOOLS_VERSION=21.1.1 -ANDROID_COMPILE_SDK_VERSION=21 -ANDROID_TARGET_SDK_VERSION=21 +ANDROID_BUILD_TOOLS_VERSION=20.0.0 +ANDROID_COMPILE_SDK_VERSION=20 +ANDROID_TARGET_SDK_VERSION=20 ANDROID_MIN_SDK=8 \ No newline at end of file diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index fad6672..f3a222f 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,6 +1,6 @@ -#Thu Dec 04 23:43:56 CET 2014 +#Fri Dec 05 16:34:39 CET 2014 distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-2.2.1-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-1.12-all.zip From 1675159a91ea7ea39f62e6f286d03a81489d9717 Mon Sep 17 00:00:00 2001 From: Fiddl3 Date: Fri, 5 Dec 2014 16:41:59 +0100 Subject: [PATCH 09/19] style update --- .../java/com/github/pedrovgs/transformer/ResizeTransformer.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/draggablepanel/src/main/java/com/github/pedrovgs/transformer/ResizeTransformer.java b/draggablepanel/src/main/java/com/github/pedrovgs/transformer/ResizeTransformer.java index 2fc9c63..e54c914 100644 --- a/draggablepanel/src/main/java/com/github/pedrovgs/transformer/ResizeTransformer.java +++ b/draggablepanel/src/main/java/com/github/pedrovgs/transformer/ResizeTransformer.java @@ -31,7 +31,7 @@ class ResizeTransformer extends Transformer { ResizeTransformer(View view, View parent) { super(view, parent); - layoutParams = (RelativeLayout.LayoutParams)view.getLayoutParams(); + layoutParams = (RelativeLayout.LayoutParams) view.getLayoutParams(); } /** From e73f2e3256b4bad2a2f7ca81ee6d7912c1891863 Mon Sep 17 00:00:00 2001 From: Fiddl3 Date: Fri, 5 Dec 2014 16:52:23 +0100 Subject: [PATCH 10/19] Unused import removed --- .../java/com/github/pedrovgs/transformer/ResizeTransformer.java | 1 - 1 file changed, 1 deletion(-) diff --git a/draggablepanel/src/main/java/com/github/pedrovgs/transformer/ResizeTransformer.java b/draggablepanel/src/main/java/com/github/pedrovgs/transformer/ResizeTransformer.java index e54c914..640a66c 100644 --- a/draggablepanel/src/main/java/com/github/pedrovgs/transformer/ResizeTransformer.java +++ b/draggablepanel/src/main/java/com/github/pedrovgs/transformer/ResizeTransformer.java @@ -16,7 +16,6 @@ package com.github.pedrovgs.transformer; import android.view.View; -import android.widget.FrameLayout; import android.widget.RelativeLayout; /** From 673634db94a7db84d8cf196fe0573054101a2444 Mon Sep 17 00:00:00 2001 From: Fiddl3 Date: Fri, 5 Dec 2014 18:07:26 +0100 Subject: [PATCH 11/19] Updated README & MINIMUM_DX value --- README.md | 11 ----------- .../com/github/pedrovgs/DraggableViewCallback.java | 2 +- 2 files changed, 1 insertion(+), 12 deletions(-) diff --git a/README.md b/README.md index 972f852..a339048 100644 --- a/README.md +++ b/README.md @@ -168,17 +168,6 @@ Do you want to resize the top view instead of scale it? Add ``dragable_view:top_ draggable_view:top_view_resize="true"> ``` -Building the sample app ------------------------ - -youtube-android-player-api is required to successfully build and open the sample app in Android Studio. -Unfortunately this library has not been published to Maven central, so you will need to download and deploy it locally. -The [mvn-install-youtubeplayerapi.sh script][19] can be used to easily do this with the following three commands: - - wget https://raw.githubusercontent.com/wuman/youtube-android-player-mvn-install/master/mvn-install-youtubeplayerapi.sh - chmod +x mvn-install-youtubeplayerapi.sh - ./mvn-install-youtubeplayerapi.sh - Do you want to contribute? TODO ------------------------------- diff --git a/draggablepanel/src/main/java/com/github/pedrovgs/DraggableViewCallback.java b/draggablepanel/src/main/java/com/github/pedrovgs/DraggableViewCallback.java index b3bf495..08016ba 100644 --- a/draggablepanel/src/main/java/com/github/pedrovgs/DraggableViewCallback.java +++ b/draggablepanel/src/main/java/com/github/pedrovgs/DraggableViewCallback.java @@ -26,7 +26,7 @@ */ class DraggableViewCallback extends ViewDragHelper.Callback { - private static final int MINIMUM_DX_FOR_HORIZONTAL_DRAG = 10; + private static final int MINIMUM_DX_FOR_HORIZONTAL_DRAG = 5; private static final int MINIMUM_DY_FOR_VERTICAL_DRAG = 15; private static final float X_MIN_VELOCITY = 1500; private static final float Y_MIN_VELOCITY = 1000; From 96d58cb495e78ca9600cc3efc618b91939b4709b Mon Sep 17 00:00:00 2001 From: Fiddl3 Date: Fri, 5 Dec 2014 18:56:46 +0100 Subject: [PATCH 12/19] Fix for secondView issue with ScaleStransformer --- .../main/java/com/github/pedrovgs/DraggableViewCallback.java | 3 +++ 1 file changed, 3 insertions(+) diff --git a/draggablepanel/src/main/java/com/github/pedrovgs/DraggableViewCallback.java b/draggablepanel/src/main/java/com/github/pedrovgs/DraggableViewCallback.java index 08016ba..60043e0 100644 --- a/draggablepanel/src/main/java/com/github/pedrovgs/DraggableViewCallback.java +++ b/draggablepanel/src/main/java/com/github/pedrovgs/DraggableViewCallback.java @@ -54,6 +54,9 @@ public DraggableViewCallback(DraggableView draggableView, View draggedView) { * @param dy change in Y position from the last call. */ @Override public void onViewPositionChanged(View changedView, int left, int top, int dx, int dy) { + if(0 == top){ + draggableView.requestLayout(); + } if (draggableView.isDragViewAtBottom()) { draggableView.changeDragViewViewAlpha(); } else { From 58b63f32402f5ebf05b602863d379e1a1c3cbe43 Mon Sep 17 00:00:00 2001 From: Fiddl3 Date: Fri, 5 Dec 2014 19:05:20 +0100 Subject: [PATCH 13/19] Fix for ResiezeTransformer issue --- .../com/github/pedrovgs/transformer/ResizeTransformer.java | 2 +- sample/res/values/dimens.xml | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/draggablepanel/src/main/java/com/github/pedrovgs/transformer/ResizeTransformer.java b/draggablepanel/src/main/java/com/github/pedrovgs/transformer/ResizeTransformer.java index 640a66c..1912f7d 100644 --- a/draggablepanel/src/main/java/com/github/pedrovgs/transformer/ResizeTransformer.java +++ b/draggablepanel/src/main/java/com/github/pedrovgs/transformer/ResizeTransformer.java @@ -98,7 +98,7 @@ public void updatePosition(float verticalDragOffset) { * Uses the Y scale factor to calculate the min possible height. */ @Override public int getMinHeightPlusMargin() { - return (int) ((getOriginalHeight() / getYScaleFactor()) + getMarginBottom()); + return (int) (getOriginalHeight() * (1 - 1 / getYScaleFactor()) + getMarginBottom()); } /** diff --git a/sample/res/values/dimens.xml b/sample/res/values/dimens.xml index 0fea593..e61d3e5 100644 --- a/sample/res/values/dimens.xml +++ b/sample/res/values/dimens.xml @@ -6,8 +6,8 @@ 10dip 18sp 10dip - 2 - 2 + 2.3 + 2.3 10dip 10dip 10dip From 590f9b54ce3d1893ff7a5877e511078d97c4af3e Mon Sep 17 00:00:00 2001 From: Fiddl3 Date: Fri, 5 Dec 2014 19:22:17 +0100 Subject: [PATCH 14/19] Style update This should be at end --- .../java/com/github/pedrovgs/DraggableViewCallback.java | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/draggablepanel/src/main/java/com/github/pedrovgs/DraggableViewCallback.java b/draggablepanel/src/main/java/com/github/pedrovgs/DraggableViewCallback.java index 60043e0..6b3098b 100644 --- a/draggablepanel/src/main/java/com/github/pedrovgs/DraggableViewCallback.java +++ b/draggablepanel/src/main/java/com/github/pedrovgs/DraggableViewCallback.java @@ -54,9 +54,7 @@ public DraggableViewCallback(DraggableView draggableView, View draggedView) { * @param dy change in Y position from the last call. */ @Override public void onViewPositionChanged(View changedView, int left, int top, int dx, int dy) { - if(0 == top){ - draggableView.requestLayout(); - } + if (draggableView.isDragViewAtBottom()) { draggableView.changeDragViewViewAlpha(); } else { @@ -67,6 +65,9 @@ public DraggableViewCallback(DraggableView draggableView, View draggedView) { draggableView.changeSecondViewPosition(); draggableView.changeBackgroundAlpha(); } + if (0 == top) { + draggableView.requestLayout(); + } } /** From b75e8bd34948b04bb2a07b1c04f8fa71d5a7f95d Mon Sep 17 00:00:00 2001 From: Fiddl3 Date: Fri, 5 Dec 2014 21:06:02 +0100 Subject: [PATCH 15/19] Small improvements associated with VerticalDrag in ResizeTransformer --- .../java/com/github/pedrovgs/transformer/ResizeTransformer.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/draggablepanel/src/main/java/com/github/pedrovgs/transformer/ResizeTransformer.java b/draggablepanel/src/main/java/com/github/pedrovgs/transformer/ResizeTransformer.java index 1912f7d..6af7bc3 100644 --- a/draggablepanel/src/main/java/com/github/pedrovgs/transformer/ResizeTransformer.java +++ b/draggablepanel/src/main/java/com/github/pedrovgs/transformer/ResizeTransformer.java @@ -91,7 +91,7 @@ public void updatePosition(float verticalDragOffset) { * the parent width. */ @Override public boolean isNextToLeftBound() { - return (getView().getLeft() - getMarginRight()) < getParentView().getWidth() * 0.1; + return (getView().getLeft() - getMarginRight()) < getParentView().getWidth() * 0.05; } /** From d3f77f794ac55e0b97716ead23fe67eaadaf7824 Mon Sep 17 00:00:00 2001 From: Fiddl3 Date: Fri, 5 Dec 2014 21:18:42 +0100 Subject: [PATCH 16/19] gradle update especially for Travis --- .travis.yml | 8 ++------ build.gradle | 2 +- draggablepanel/build.gradle | 2 +- gradle.properties | 8 ++++---- gradle/wrapper/gradle-wrapper.properties | 4 ++-- sample/AndroidManifest.xml | 2 +- sample/build.gradle | 2 +- 7 files changed, 12 insertions(+), 16 deletions(-) diff --git a/.travis.yml b/.travis.yml index 33aedb2..54501b8 100644 --- a/.travis.yml +++ b/.travis.yml @@ -2,15 +2,11 @@ language: android android: components: - - build-tools-20.0.0 - - android-20 + - build-tools-21.1.1 + - android-21 - extra-google-google_play_services - extra-google-m2repository -before_script: - - wget https://raw.githubusercontent.com/wuman/youtube-android-player-mvn-install/master/mvn-install-youtubeplayerapi.sh - - chmod +x mvn-install-youtubeplayerapi.sh - - ./mvn-install-youtubeplayerapi.sh script: ./gradlew checkstyle build diff --git a/build.gradle b/build.gradle index 8d0a477..2fa4d9e 100644 --- a/build.gradle +++ b/build.gradle @@ -3,7 +3,7 @@ buildscript { mavenCentral() } dependencies { - classpath 'com.android.tools.build:gradle:0.12.2' + classpath 'com.android.tools.build:gradle:1.0.0-rc4' } } diff --git a/draggablepanel/build.gradle b/draggablepanel/build.gradle index 149fbde..42018fd 100644 --- a/draggablepanel/build.gradle +++ b/draggablepanel/build.gradle @@ -2,7 +2,7 @@ apply plugin: 'com.android.library' apply plugin: 'checkstyle' dependencies { - compile 'com.android.support:support-v4:20.0.0' + compile 'com.android.support:support-v4:21.0.2' compile 'com.nineoldandroids:library:2.4.0' } diff --git a/gradle.properties b/gradle.properties index 7886a14..00c0b85 100644 --- a/gradle.properties +++ b/gradle.properties @@ -13,7 +13,7 @@ POM_LICENCE_DIST=repo POM_DEVELOPER_ID=pedrovgs POM_DEVELOPER_NAME=Pedro Vicente Gómez Sánchez -ANDROID_BUILD_TOOLS_VERSION=20.0.0 -ANDROID_COMPILE_SDK_VERSION=20 -ANDROID_TARGET_SDK_VERSION=20 -ANDROID_MIN_SDK=8 \ No newline at end of file +ANDROID_BUILD_TOOLS_VERSION=21.1.1 +ANDROID_COMPILE_SDK_VERSION=21 +ANDROID_TARGET_SDK_VERSION=21 +ANDROID_MIN_SDK=9 \ No newline at end of file diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index f3a222f..a3dca89 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,6 +1,6 @@ -#Fri Dec 05 16:34:39 CET 2014 +#Fri Dec 05 21:14:50 CET 2014 distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-1.12-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-2.2.1-all.zip diff --git a/sample/AndroidManifest.xml b/sample/AndroidManifest.xml index 960a0f2..aa10569 100755 --- a/sample/AndroidManifest.xml +++ b/sample/AndroidManifest.xml @@ -2,7 +2,7 @@ - + diff --git a/sample/build.gradle b/sample/build.gradle index 047b963..e6c97fd 100644 --- a/sample/build.gradle +++ b/sample/build.gradle @@ -9,7 +9,7 @@ dependencies { compile 'com.jakewharton:butterknife:4.0.1' compile 'com.squareup.dagger:dagger:1.1.0' compile 'com.github.pedrovgs:renderers:1.0.9' - compile 'com.google.android.gms:play-services:4.1.32' + compile 'com.google.android.gms:play-services:6.1.71' compile 'com.actionbarsherlock:actionbarsherlock:4.4.0@aar' compile files('libs/YouTubeAndroidPlayerApi.jar') } From 0b5f55ed4570fb5c007f63badf00dbf3a2c77b36 Mon Sep 17 00:00:00 2001 From: Fiddl3 Date: Fri, 5 Dec 2014 21:36:52 +0100 Subject: [PATCH 17/19] Revert "gradle update" This reverts commit d3f77f794ac55e0b97716ead23fe67eaadaf7824. --- .travis.yml | 8 ++++++-- build.gradle | 2 +- draggablepanel/build.gradle | 2 +- gradle.properties | 8 ++++---- gradle/wrapper/gradle-wrapper.properties | 4 ++-- sample/AndroidManifest.xml | 2 +- sample/build.gradle | 2 +- 7 files changed, 16 insertions(+), 12 deletions(-) diff --git a/.travis.yml b/.travis.yml index 54501b8..33aedb2 100644 --- a/.travis.yml +++ b/.travis.yml @@ -2,11 +2,15 @@ language: android android: components: - - build-tools-21.1.1 - - android-21 + - build-tools-20.0.0 + - android-20 - extra-google-google_play_services - extra-google-m2repository +before_script: + - wget https://raw.githubusercontent.com/wuman/youtube-android-player-mvn-install/master/mvn-install-youtubeplayerapi.sh + - chmod +x mvn-install-youtubeplayerapi.sh + - ./mvn-install-youtubeplayerapi.sh script: ./gradlew checkstyle build diff --git a/build.gradle b/build.gradle index 2fa4d9e..8d0a477 100644 --- a/build.gradle +++ b/build.gradle @@ -3,7 +3,7 @@ buildscript { mavenCentral() } dependencies { - classpath 'com.android.tools.build:gradle:1.0.0-rc4' + classpath 'com.android.tools.build:gradle:0.12.2' } } diff --git a/draggablepanel/build.gradle b/draggablepanel/build.gradle index 42018fd..149fbde 100644 --- a/draggablepanel/build.gradle +++ b/draggablepanel/build.gradle @@ -2,7 +2,7 @@ apply plugin: 'com.android.library' apply plugin: 'checkstyle' dependencies { - compile 'com.android.support:support-v4:21.0.2' + compile 'com.android.support:support-v4:20.0.0' compile 'com.nineoldandroids:library:2.4.0' } diff --git a/gradle.properties b/gradle.properties index 00c0b85..7886a14 100644 --- a/gradle.properties +++ b/gradle.properties @@ -13,7 +13,7 @@ POM_LICENCE_DIST=repo POM_DEVELOPER_ID=pedrovgs POM_DEVELOPER_NAME=Pedro Vicente Gómez Sánchez -ANDROID_BUILD_TOOLS_VERSION=21.1.1 -ANDROID_COMPILE_SDK_VERSION=21 -ANDROID_TARGET_SDK_VERSION=21 -ANDROID_MIN_SDK=9 \ No newline at end of file +ANDROID_BUILD_TOOLS_VERSION=20.0.0 +ANDROID_COMPILE_SDK_VERSION=20 +ANDROID_TARGET_SDK_VERSION=20 +ANDROID_MIN_SDK=8 \ No newline at end of file diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index a3dca89..f3a222f 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,6 +1,6 @@ -#Fri Dec 05 21:14:50 CET 2014 +#Fri Dec 05 16:34:39 CET 2014 distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-2.2.1-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-1.12-all.zip diff --git a/sample/AndroidManifest.xml b/sample/AndroidManifest.xml index aa10569..960a0f2 100755 --- a/sample/AndroidManifest.xml +++ b/sample/AndroidManifest.xml @@ -2,7 +2,7 @@ - + diff --git a/sample/build.gradle b/sample/build.gradle index e6c97fd..047b963 100644 --- a/sample/build.gradle +++ b/sample/build.gradle @@ -9,7 +9,7 @@ dependencies { compile 'com.jakewharton:butterknife:4.0.1' compile 'com.squareup.dagger:dagger:1.1.0' compile 'com.github.pedrovgs:renderers:1.0.9' - compile 'com.google.android.gms:play-services:6.1.71' + compile 'com.google.android.gms:play-services:4.1.32' compile 'com.actionbarsherlock:actionbarsherlock:4.4.0@aar' compile files('libs/YouTubeAndroidPlayerApi.jar') } From 27e35d7aef10633c210a2c19bbc46ac2cc52204d Mon Sep 17 00:00:00 2001 From: Fiddl3 Date: Fri, 5 Dec 2014 21:50:14 +0100 Subject: [PATCH 18/19] the last approach to the updating --- .travis.yml | 5 +++-- build.gradle | 2 +- draggablepanel/build.gradle | 2 +- gradle.properties | 8 ++++---- gradle/wrapper/gradle-wrapper.properties | 4 ++-- sample/AndroidManifest.xml | 2 +- sample/build.gradle | 2 +- 7 files changed, 13 insertions(+), 12 deletions(-) diff --git a/.travis.yml b/.travis.yml index 33aedb2..57cd6cd 100644 --- a/.travis.yml +++ b/.travis.yml @@ -2,10 +2,11 @@ language: android android: components: - - build-tools-20.0.0 - - android-20 + - build-tools-21.1.1 + - android-21 - extra-google-google_play_services - extra-google-m2repository + - extra-android-support before_script: - wget https://raw.githubusercontent.com/wuman/youtube-android-player-mvn-install/master/mvn-install-youtubeplayerapi.sh diff --git a/build.gradle b/build.gradle index 8d0a477..2fa4d9e 100644 --- a/build.gradle +++ b/build.gradle @@ -3,7 +3,7 @@ buildscript { mavenCentral() } dependencies { - classpath 'com.android.tools.build:gradle:0.12.2' + classpath 'com.android.tools.build:gradle:1.0.0-rc4' } } diff --git a/draggablepanel/build.gradle b/draggablepanel/build.gradle index 149fbde..42018fd 100644 --- a/draggablepanel/build.gradle +++ b/draggablepanel/build.gradle @@ -2,7 +2,7 @@ apply plugin: 'com.android.library' apply plugin: 'checkstyle' dependencies { - compile 'com.android.support:support-v4:20.0.0' + compile 'com.android.support:support-v4:21.0.2' compile 'com.nineoldandroids:library:2.4.0' } diff --git a/gradle.properties b/gradle.properties index 7886a14..00c0b85 100644 --- a/gradle.properties +++ b/gradle.properties @@ -13,7 +13,7 @@ POM_LICENCE_DIST=repo POM_DEVELOPER_ID=pedrovgs POM_DEVELOPER_NAME=Pedro Vicente Gómez Sánchez -ANDROID_BUILD_TOOLS_VERSION=20.0.0 -ANDROID_COMPILE_SDK_VERSION=20 -ANDROID_TARGET_SDK_VERSION=20 -ANDROID_MIN_SDK=8 \ No newline at end of file +ANDROID_BUILD_TOOLS_VERSION=21.1.1 +ANDROID_COMPILE_SDK_VERSION=21 +ANDROID_TARGET_SDK_VERSION=21 +ANDROID_MIN_SDK=9 \ No newline at end of file diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index f3a222f..c97fb95 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,6 +1,6 @@ -#Fri Dec 05 16:34:39 CET 2014 +#Fri Dec 05 21:49:24 CET 2014 distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-1.12-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-2.2.1-all.zip diff --git a/sample/AndroidManifest.xml b/sample/AndroidManifest.xml index 960a0f2..aa10569 100755 --- a/sample/AndroidManifest.xml +++ b/sample/AndroidManifest.xml @@ -2,7 +2,7 @@ - + diff --git a/sample/build.gradle b/sample/build.gradle index 047b963..e6c97fd 100644 --- a/sample/build.gradle +++ b/sample/build.gradle @@ -9,7 +9,7 @@ dependencies { compile 'com.jakewharton:butterknife:4.0.1' compile 'com.squareup.dagger:dagger:1.1.0' compile 'com.github.pedrovgs:renderers:1.0.9' - compile 'com.google.android.gms:play-services:4.1.32' + compile 'com.google.android.gms:play-services:6.1.71' compile 'com.actionbarsherlock:actionbarsherlock:4.4.0@aar' compile files('libs/YouTubeAndroidPlayerApi.jar') } From 43d0a1bc8dee3400a8a3c40cd9e314c25bd59c4a Mon Sep 17 00:00:00 2001 From: Fiddl3 Date: Fri, 5 Dec 2014 21:59:05 +0100 Subject: [PATCH 19/19] Revert "the last approach to the updating" This reverts commit 27e35d7aef10633c210a2c19bbc46ac2cc52204d. --- .travis.yml | 5 ++--- build.gradle | 2 +- draggablepanel/build.gradle | 2 +- gradle.properties | 8 ++++---- gradle/wrapper/gradle-wrapper.properties | 4 ++-- sample/AndroidManifest.xml | 2 +- sample/build.gradle | 2 +- 7 files changed, 12 insertions(+), 13 deletions(-) diff --git a/.travis.yml b/.travis.yml index 57cd6cd..33aedb2 100644 --- a/.travis.yml +++ b/.travis.yml @@ -2,11 +2,10 @@ language: android android: components: - - build-tools-21.1.1 - - android-21 + - build-tools-20.0.0 + - android-20 - extra-google-google_play_services - extra-google-m2repository - - extra-android-support before_script: - wget https://raw.githubusercontent.com/wuman/youtube-android-player-mvn-install/master/mvn-install-youtubeplayerapi.sh diff --git a/build.gradle b/build.gradle index 2fa4d9e..8d0a477 100644 --- a/build.gradle +++ b/build.gradle @@ -3,7 +3,7 @@ buildscript { mavenCentral() } dependencies { - classpath 'com.android.tools.build:gradle:1.0.0-rc4' + classpath 'com.android.tools.build:gradle:0.12.2' } } diff --git a/draggablepanel/build.gradle b/draggablepanel/build.gradle index 42018fd..149fbde 100644 --- a/draggablepanel/build.gradle +++ b/draggablepanel/build.gradle @@ -2,7 +2,7 @@ apply plugin: 'com.android.library' apply plugin: 'checkstyle' dependencies { - compile 'com.android.support:support-v4:21.0.2' + compile 'com.android.support:support-v4:20.0.0' compile 'com.nineoldandroids:library:2.4.0' } diff --git a/gradle.properties b/gradle.properties index 00c0b85..7886a14 100644 --- a/gradle.properties +++ b/gradle.properties @@ -13,7 +13,7 @@ POM_LICENCE_DIST=repo POM_DEVELOPER_ID=pedrovgs POM_DEVELOPER_NAME=Pedro Vicente Gómez Sánchez -ANDROID_BUILD_TOOLS_VERSION=21.1.1 -ANDROID_COMPILE_SDK_VERSION=21 -ANDROID_TARGET_SDK_VERSION=21 -ANDROID_MIN_SDK=9 \ No newline at end of file +ANDROID_BUILD_TOOLS_VERSION=20.0.0 +ANDROID_COMPILE_SDK_VERSION=20 +ANDROID_TARGET_SDK_VERSION=20 +ANDROID_MIN_SDK=8 \ No newline at end of file diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index c97fb95..f3a222f 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,6 +1,6 @@ -#Fri Dec 05 21:49:24 CET 2014 +#Fri Dec 05 16:34:39 CET 2014 distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-2.2.1-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-1.12-all.zip diff --git a/sample/AndroidManifest.xml b/sample/AndroidManifest.xml index aa10569..960a0f2 100755 --- a/sample/AndroidManifest.xml +++ b/sample/AndroidManifest.xml @@ -2,7 +2,7 @@ - + diff --git a/sample/build.gradle b/sample/build.gradle index e6c97fd..047b963 100644 --- a/sample/build.gradle +++ b/sample/build.gradle @@ -9,7 +9,7 @@ dependencies { compile 'com.jakewharton:butterknife:4.0.1' compile 'com.squareup.dagger:dagger:1.1.0' compile 'com.github.pedrovgs:renderers:1.0.9' - compile 'com.google.android.gms:play-services:6.1.71' + compile 'com.google.android.gms:play-services:4.1.32' compile 'com.actionbarsherlock:actionbarsherlock:4.4.0@aar' compile files('libs/YouTubeAndroidPlayerApi.jar') }