代码之家  ›  专栏  ›  技术社区  ›  xbadal

自定义布局作为地图标记

  •  1
  • xbadal  · 技术社区  · 7 年前

    我试图添加自定义布局作为标记,我如下 this ,但我得到的输出是红色补丁,这是父布局的背景!

    这是我到目前为止试过的,请帮忙。

    位置_标记.xml

    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/locationMarker"
    android:layout_width="wrap_content"
    android:background="@color/red"
    android:layout_height="wrap_content"
    android:layout_gravity="center"
    android:layout_marginBottom="30dp"
    android:gravity="center"
    android:orientation="vertical">
    
    <pgapp.com.rodionsolutions.pg.pgadmin.widgets.RegularTextView
        android:id="@+id/locationMarkertext"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:background="@drawable/round_edittext"
        android:gravity="center"
        android:minWidth="100dp"
        android:paddingLeft="2dp"
        android:paddingRight="2dp"
        android:textColor="@color/text_color"
        android:text="Area Name" />
    
    <ImageView
        android:id="@+id/imageMarker"
        android:layout_width="40dp"
        android:layout_height="40dp"
        android:src="@drawable/arrow_point_to_down"/>
    

    然后是Java

    mMap.addMarker(new MarkerOptions()
                                .position(latLng)
                                .title(pgDTOList.get(i).getPgName())
                                .snippet(pgDTOList.get(i).getAddress())
                                .icon(BitmapDescriptorFactory.fromBitmap(createDrawableFromView(this, marker))));
                        mMap.moveCamera(CameraUpdateFactory.newLatLngZoom(latLng, 20.0f));
    

    这是将布局创建为位图的方法

    public static Bitmap createDrawableFromView(Context context, View view) {
        DisplayMetrics displayMetrics = new DisplayMetrics();
        ((Activity) context).getWindowManager().getDefaultDisplay().getMetrics(displayMetrics);
        view.setLayoutParams(new LinearLayout.LayoutParams(LinearLayout.LayoutParams.WRAP_CONTENT, LinearLayout.LayoutParams.WRAP_CONTENT));
        view.measure(displayMetrics.widthPixels, displayMetrics.heightPixels);
        view.layout(0, 0, displayMetrics.widthPixels, displayMetrics.heightPixels);
        view.buildDrawingCache();
        Bitmap bitmap = Bitmap.createBitmap(view.getMeasuredWidth(), view.getMeasuredHeight(), Bitmap.Config.ARGB_8888);
        Canvas canvas = new Canvas(bitmap);
        view.draw(canvas);
        return bitmap;
    }
    

    但是输出是

    This this the output

    1 回复  |  直到 7 年前
        1
  •  1
  •   Gautam Kumar    7 年前
    public static Bitmap createDrawableFromView(Context context, View view) {
        DisplayMetrics displayMetrics = new DisplayMetrics();
        ((Activity) context).getWindowManager().getDefaultDisplay().getMetrics(displayMetrics);
        view.setLayoutParams(new ViewGroup.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT));
        view.measure(displayMetrics.widthPixels, displayMetrics.heightPixels);
        view.layout(0, 0, displayMetrics.widthPixels, displayMetrics.heightPixels);
        view.buildDrawingCache();
        Bitmap bitmap = Bitmap.createBitmap(view.getMeasuredWidth(), view.getMeasuredHeight(), Bitmap.Config.ARGB_8888);
    
        Canvas canvas = new Canvas(bitmap);
        view.draw(canvas);
    
        return bitmap;
    }
    

    像这样添加google地图

    marker.icon(BitmapDescriptorFactory.fromBitmap(createDrawableFromView(getActivity(), markerView)));
    

    标记mar=mMap.添加标记(标记);