Я хочу анимировать маркер на своих картах Google, например, анимацию роста, когда маркер установлен на видимый, и анимацию сжатия, когда видимость маркера пропала. - PullRequest
0 голосов
/ 22 мая 2018

Мне нужна эта анимация, такая как приложение uber, когда вы выбираете тип транспортного средства, выбранные автомобили появляются на карте с растущей анимацией и исчезают, как уменьшающаяся анимация.Я много искал анимацию, но не смог найти никакого связанного ответа. Пожалуйста, объясните мне, как это сделать.Заранее спасибо.

Вот код для добавления маркера

private void addDriver(JSONArray jsonArray)
{
    for (int i = 0; i < jsonArray.length(); i++)
    {
        if (!(markersList.containsKey(jsonArray.optJSONObject(i).optString("user_id"))))
        {

            //   Log.e("ADDDD","MARKERRRR");

            final Marker marker = mGoogleMap.addMarker(new MarkerOptions().position(new LatLng(Double.parseDouble(jsonArray.optJSONObject(i).optString("user_lat")),Double.parseDouble(jsonArray.optJSONObject(i).optString("user_long"))))
                    .snippet(jsonArray.optJSONObject(i).optString("user_id")));
            marker.setTag(jsonArray.optJSONObject(i).optString("vehicle_type"));
          /*  Bitmap markerIcon = BitmapFactory.decodeResource(getResources(), R.drawable.icon);
            pulseMarker(markerIcon, marker, 3000);*/
            markersList.put(jsonArray.optJSONObject(i).optString("user_id"),marker);

            /*final Marker marker = mGoogleMap.addMarker(new MarkerOptions().position(new LatLng(Double.parseDouble(jsonArray.optJSONObject(i).optString("user_lat")),Double.parseDouble(jsonArray.optJSONObject(i).optString("user_long")))).title("Marker"));
            final Bitmap bitmap = BitmapFactory.decodeResource(getResources(), R.drawable.icon);
            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(2000);
            animator.setStartDelay(4000);
            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();*/


        }
    }
}

с помощью этого кода, я добавляю маркер. Теперь я хочу, чтобы мой маркер появлялся на карте с анимацией вместо прямого всплывающего окнана картах.

1 Ответ

0 голосов
/ 22 мая 2018
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();

Попробуйте этот код для анимации роста.Если это работает, попробуйте сделать это внутри функции и вызвать ее из обработчика

...