Android谷歌地图v2:动画标记大小



我试图动画标记的大小,因为它被添加到地图,基本上我想要标记增长。我看不出有任何方法可以进入标记的实际视图,所以我不认为我可以使用标准的Android动画技术(例如ObjectAnimator)。

我能看到做到这一点的唯一方法是实现我自己的动画,并使用setIcon方法来改变标记图标。

是否有其他更理想的方法来做到这一点?

我在Xamarin工作,但可以在必要时移植Java代码。

您可以尝试这样做

final Marker marker = map.addMarker(new MarkerOptions().position(new LatLng(0, 0)).title("Marker"));
final Bitmap bitmap = BitmapFactory.decodeResource(getResources(), R.drawable.ic_temperature_kelvin_black_48dp);
final Bitmap target = Bitmap.createBitmap(bitmap.getWidth(), bitmap.getHeight(), Bitmap.Config.ARGB_8888);
final Canvas canvas = new Canvas(target);
ValueAnimator animator = ValueAnimator.ofFloat(0, 1);
animator.setDuration(500);
animator.setStartDelay(1000);
final Rect originalRect = new Rect(0, 0, bitmap.getWidth(), bitmap.getHeight());
final RectF scaledRect = new RectF();
animator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
    @Override
    public void onAnimationUpdate(ValueAnimator animation) {
        float scale = (float) animation.getAnimatedValue();
        scaledRect.set(0, 0, originalRect.right * scale, originalRect.bottom * scale);
        canvas.drawBitmap(bitmap, originalRect, scaledRect, null);
        marker.setIcon(BitmapDescriptorFactory.fromBitmap(target));
    }
});
animator.start();

是的,你是对的,没有直接的方法去做。相反,你可以使用处理器,它将在每500ms之后被调用,并且你可以在其中设置标记。

请使用此链接作为参考;如何在android地图api V2动画标记?

对于矢量绘制

fun Drawable.getBitmapFromVectorDrawable(): Bitmap {
val bitmap = Bitmap.createBitmap(
    intrinsicWidth,
    intrinsicHeight, Bitmap.Config.ARGB_8888
)
val canvas = Canvas(bitmap)
setBounds(0, 0, canvas.width, canvas.height)
draw(canvas)
return bitmap

}

那么做

val marker = map.addMarker(MarkerOptions().position(LatLng(latitude, longitude)))
            val bitmap = requireContext().requireDrawable(R.drawable.marker)!!
                .getBitmapFromVectorDrawable()
            ValueAnimator.ofInt(1, bitmap.width).apply {
                duration = resources.getInteger(R.integer.itr_normal_anim_time).toLong()
                interpolator = OvershootInterpolator()
                addUpdateListener { animation ->
                    val scale = animation.animatedValue as Int
                    val scaledBitmap = bitmap.scale(scale, scale)
                    marker!!.setIcon(BitmapDescriptorFactory.fromBitmap(scaledBitmap))
                }
                start()
            }

最新更新