#android #button #map #marker
#Android #кнопка #словарь #маркер
Вопрос:
в моем приложении я хочу показать карту с указателем, а над указателем я хочу показать текстовое представление с кнопкой. Используя эту кнопку, я хочу перейти к следующему действию. Ниже приведен мой код для отображения точки, но как показать точку с текстом и кнопкой справа от нее. И как написать для нее действие btn
class MapOverlay extends com.google.android.maps.Overlay
{
public boolean draw(Canvas canvas, MapView mapView,boolean shadow, long when)
{
super.draw(canvas, mapView, shadow);
//---translate the GeoPoint to screen pixels---
Point screenPts = new Point();
mapView.getProjection().toPixels(p, screenPts);
Bitmap bmp = BitmapFactory.decodeResource(getResources(), R.drawable.marker);
canvas.drawBitmap(bmp, screenPts.x, screenPts.y-100, null);
mapView.getProjection().toPixels(q, screenPts);
@SuppressWarnings("unused")
Bitmap bmp1 = BitmapFactory.decodeResource(getResources(), R.drawable.blue);
canvas.drawBitmap(bmp, screenPts.x, screenPts.y-100, null);
return true;
}
}
p = new GeoPoint((int) (latPt * 1E6),(int) (lngPt * 1E6));
Log.e("point p ","" p);
mapController.animateTo(p);
mapController.setZoom(16);
mapView.invalidate();
mapView.setTraffic(true);
mapController = mapView.getController();
MapOverlay mapOverlay = new MapOverlay();
List<Overlay> listOfOverlays = mapView.getOverlays();
listOfOverlays.clear();
listOfOverlays.add(mapOverlay);
Ответ №1:
Я сделал это, используя виды вместо наложений, так что вы добавляете новый вид для каждого элемента на вашей карте с помощью addItem. Вот этот код:
Вид аннотации
public AnnotationView(final Context context,final Object object) {
super(context);
setOrientation(VERTICAL);
LayoutInflater inflater = (LayoutInflater) context
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
inflater.inflate(R.layout.map_overlay, this, true);
// Set the textview
lBubble = (LinearLayout) findViewById(R.id.lAnnotation);
txtPlace = ((TextView) (findViewById(R.id.txtPlace)));
txtPlace.setText(object.getName());
// set button touch listener
((ImageButton) (findViewById(R.id.btnPlace)))
.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
//Do anything
};
});
// add your overlay on mapview by geopoint
btnMarker = ((ImageButton) (findViewById(R.id.btnMarker)));
btnMarker.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
//Do anything };
});
setLayoutParams(new MapView.LayoutParams(
MapView.LayoutParams.WRAP_CONTENT,
MapView.LayoutParams.WRAP_CONTENT, new GeoPoint(
(int) (object.getLatitude() * 1E6),
(int) (object.getLongitude() * 1E6)),
MapView.LayoutParams.BOTTOM_CENTER));
}
Затем я просто создал ее и добавил на карту, как:
overlay = new AnnotationView(this, object);
mapView.addView(overlay);
Макет map_overlay — это просто линейное отображение, которое вы хотите отобразить поверх карты в виде наложения (изображения, кнопки …)
У меня проблема только с масштабированием, потому что точка немного меняется при масштабировании, я пытаюсь ее решить.
Надеюсь, это поможет
Приветствия