From d1f13e8c3d4133eca6920e1e079d30f8f408f9a4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alex=20Gutie=CC=81rrez?= Date: Thu, 19 Jan 2017 18:23:18 +0100 Subject: [PATCH 1/2] Included sanity check to allow non-parallax ViewHolder elements --- .../parallaxrecyclerview/ParallaxRecyclerView.java | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/library/app/src/main/java/com/yayandroid/parallaxrecyclerview/ParallaxRecyclerView.java b/library/app/src/main/java/com/yayandroid/parallaxrecyclerview/ParallaxRecyclerView.java index d0984ca..390b887 100644 --- a/library/app/src/main/java/com/yayandroid/parallaxrecyclerview/ParallaxRecyclerView.java +++ b/library/app/src/main/java/com/yayandroid/parallaxrecyclerview/ParallaxRecyclerView.java @@ -44,7 +44,10 @@ public void onScrolled(RecyclerView recyclerView, int dx, int dy) { super.onScrolled(recyclerView, dx, dy); for (int i = 0; i < recyclerView.getChildCount(); i++) { - ((ParallaxViewHolder) recyclerView.getChildViewHolder(recyclerView.getChildAt(i))).animateImage(); + ViewHolder viewHolder = recyclerView.getChildViewHolder(recyclerView.getChildAt(i)); + if (viewHolder instanceof ParallaxViewHolder) { + ((ParallaxViewHolder) viewHolder).animateImage(); + } } if (scrollListener != null) From 0c3bbb00abe857ccd34e9409b0813cf1b078bfa9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alex=20Gutie=CC=81rrez?= Date: Thu, 19 Jan 2017 18:25:10 +0100 Subject: [PATCH 2/2] The Parallax effect will take into account the height of the ImageView instead of the row height to allow ParallaxImageView to be included in more complex cells --- .../parallaxrecyclerview/ParallaxImageView.java | 15 +++++++-------- .../parallaxrecyclerview/ParallaxViewHolder.java | 2 +- 2 files changed, 8 insertions(+), 9 deletions(-) diff --git a/library/app/src/main/java/com/yayandroid/parallaxrecyclerview/ParallaxImageView.java b/library/app/src/main/java/com/yayandroid/parallaxrecyclerview/ParallaxImageView.java index 861afab..4ecddf8 100644 --- a/library/app/src/main/java/com/yayandroid/parallaxrecyclerview/ParallaxImageView.java +++ b/library/app/src/main/java/com/yayandroid/parallaxrecyclerview/ParallaxImageView.java @@ -23,7 +23,6 @@ public class ParallaxImageView extends ImageView { private boolean needToTranslate = true; private ParallaxImageListener listener; - private int rowHeight = -1; private int rowYPos = -1; private int recyclerViewHeight = -1; private int recyclerViewYPos = -1; @@ -151,24 +150,24 @@ private boolean getValues() { if (values == null) return false; - this.rowHeight = values[0]; - this.rowYPos = values[1]; - this.recyclerViewHeight = values[2]; - this.recyclerViewYPos = values[3]; + this.rowYPos = values[0]; + this.recyclerViewHeight = values[1]; + this.recyclerViewYPos = values[2]; return true; } private void calculateAndMove() { float distanceFromCenter = (recyclerViewYPos + recyclerViewHeight) / 2 - rowYPos; - int imageHeight = getDrawable().getIntrinsicHeight(); + int drawableHeight = getDrawable().getIntrinsicHeight(); + int imageViewHeight = getMeasuredHeight(); float scale = 1; if (shouldCenterCrop) { scale = recomputeImageMatrix(); - imageHeight *= scale; + drawableHeight *= scale; } - float difference = imageHeight - rowHeight; + float difference = drawableHeight - imageViewHeight; float move = (distanceFromCenter / recyclerViewHeight) * difference * parallaxRatio; moveTo((move / 2) - (difference / 2), scale); diff --git a/library/app/src/main/java/com/yayandroid/parallaxrecyclerview/ParallaxViewHolder.java b/library/app/src/main/java/com/yayandroid/parallaxrecyclerview/ParallaxViewHolder.java index 371fec9..6cd5a4c 100644 --- a/library/app/src/main/java/com/yayandroid/parallaxrecyclerview/ParallaxViewHolder.java +++ b/library/app/src/main/java/com/yayandroid/parallaxrecyclerview/ParallaxViewHolder.java @@ -31,7 +31,7 @@ public int[] requireValuesForTranslate() { int[] recyclerPosition = new int[2]; ((RecyclerView) itemView.getParent()).getLocationOnScreen(recyclerPosition); - return new int[]{itemView.getMeasuredHeight(), itemPosition[1], ((RecyclerView) itemView.getParent()).getMeasuredHeight(), recyclerPosition[1]}; + return new int[]{itemPosition[1], ((RecyclerView) itemView.getParent()).getMeasuredHeight(), recyclerPosition[1]}; } }