From 23c5e10e4794023ce38a5f7d1c00be00f2145201 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=92=D0=B8=D1=82=D0=B0=D0=BB=D0=B8=D0=B9?= Date: Mon, 21 May 2018 16:49:56 +0300 Subject: [PATCH 1/2] fix bug with incorrect shimmering size after requestLayout called --- .../main/java/io/supercharge/shimmerlayout/ShimmerLayout.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/shimmerlayout/src/main/java/io/supercharge/shimmerlayout/ShimmerLayout.java b/shimmerlayout/src/main/java/io/supercharge/shimmerlayout/ShimmerLayout.java index 5dd6b63..502ab8a 100644 --- a/shimmerlayout/src/main/java/io/supercharge/shimmerlayout/ShimmerLayout.java +++ b/shimmerlayout/src/main/java/io/supercharge/shimmerlayout/ShimmerLayout.java @@ -124,7 +124,7 @@ public void startShimmerAnimation() { return; } - if (getWidth() == 0) { + if (getWidth() == 0 || isLayoutRequested()) { startAnimationPreDrawListener = new ViewTreeObserver.OnPreDrawListener() { @Override public boolean onPreDraw() { From ab7134629239ad8a5bf2bafe0d802a4d681ac641 Mon Sep 17 00:00:00 2001 From: VitalyNikonorov Date: Mon, 20 Aug 2018 22:34:50 +0300 Subject: [PATCH 2/2] added updating shimmer animator while animation works --- .../shimmerlayout/ShimmerLayout.java | 41 ++++++++++++++++++- 1 file changed, 39 insertions(+), 2 deletions(-) diff --git a/shimmerlayout/src/main/java/io/supercharge/shimmerlayout/ShimmerLayout.java b/shimmerlayout/src/main/java/io/supercharge/shimmerlayout/ShimmerLayout.java index 502ab8a..e68a811 100644 --- a/shimmerlayout/src/main/java/io/supercharge/shimmerlayout/ShimmerLayout.java +++ b/shimmerlayout/src/main/java/io/supercharge/shimmerlayout/ShimmerLayout.java @@ -92,6 +92,14 @@ public ShimmerLayout(Context context, AttributeSet attrs, int defStyle) { } } + @Override + protected void onLayout(boolean changed, int left, int top, int right, int bottom) { + super.onLayout(changed, left, top, right, bottom); + if (changed) { + updateShimmerAnimation(); + } + } + @Override protected void onDetachedFromWindow() { resetShimmering(); @@ -140,7 +148,35 @@ public boolean onPreDraw() { return; } - Animator animator = getShimmerAnimation(); + Animator animator = getShimmerAnimation(0); + animator.start(); + isAnimationStarted = true; + } + + private void updateShimmerAnimation() { + if (!isAnimationStarted) { + return; + } + long currentPlayTime = maskAnimator.getCurrentPlayTime(); + + if (getWidth() == 0 || isLayoutRequested()) { + startAnimationPreDrawListener = new ViewTreeObserver.OnPreDrawListener() { + @Override + public boolean onPreDraw() { + getViewTreeObserver().removeOnPreDrawListener(this); + updateShimmerAnimation(); + return true; + } + }; + + getViewTreeObserver().addOnPreDrawListener(startAnimationPreDrawListener); + + return; + } + if (maskAnimator != null) { + resetShimmering(); + } + Animator animator = getShimmerAnimation(currentPlayTime); animator.start(); isAnimationStarted = true; } @@ -321,7 +357,7 @@ private void createShimmerPaint() { gradientTexturePaint.setShader(composeShader); } - private Animator getShimmerAnimation() { + private Animator getShimmerAnimation(long currentPlayTime) { if (maskAnimator != null) { return maskAnimator; } @@ -346,6 +382,7 @@ private Animator getShimmerAnimation() { : ValueAnimator.ofInt(0, shimmerAnimationFullLength); maskAnimator.setDuration(shimmerAnimationDuration); maskAnimator.setRepeatCount(ObjectAnimator.INFINITE); + maskAnimator.setCurrentPlayTime(currentPlayTime); maskAnimator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() { @Override