[android] #3276 - add show/hide animation to view markers

This commit is contained in:
Tobrun
2016-05-11 16:18:03 +02:00
parent db2c3e59e3
commit 833319ce91
3 changed files with 40 additions and 10 deletions

View File

@@ -32,6 +32,11 @@ public class MapboxConstants {
*/
public static final int ANIMATION_DURATION = 300;
/**
* Default short animation time
*/
public static final int ANIMATION_DURATION_SHORT = 150;
/**
* The currently supported minimum zoom level.
*/

View File

@@ -1,6 +1,8 @@
package com.mapbox.mapboxsdk.maps;
import android.Manifest;
import android.animation.Animator;
import android.animation.AnimatorListenerAdapter;
import android.annotation.SuppressLint;
import android.app.Activity;
import android.app.Dialog;
@@ -36,6 +38,7 @@ import android.support.v4.content.ContextCompat;
import android.support.v4.util.LongSparseArray;
import android.support.v4.view.GestureDetectorCompat;
import android.support.v4.view.ScaleGestureDetectorCompat;
import android.support.v4.view.animation.FastOutSlowInInterpolator;
import android.support.v7.app.AlertDialog;
import android.text.TextUtils;
import android.util.AttributeSet;
@@ -1444,8 +1447,16 @@ public class MapView extends FrameLayout {
mViewHolder.setX(point.x - (mViewHolder.getMeasuredWidth() / 2));
mViewHolder.setY(point.y - (mViewHolder.getMeasuredHeight() / 2));
if (mViewHolder.getVisibility() == View.GONE) {
mViewHolder.setVisibility(View.VISIBLE);
if (mViewHolder.getVisibility() == GONE) {
mViewHolder.animate().cancel();
mViewHolder.setAlpha(0);
mViewHolder.animate().alpha(1).setDuration(MapboxConstants.ANIMATION_DURATION_SHORT).setInterpolator(new FastOutSlowInInterpolator()).setListener(new AnimatorListenerAdapter() {
@Override
public void onAnimationStart(Animator animation) {
super.onAnimationStart(animation);
mViewHolder.setVisibility(VISIBLE);
}
}).start();
}
}
}

View File

@@ -4,7 +4,6 @@ import android.content.Context;
import android.animation.Animator;
import android.animation.AnimatorInflater;
import android.animation.AnimatorListenerAdapter;
import android.animation.ObjectAnimator;
import android.graphics.Bitmap;
import android.location.Location;
import android.os.SystemClock;
@@ -15,6 +14,7 @@ import android.support.annotation.Nullable;
import android.support.annotation.UiThread;
import android.support.v4.util.LongSparseArray;
import android.support.v4.util.Pools;
import android.support.v4.view.animation.FastOutSlowInInterpolator;
import android.text.TextUtils;
import android.util.Log;
import android.view.View;
@@ -22,7 +22,6 @@ import android.view.View;
import com.mapbox.mapboxsdk.MapboxAccountManager;
import android.view.ViewGroup;
import android.view.animation.Animation;
import com.mapbox.mapboxsdk.annotations.Annotation;
import com.mapbox.mapboxsdk.annotations.BaseMarkerOptions;
@@ -655,9 +654,7 @@ public class MapboxMap {
for (Map.Entry<Marker, View> outBoundsEntry : outBoundsMarker.entrySet()) {
convertView = outBoundsEntry.getValue();
if (convertView != null) {
convertView.setVisibility(View.GONE);
viewSimplePool.release(convertView);
mMarkerViews.remove(outBoundsEntry.getKey().getId());
removeMarkerView(outBoundsEntry.getKey().getId());
}
}
@@ -998,10 +995,27 @@ public class MapboxMap {
}
private void removeMarkerView(long id) {
View viewHolder = mMarkerViews.get(id);
final View viewHolder = mMarkerViews.get(id);
if (viewHolder != null) {
viewHolder.setVisibility(View.GONE);
viewSimplePool.release(viewHolder);
// cancel ongoing animations
viewHolder.animate().cancel();
viewHolder.setAlpha(1);
// animate alpha
viewHolder.animate()
.alpha(0)
.setDuration(MapboxConstants.ANIMATION_DURATION_SHORT)
.setInterpolator(new FastOutSlowInInterpolator())
.setListener(new AnimatorListenerAdapter() {
@Override
public void onAnimationEnd(Animator animation) {
super.onAnimationEnd(animation);
viewHolder.setVisibility(View.GONE);
viewSimplePool.release(viewHolder);
}
});
}
mMarkerViews.remove(id);
}