我想使用布局,而不是我的标记,我使用Google Maps Api 2作为Android应用.
像这样:
Marker m = googleMap
.addMarker(new MarkerOptions()
.position(LOC)
.snippet(user)
.title(name)
.icon(BitmapDescriptorFactory.fromResource(R.layout.map_marker)));
但是,它似乎只是设计用于drawable文件夹.
我只是一个背景图像,我可以根据标记类型更改颜色.这是我想要使用的布局:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="50dp"
android:layout_height="50dp"
android:background="#222"
android:id="@+id/llMarker">
<ImageView
android:id="@+id/ivMarker"
android:layout_marginTop="5dp"
android:layout_width="40dp"
android:layout_height="40dp" />
</LinearLayout>
很基本的.我如何将其用作标记? (或者至少复制我想要的最终结果?)
文件说你可以用这个:
fromResource (int resourceId)
所以我假设布局可能有效.
更新:
我从下面的答案中采用了这个概念并重新设计了一些东西;这还不行;没有错误.只是不会显示图像.
LayoutInflater inflater = (LayoutInflater) getActivity()
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
View v = inflater.inflate(R.layout.map_marker, null);
m = googleMap
.addMarker(new MarkerOptions()
.position(LOC)
.snippet(user)
.title(name)
.icon(BitmapDescriptorFactory.fromBitmap(loadBitmapFromView(v))));
// 方法
public static Bitmap loadBitmapFromView(View v) {
if (v.getMeasuredHeight() <= 0) {
v.measure(WindowManager.LayoutParams.WRAP_CONTENT, WindowManager.LayoutParams.WRAP_CONTENT);
Bitmap b = Bitmap.createBitmap(v.getMeasuredWidth(), v.getMeasuredHeight(), Bitmap.Config.ARGB_8888);
Canvas c = new Canvas(b);
v.layout(0, 0, v.getMeasuredWidth(), v.getMeasuredHeight());
v.draw(c);
return b;
}
return null;
}
解决方法:
你不能直接使用BitmapDescriptorFactory.fromResource()
的布局:
Creates a BitmapDescriptor using the resource id of an image.
但是,您可以将布局绘制到位图中,然后使用它.你需要:
>从xml(使用LayoutInflater)扩展布局.
>更改所需的任何属性(例如背景颜色).
>通过Canvas将此布局渲染为位图,例如here所述.
>将此位图传递到BitmapDescriptorFactory.fromBitmap()
.