Как нарисовать фигуру динамически на карте коснулся местоположения в Android
Я хочу нарисовать фигуру, где бы пользователь ни касался карты, он должен быть нарисован динамически. Я понятия не имею о рисовании этих фигур. Как я мог этого добиться? Могу ли я сделать это через холст? Я использую MapFragment.
Пожалуйста, смотрите изображение,
Пожалуйста, дайте мне любую идею! Любая помощь приветствуется!
3 ответа
Вы можете сделать это, добавив View
наложение карты.
- иметь
Polyline
объект (изначально пустой), который будет вашей линией - обработать onTouchEvent на этом
View
- перевести x,y из событий в
LatLng
с помощьюProjection
- добавить новую точку в
Polyline
И вы сделали.
Обратите внимание, что это потребляет все события, которые в противном случае сделали бы карту панорамированием или масштабированием. У вас должен быть какой-то другой способ взаимодействия с картой или включения потребления событий с использованием какого-либо флага.
- Добавьте ImageView поверх карты. Вы не можете рисовать на карте.
- ImageView должен реализовывать "OnTouchListener"
Добавьте любую кнопку на карту, чтобы вывести 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 и нарисуйте путь
- Уберите маркер.