Как нарисовать фигуру динамически на карте коснулся местоположения в Android

Я хочу нарисовать фигуру, где бы пользователь ни касался карты, он должен быть нарисован динамически. Я понятия не имею о рисовании этих фигур. Как я мог этого добиться? Могу ли я сделать это через холст? Я использую MapFragment.

Пожалуйста, смотрите изображение,

Пожалуйста, дайте мне любую идею! Любая помощь приветствуется!

3 ответа

Решение

Вы можете сделать это, добавив View наложение карты.

  • иметь Polyline объект (изначально пустой), который будет вашей линией
  • обработать onTouchEvent на этом View
  • перевести x,y из событий в LatLng с помощью Projection
  • добавить новую точку в Polyline

И вы сделали.

Обратите внимание, что это потребляет все события, которые в противном случае сделали бы карту панорамированием или масштабированием. У вас должен быть какой-то другой способ взаимодействия с картой или включения потребления событий с использованием какого-либо флага.

  1. Добавьте ImageView поверх карты. Вы не можете рисовать на карте.
  2. ImageView должен реализовывать "OnTouchListener"
  3. Добавьте любую кнопку на карту, чтобы вывести ImageView на передний план, и карта будет видна на фоне. 4. при касании ImageView выполните следующие действия

    public boolean onTouch(View v, MotionEvent event) {
    int action = event.getAction();
    Point p = new Point();
    path = new Path();
    float upX;
    float upY;
    
    switch (action) {
    case MotionEvent.ACTION_DOWN:
        laArray = "";
        lnArray = "";
        canvas.drawColor(Color.TRANSPARENT, PorterDuff.Mode.CLEAR);
        downx = event.getX();
        downy = event.getY();
        eventX = downx;
        eventY = downy;
        Log.d("", "startx" + eventX);
        p.x = (int) downx;
        p.y = (int) downy;
        LatLng latlngpoint;
        latlngpoint = map.getProjection().fromScreenLocation(p);
        break;
    case MotionEvent.ACTION_MOVE:
        upx = event.getX();
        upy = event.getY();
        canvas.drawLine(downx, downy, upx, upy, paint);
        drawable.invalidate();
        downx = upx;
        downy = upy;
        Log.d("", "Action_Move");
        Log.d("", "downx, downy: " + downx + "," + downy);
        Log.d("", "upx, upy: " + upx + "," + upy);
        p.x = (int) upx;
        p.y = (int) upy;
        LatLng latlngpoint1;
        latlngpoint1 = map.getProjection().fromScreenLocation(p);           
        break;
    case MotionEvent.ACTION_UP:
        upX = event.getX();
        upY = event.getY();
        p.x = (int) upX;
        p.y = (int) upY;
        Log.d("", "Action Up");
        canvas.drawLine(eventX, eventY, upX, upY, paint);
        LatLng latlngpoint2;
        latlngpoint2 = map.getProjection().fromScreenLocation(p);           
        drawable.invalidate();
    
        // When finger is Up, Start UserSearch.
    
        StartUserSearch(); //user defined function
        return true;
    case MotionEvent.ACTION_CANCEL:
        break;
    default:
        break;
    }
    
    return true;
    

    }

Добавить ImageView, как это,

   <ImageView
    android:id="@+id/viewOnMap"
    style="@style/AppTheme"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent" 
    >

  </ImageView> 

так, когда кнопка рисования на карте нажата,

 ImageView drawable= (ImageView) findViewById(R.id.viewOnMap);
 drawable.setVisibility(View.VISIBLE);
 drawable.bringToFront();

Теперь вы должны иметь возможность рисовать на imageView, но кажется, что вы рисуете на карте.

Вы можете изменить код в соответствии с вашими требованиями. Надеюсь, это будет полезно.

Ответ: ты не можешь.

Как вы можете видеть, этот жест будет использован картой для действия панорамирования / прокрутки.

Но тут есть хитрость.

  • Вы можете поместить маркер на действие пользователя (длительное нажатие на карте)
  • Установите перетаскиваемый маркер и установите прослушиватель перетаскивания
  • Предложите пользователю перетащить маркер
  • Слушатель перетаскивания будет использовать перетаскиваемые точки, когда пользователь перетаскивает маркер.
  • на концах Drag создайте путь с помощью Lat-Long и нарисуйте путь
  • Уберите маркер.
Другие вопросы по тегам