谷歌地图上显示自定义View方法

来源:互联网 发布:形容女人的网络词汇 编辑:程序博客网 时间:2024/06/07 10:04

前段时间项目中嵌入了android高德地图,但是后来发现国外的客户反应高德地图加载很慢(高德地图显示国外地图的方法:在初始化时调用MapsInitializer.loadWorldGridMap(boolean) true 表示打开),后来在售后的不断反馈下决定尝试国内加载高德地图,国外加载谷歌地图,这样应该就能解决高德地图在国外加载超慢而且还不能显示卫星地图的情况了。


工作开始了,高德地图转Google地图进展还是挺顺利的,这两种地图api极其类似,方法名都高度保持一致,不过还是有不同的地方,其中有一个方法是将自定义view添加到Marker显示到地图上,高德地图有提供方法:

BitmapDescriptor bitmapDescriptor = BitmapDescriptorFactory.fromView(view);
但是Google地图没有这个方法,于是我就查看fromView()的源码,最终照葫芦画瓢成功的实现了一个Google地图版的fromView(),具体实现如下:

/** GoogleMap:根据传入的view,创建BitmapDescriptor对象 */public BitmapDescriptor fromView(Context context, View view) {    FrameLayout frameLayout = new FrameLayout(context);    frameLayout.addView(view);    frameLayout.setDrawingCacheEnabled(true);    Bitmap bitmap = getBitmapFromView(frameLayout);    BitmapDescriptor bitmapDescriptor = fromBitmap(bitmap);    bitmap.recycle();    return bitmapDescriptor;}/** Convert a view to bitmap */public Bitmap getBitmapFromView(View view) {    try {        banTextViewHorizontallyScrolling(view);        view.destroyDrawingCache();        view.measure(View.MeasureSpec.makeMeasureSpec(0, View.MeasureSpec.UNSPECIFIED),                View.MeasureSpec.makeMeasureSpec(0, View.MeasureSpec.UNSPECIFIED));        view.layout(0, 0, view.getMeasuredWidth(), view.getMeasuredHeight());        Bitmap bitmap = view.getDrawingCache();        return bitmap != null ? bitmap.copy(Bitmap.Config.ARGB_8888, false) : null;    } catch (Throwable ex) {        Log.d(TAG, "getBitmapFromView: ");        return null;    }}/** 禁止TextView水平滚动 */private void banTextViewHorizontallyScrolling(View view) {    if (view instanceof ViewGroup) {        for (int index = 0; index < ((ViewGroup) view).getChildCount(); ++index) {            banTextViewHorizontallyScrolling(((ViewGroup) view).getChildAt(index));        }    } else if (view instanceof TextView) {        ((TextView) view).setHorizontallyScrolling(false);    }}
使用方法如下:

View view = LayoutInflater.from(this).inflate(R.layout.amap_marker_layout, null);
BitmapDescriptor bitmapDescriptor = fromView(getActivity(), view);MarkerOptions option = new MarkerOptions()        .position(lastLatLng)        .icon(bitmapDescriptor)        .zIndex(4)        .draggable(false);
Marker marker = mGoogleMap.addMarker(option);
这样就完美的将自定义view添加成Marker并显示在地图上了。

第一次写博客,希望能帮到有需要的人。

阅读全文
1 0
原创粉丝点击