如何在谷歌地图上制作标记?

Xco*_*OOB 3 android google-maps marker objectanimator

我想要实现的应该是非常简单的,但它不起作用.我在我的地图上添加了一个标记,我正试图为它制作一个心跳动画.

我试过以下代码,但没有运气,

   ObjectAnimator pulse = ObjectAnimator.ofPropertyValuesHolder(userLocation,
            PropertyValuesHolder.ofFloat("scaleX",2f),
            PropertyValuesHolder.ofFloat("scaleY",2f)
            );
    pulse.setDuration(310);
    pulse.setRepeatCount(ObjectAnimator.INFINITE);
    pulse.setRepeatMode(ObjectAnimator.REVERSE);
    pulse.start();
Run Code Online (Sandbox Code Playgroud)

任何建议都会很感激,加上使用外部库也可以是一个选项,我刚刚找不到.

And*_*nko 8

一般的方法很好地描述了Cabezas的答案.除了他的答案,对于你的任务你应该应用它来设置(根据Interpolator每个动画帧调整大小)位图的标记.例如,您可以使用以下方法执行此操作:

private void pulseMarker(final Bitmap markerIcon, final Marker marker, final long onePulseDuration) {
    final Handler handler = new Handler();
    final long startTime = System.currentTimeMillis();

    final Interpolator interpolator = new CycleInterpolator(1f);
    handler.post(new Runnable() {
        @Override
        public void run() {
            long elapsed = System.currentTimeMillis() - startTime;
            float t = interpolator.getInterpolation((float) elapsed / onePulseDuration);
            marker.setIcon(BitmapDescriptorFactory.fromBitmap(scaleBitmap(markerIcon, 1f + 0.05f * t)));
            handler.postDelayed(this, 16);
        }
    });
}
Run Code Online (Sandbox Code Playgroud)

其中16是一帧动画的持续时间,1f + 0.05f * t- 标记图标的大小增加和减少5%,并且scaleBitmap()是:

public Bitmap scaleBitmap(Bitmap bitmap, float scaleFactor) {
    final int sizeX = Math.round(bitmap.getWidth() * scaleFactor);
    final int sizeY = Math.round(bitmap.getHeight() * scaleFactor);
    Bitmap bitmapResized = Bitmap.createScaledBitmap(bitmap, sizeX, sizeY, false);
    return bitmapResized;
}
Run Code Online (Sandbox Code Playgroud)

和电话是:

Bitmap markerIcon = BitmapFactory.decodeResource(getResources(), R.drawable.ic_heart);
pulseMarker(markerIcon, marker, 1000);
Run Code Online (Sandbox Code Playgroud)

marker你的标记在哪里,1000- 一个脉冲持续1秒.