android - 自定义布局作为 map 标记

标签 android

我正在尝试将自定义布局添加为标记,我正在关注 this ,但我得到的输出是红色补丁,这是父布局的背景!

如果我不放置背景,标记甚至不会出现。 这是我到目前为止所做的尝试,请帮忙。

location_marker.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

最佳答案

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;
}

像这样在谷歌地图中添加

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

标记 mar = mMap.addMarker(marker);

关于android - 自定义布局作为 map 标记,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52218882/

相关文章:

android - 在 Android 上过滤目录中的文件

android - 未调用 AppWidgetProvider 的 onEnabled 和 onDisabled 的解决方法

java - WebRTC,捕获屏幕

android - 如何制作启动画面并在后台运行 ListView 进程?

android - 插入耳机时不要通过扬声器播放通知声音

android - 适用于 Android/iOS 的 WMS View /库

android - 分配后在 `ViewDataBinding` 单元测试中获取 Activity `Robolectric` 字段

安卓加载消息

android - setBackgroundResource 的行为不同于 setBackground with RippleDrawable

Android Gradle 找不到符号类 Gson