gpt4 book ai didi

android - 具有自定义背景和文本的 Google map 标记

转载 作者:太空狗 更新时间:2023-10-29 14:48:30 26 4
gpt4 key购买 nike

我正在尝试自定义 map 标记,以便它可以显示 3 个主要功能:

  • 9patch drawable 作为背景
  • 自定义文本
  • 文本左侧的可选绘图(有些标记有,有些没有)

我使用了 android google map utils library 中的 IconGenerator,但不知何故标记的整个可点击区域都受到了影响。标记周围的一个非常大的区域是可点击的并激活标记。它还存在内容填充和重力属性方面的问题。

我在 map 上添加了自定义 hack,以便在不打开信息窗口的情况下将标记置于最前面(我设置了一个没有内容可显示的信息窗口,并且我在标记点击事件监听器中调用了 showInfoWindow) .

我如何手动为标记创建图标并避免它周围的大可点击区域的问题?

我也尝试了描述的实现 here ,基本上是 drawTextToBitmap() 方法:

private Bitmap drawTextToBitmap(@DrawableRes int backgroundRes, String text) {
Resources resources = getResources();
float scale = resources.getDisplayMetrics().density;
Bitmap bitmap = BitmapFactory.decodeResource(resources, backgroundRes);
android.graphics.Bitmap.Config bitmapConfig = bitmap.getConfig();

if (bitmapConfig == null) {
bitmapConfig = android.graphics.Bitmap.Config.ARGB_8888;
}
bitmap = bitmap.copy(bitmapConfig, true);
Canvas canvas = new Canvas(bitmap);

Paint paint = new Paint(Paint.ANTI_ALIAS_FLAG);
// SET FONT COLOR (e.g. WHITE -> rgb(255,255,255))
paint.setColor(Color.rgb(255, 255, 255));
// SET FONT SIZE (e.g. 15)
paint.setTextSize((int) (15 * scale));
// SET SHADOW WIDTH, POSITION AND COLOR (e.g. BLACK)
paint.setShadowLayer(1f, 0f, 1f, Color.BLACK);

Rect bounds = new Rect();
paint.getTextBounds(text, 0, text.length(), bounds);
int x = (bitmap.getWidth() - bounds.width()) / 2;
int y = (bitmap.getHeight() + bounds.height()) / 2;
canvas.drawText(text, x, y, paint);

return bitmap;
}

但它并没有像预期的那样工作,因为我的文字比背景大,而且我也不知道如何在文字的左侧添加资源。

这是我正在使用的 IconGenerator 的实现:

private BitmapDescriptor getBitmapDescriptorForProduct(@NonNull final MyCustomObject product, boolean isActive) {
if (product.shouldDisplayWithLabel) {
// We use an custom layout for displaying markers on the map
@SuppressLint("InflateParams") View view =
LayoutInflater.from(getActivity()).inflate(R.layout.my_custom_label, null);

// Get the text view which will display the text
TextView label = (TextView) view.findViewById(R.id.text);
// Set the left drawable if needed
label.setCompoundDrawablesWithIntrinsicBounds(product.shouldDisplayWithDrawable ? R.drawable.my_custom_drawable : 0, 0,
0, 0);
// Set the text for the label
label.setText(product.label);
label.setBackgroundResource(R.drawable.my_custom_background);

// Set the layout for the icon
mIconGenerator.setContentView(view); // set the custom layout

// We don't want the default background
mIconGenerator.setBackground(null);
// Disable the content padding as we handle it in the view and in the 9patch resources
mIconGenerator.setContentPadding(0, 0, 0, 0);

// Make the icon and create the BitmapDescriptor necessary for the marker creation
Bitmap icon = mIconGenerator.makeIcon();
return BitmapDescriptorFactory.fromBitmap(icon);
} else {
// Lazy initialization for the normal markers
if (null == simpleMarkerIcon) {
simpleMarkerIcon = BitmapDescriptorFactory.fromResource(R.drawable.my_simple_marker);
}

// Reuse the bitmap for the simple markers that will be displayed on the map.
return simpleMarkerIcon;
}
}

语言:@Harpreet,这是使用您的解决方案时标记图标的样子:

Marker icon using @Harpreet solution

如您所见, View 的属性未在位图中正确显示。

最佳答案

public static Bitmap createDrawableFromView(Context context, View view) {
DisplayMetrics displayMetrics = new DisplayMetrics();
((Activity) context).getWindowManager().getDefaultDisplay()
.getMetrics(displayMetrics);
view.setLayoutParams(new LayoutParams(LayoutParams.WRAP_CONTENT,
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;
}

注意:- 只需填充 Context 并将您完整的自定义创建的 View /布局添加为 View

的对象

它会帮助你。

关于android - 具有自定义背景和文本的 Google map 标记,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37394857/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com