【问题标题】:Custom marker icon google map android自定义标记图标谷歌地图android
【发布时间】:2018-01-13 18:29:33
【问题描述】:

我们可以自定义标记图标谷歌地图吗? 我不想只是简单地更改图标位图(我知道怎么做) 我想改变图标的​​方式,就像我有一个 xml 布局(有一个 imageview 和一个 textview),我想膨胀这个 xml(比如自定义信息窗口)。但我想让它成为标记图标,所以我可以通过编码设置图像和文本 请注意,我不想要一个信息窗口,我希望它是一个标记

【问题讨论】:

    标签: java android


    【解决方案1】:

    您可以创建 layour 并将该布局转换为 Drawable,然后您可以将该 drawable 添加到标记的图标中。

    您可以像这样创建布局,

    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
                  android:layout_width="match_parent"
                  android:layout_height="wrap_content"
                  android:orientation="vertical">
    
        <ImageView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:src="@drawable/ic_action_name"
        "/>
    
        <TextView
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_marginLeft="20dp"
            android:layout_marginRight="20dp"
            android:layout_marginTop="2dp"
            android:text="Name"
            android:textSize="16sp"/>
    
    </LinearLayout>
    

    以下方法将为您提供布局中的位图,

    private Bitmap getBitmapFromLayout(int layout) {
    
        LayoutInflater layoutInflater = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        View view = layoutInflater.inflate(layout, null);
    
        view.measure(MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED), 
            MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED));
        view.layout(0, 0, v.getMeasuredWidth(), v.getMeasuredHeight());
    
        view.buildDrawingCache();
    
        Bitmap bitmap = Bitmap.createBitmap(view.getMeasuredWidth(), view.getMeasuredHeight(),
                Bitmap.Config.ARGB_8888);
    
        Canvas canvas = new Canvas(bitmap);
        canvas.drawColor(Color.WHITE, PorterDuff.Mode.SRC_IN);
    
        Drawable drawable = view.getBackground();
        if (drawable != null)
            drawable.draw(canvas);
    
        view.draw(canvas);
    
        return bitmap;
    }
    

    您可以像这样在地图标记图标中添加位图,

    mMap.addMarker(new MarkerOptions().icon(BitmapDescriptorFactory.fromBitmap(getBitMapFromLayout([your layout id]))));
    

    【讨论】:

    • 如果我这样做,我无法以编程方式设置文本和图像
    • 是的,您可以在布局中设置任何视图,不仅是文本或图像。
    • 添加您的崩溃日志。
    • 我在创建位图时崩溃的宽度和高度必须 > 0。尝试膨胀布局时发生错误
    • 我添加了 view.measure(MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED), MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED)); view.layout(0, 0, v.getMeasuredWidth(), v.getMeasuredHeight());这段代码。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-02
    • 2015-06-06
    • 2013-08-21
    • 2016-01-16
    相关资源
    最近更新 更多