Карта Android с текстовым представлением над точкой и кнопкой

#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 — это просто линейное отображение, которое вы хотите отобразить поверх карты в виде наложения (изображения, кнопки …)

У меня проблема только с масштабированием, потому что точка немного меняется при масштабировании, я пытаюсь ее решить.

Надеюсь, это поможет

Приветствия