這個百度地圖 android SDK 關於基礎地圖覆蓋物的例子php
//定義Maker座標點 LatLng point = new LatLng(39.963175, 116.400244); //構建Marker圖標 BitmapDescriptor bitmap = BitmapDescriptorFactory .fromResource(R.drawable.icon_marka); //構建MarkerOption,用於在地圖上添加 Marker OverlayOptions option = new MarkerOptions() .position(point) .icon(bitmap); //在地圖上添加Marker,並顯示 mBaiduMap.addOverlay(option);
其中的Marker 也就是標記的意思,就是我們今天要說的覆蓋物,其中的難點在於它只接收一個bitmap來顯示,那假如當咱們有需求,須要加入一些複雜的View(好比Linearlayout嵌套一個TextView和ImageView)來代替這個bitmap怎麼辦?在我查了不少資料之後,終於找到了解決方案。web
其實解決方案很簡單,就是將View或者Viewgroup轉化爲Bitmap就好了。由於地圖的SDK是第三方提供的,咱們沒有權利要求別人去改接口來適應咱們,因此咱們只好想辦法去適應他們。ide
如今我自定義了一個佈局,以下所示函數
point.xml佈局
<?xml version="1.0" encoding="utf-8"?>測試
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="horizontal"
android:background="@drawable/popup"
android:layout_width="wrap_content"
android:layout_height="wrap_content">動畫<ImageView android:layout_width="35dp"
android:layout_height="35dp"
android:scaleType="centerCrop"
android:padding="5dip"
android:src="@drawable/head_1"/>ui<TextView android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textColor="@android :color/black"
android:textSize="20sp"
android:text="測試"
/>spa</LinearLayout>
而後想讓它轉爲Bitmap以後,裝進Marker。下面是核心轉換函數:
private Bitmap getViewBitmap(View addViewContent) {
addViewContent.setDrawingCacheEnabled(true);
addViewContent.measure(
View.MeasureSpec.makeMeasureSpec(0, View.MeasureSpec.UNSPECIFIED),
View.MeasureSpec.makeMeasureSpec(0, View.MeasureSpec.UNSPECIFIED));
addViewContent.layout(0, 0,
addViewContent.getMeasuredWidth(),
addViewContent.getMeasuredHeight());addViewContent.buildDrawingCache();
Bitmap cacheBitmap = addViewContent.getDrawingCache();
Bitmap bitmap = Bitmap.createBitmap(cacheBitmap);return bitmap;
}
其中,最外層的佈局我用Relativelayout嘗試過,但沒法轉化獲得bitmap,深層次的緣由有興趣你們能夠試試。
只要最外層是LinearLayout,裏面的佈局你能夠隨意寫,無論再嵌套多少層其餘的佈局,好比Relativelayout,都能順利的顯示到地圖上。
實現動畫的前提是,你要拿到當前只知道經緯度的這一點在屏幕上的位置,拿到以後你就能夠作一個假動畫,把覆蓋物放到目標位置以後再根據經緯度添加真實的Marker。
下面是轉換代碼:
Point p = baiduMap.getProjection().toScreenLocation(target);
其實核心的就這一句,拿到target(類型爲LatLng)的點的經緯度信息後,將它轉化爲相對於屏幕上的點Point。
Point的x和y屬性就是當前相對屏幕的位置,以後你想作什麼動畫就隨便你了,仍是挺簡單,是吧。
才接觸地圖不到2天,有錯誤的地方請指正,謝謝你們。
這裏是Freestyletime@foxmail.com,歡迎交流。
本人原創做品,轉載請標明出處。