Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/mapsme/omim.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAleksandr Zatsepin <alexzatsepin@users.noreply.github.com>2016-12-14 15:54:33 +0300
committerGitHub <noreply@github.com>2016-12-14 15:54:33 +0300
commit48fe74d0d70a7e496a74f5d30d8c878019cea5d4 (patch)
tree9c01f7ed904ea4dee228d3fbf4678446dad903bd /android
parent2aa2db501edd2513fbde6a833df3a14dd0c15b6e (diff)
parent7fa78d8397901f0e207846893bc74a6fb56efef1 (diff)
Merge pull request #4970 from goblinr/MAPSME-92-ext-pp-banner-fix
[android] Place Page banner icon animations.
Diffstat (limited to 'android')
-rw-r--r--android/src/com/mapswithme/maps/widget/placepage/BannerController.java92
1 files changed, 79 insertions, 13 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..a7b3298bcf 100644
--- a/android/src/com/mapswithme/maps/widget/placepage/BannerController.java
+++ b/android/src/com/mapswithme/maps/widget/placepage/BannerController.java
@@ -1,5 +1,7 @@
package com.mapswithme.maps.widget.placepage;
+import android.animation.Animator;
+import android.animation.ValueAnimator;
import android.content.res.Resources;
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
@@ -13,6 +15,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 +26,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 +56,9 @@ final class BannerController implements View.OnClickListener
private boolean mIsOpened = false;
+ @Nullable
+ private ValueAnimator mIconAnimator;
+
BannerController(@NonNull View bannerView, @Nullable OnBannerClickListener listener)
{
mFrame = bannerView;
@@ -105,9 +114,15 @@ final class BannerController implements View.OnClickListener
mIsOpened = true;
setFrameHeight(WRAP_CONTENT);
- setIconParams(mOpenIconSize, 0, mMarginBase);
+ setIconParams(mOpenIconSize, 0, mMarginBase, new Runnable()
+ {
+ @Override
+ public void run()
+ {
+ loadIcon(mBanner);
+ }
+ });
UiUtils.show(mMessage, mAdMarker);
- loadIcon(mBanner);
if (mTitle != null)
mTitle.setMaxLines(2);
mFrame.setOnClickListener(this);
@@ -120,9 +135,15 @@ final class BannerController implements View.OnClickListener
mIsOpened = false;
setFrameHeight((int) mCloseFrameHeight);
- setIconParams(mCloseIconSize, mMarginBase, mMarginHalfPlus);
+ setIconParams(mCloseIconSize, mMarginBase, mMarginHalfPlus, new Runnable()
+ {
+ @Override
+ public void run()
+ {
+ loadIcon(mBanner);
+ }
+ });
UiUtils.hide(mMessage, mAdMarker);
- loadIcon(mBanner);
if (mTitle != null)
mTitle.setMaxLines(1);
mFrame.setOnClickListener(null);
@@ -135,24 +156,69 @@ 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,
+ final @Nullable Runnable listener)
{
- if (mIcon == null)
+ if (mIcon == null || UiUtils.isHidden(mIcon))
+ {
+ if (listener != null)
+ listener.run();
+ return;
+ }
+
+ 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)
+ {
+ if (listener != null)
+ listener.run();
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);
+ 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.addListener(new UiUtils.SimpleAnimatorListener()
+ {
+ @Override
+ public void onAnimationEnd(Animator animation)
+ {
+ if (listener != null)
+ listener.run();
+ }
+ });
+ mIconAnimator.setDuration(DURATION_DEFAULT);
+ mIconAnimator.start();
}
private void loadIcon(@NonNull Banner banner)
{
- if (mIcon == null || TextUtils.isEmpty(banner.getIconUrl()))
+ if (mIcon == null)
return;
+ if (TextUtils.isEmpty(banner.getIconUrl()))
+ {
+ UiUtils.hide(mIcon);
+ return;
+ }
+
Glide.with(mIcon.getContext())
.load(banner.getIconUrl())
.centerCrop()