使用android xml在运行时创建自定义标记图标

时间:2014-06-05 10:59:06

标签: android google-maps-markers google-maps-android-api-2

我正在开发一个Android应用程序,我需要从其URL下载图像,从中创建一个位图,然后将其作为图标显示在地图上。到目前为止,我已成功完成在地图上动态显示位图,但我需要将我的图像放在某些背景上。这里显示的内容How to create a custom-shaped bitmap marker with Android map API v2? 任何例子或建议都会有所帮助。 感谢...:)

2 个答案:

答案 0 :(得分:2)

我得到了上述问题的答案 我从视图中创建了一个位图,然后将其放在标记上。我的xml在

之下
    <?xml version="1.0" encoding="utf-8"?>
    <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content" >
    <ImageView
    android:id="@+id/img_id"
    android:layout_width="@dimen/custom_profile_image"
    android:layout_height="@dimen/custom_profile_image"
    android:contentDescription="@string/content"
    android:scaleType="centerCrop" />
    </RelativeLayout>

在xml上面膨胀

    View viewMarker = ((LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE))
                .inflate(R.layout.custom_marker_layout, null);
    ImageView myImage = (ImageView) viewMarker.findViewById(R.id.img_id);

在imageview上设置Imagebitmap,您可以在运行时从url下载

    myImage.setImageBitmap(Imagebitmap);

现在将视图对象传递给方法并从中返回位图。像这样

    Bitmap bmp=createDrawableFromView(context,viewMarker);

    googleMap.addMarker(new MarkerOptions()
            .position(new LatLng(latitude, longitude)).title(title)
            .snippet(snippet)
            .icon(BitmapDescriptorFactory.fromBitmap(bmp)));

现在您可以在任何地方使用返回的位图,这样您就可以使用xmls制作自定义标记图标。

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

它为我工作。感谢!!!

答案 1 :(得分:0)

这可能是一个更好的解决方案,但也许可以试试这个:

将您需要的背景放入可绘制文件夹并加载位图:

Bitmap marker = getResources().getDrawable(R.drawable.marker_background);

使用您下载的图片编辑它的副本(仅限伪,不知道这是否有效):

    int xOffset = 20;
    int yOffset = 50;
    int xPosition = xOffset;
    int yPosition = yOffset;
    int numberOfPixels = image.getHeight()*image.getWidth();
    int[] pixels = new int[numberOfPixels];
    image.getPixels(pixels,0,0,0,0,image.getWidth(), image.getHeight());


    for (int x = 0; x<numberOfPixels;x++){
        marker.setPixel(xPosition,yPosition,pixels[x]);
        if((xPosition-xOffset)%image.getWidth()==0){
            yPosition+=1;
            xPosition=xOffset;
        }else{
            xPosition++;
        }

    }

    MarkerOptions markerOptions = new MarkerOptions().icon(BitmapDescriptorFactory.fromBitmap(marker));