diff options
author | Roman Romanov <rromanov@65gb.net> | 2016-12-13 08:07:25 +0300 |
---|---|---|
committer | Roman Romanov <rromanov@65gb.net> | 2016-12-13 08:07:25 +0300 |
commit | 2d3229d6ed4f46dc3e04d609426461484d2e911d (patch) | |
tree | 2c07187dd6726c6e6d83f629e8d17c4a9e8be036 /android | |
parent | 657bd88190f8b5bc21ef06d8336f926c9abb23d0 (diff) |
[android] PP banner icon animations.
Diffstat (limited to 'android')
-rw-r--r-- | android/src/com/mapswithme/maps/widget/placepage/BannerController.java | 45 |
1 files changed, 37 insertions, 8 deletions
diff --git a/android/src/com/mapswithme/maps/widget/placepage/BannerController.java b/android/src/com/mapswithme/maps/widget/placepage/BannerController.java index c969ed004d..dc8a020ba2 100644 --- a/android/src/com/mapswithme/maps/widget/placepage/BannerController.java +++ b/android/src/com/mapswithme/maps/widget/placepage/BannerController.java @@ -1,5 +1,6 @@ package com.mapswithme.maps.widget.placepage; +import android.animation.ValueAnimator; import android.content.res.Resources; import android.support.annotation.NonNull; import android.support.annotation.Nullable; @@ -13,6 +14,7 @@ import com.bumptech.glide.Glide; import com.bumptech.glide.load.resource.drawable.GlideDrawable; import com.bumptech.glide.request.RequestListener; import com.bumptech.glide.request.target.Target; +import com.mapswithme.maps.MwmApplication; import com.mapswithme.maps.R; import com.mapswithme.maps.bookmarks.data.Banner; import com.mapswithme.util.ConnectionState; @@ -23,6 +25,9 @@ import static com.mapswithme.util.SharedPropertiesUtils.isShowcaseSwitchedOnLoca final class BannerController implements View.OnClickListener { + private static final int DURATION_DEFAULT = + MwmApplication.get().getResources().getInteger(R.integer.anim_default); + @Nullable private Banner mBanner; @Nullable @@ -50,6 +55,9 @@ final class BannerController implements View.OnClickListener private boolean mIsOpened = false; + @Nullable + private ValueAnimator mIconAnimator; + BannerController(@NonNull View bannerView, @Nullable OnBannerClickListener listener) { mFrame = bannerView; @@ -135,17 +143,38 @@ final class BannerController implements View.OnClickListener mFrame.setLayoutParams(lp); } - private void setIconParams(float size, float marginRight, float marginTop) + private void setIconParams(final float size, final float marginRight, final float marginTop) { - if (mIcon == null) + if (mIcon == null || UiUtils.isHidden(mIcon)) return; - ViewGroup.MarginLayoutParams lp = (ViewGroup.MarginLayoutParams) mIcon.getLayoutParams(); - lp.height = (int) size; - lp.width = (int) size; - lp.rightMargin = (int) marginRight; - lp.topMargin = (int) marginTop; - mIcon.setLayoutParams(lp); + if (mIconAnimator != null) + mIconAnimator.cancel(); + + final ViewGroup.MarginLayoutParams lp = (ViewGroup.MarginLayoutParams) mIcon.getLayoutParams(); + final float startSize = lp.height; + final float startRight = lp.rightMargin; + final float startTop = lp.topMargin; + mIconAnimator = ValueAnimator.ofFloat(0.0f, 1.0f); + if (mIconAnimator == null) + return; + + mIconAnimator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() + { + @Override + public void onAnimationUpdate(ValueAnimator animation) + { + float t = (float) animation.getAnimatedValue(); + int newSize = (int) (startSize + t * (size - startSize)); + lp.height = newSize; + lp.width = newSize; + lp.rightMargin = (int) (startRight + t * (marginRight - startRight)); + lp.topMargin = (int) (startTop + t * (marginTop - startTop)); + mIcon.setLayoutParams(lp); + } + }); + mIconAnimator.setDuration(DURATION_DEFAULT); + mIconAnimator.start(); } private void loadIcon(@NonNull Banner banner) |