1. 程式人生 > >關於百度地圖InfoWindow響應自定義佈局點選事件

關於百度地圖InfoWindow響應自定義佈局點選事件

大概講解:

在百度地圖上顯示一個marker,當marker被點選後,會彈出一個自定義view,當時在公司做這個功能,被坑慘了,死活彈不出來,不響應.接下來看一下效果圖,程式碼有詳細註釋,進去之後把百度申請的祕鑰換成自己的.有一部分是檢測網路程式碼.這個不用管.




程式碼如下:

public class MainActivity extends Activity implements OnMapClickListener,OnMarkerClickListener {

    private IntentFilter filter;
    private MapView mMapView = null;
    private NetworkChangeReceiver changeReceiver;
    private LatLng ll, ll2, position2;
    private BitmapDescriptor bitmap;
    private MarkerOptions markerOptions;
    private Marker marker;
    private BaiduMap map;
    private InfoWindow mInfoWindow;
    private ViewGroup infoView;
    public static int flag1 = 0;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        // 初始化地圖
        SDKInitializer.initialize(getApplicationContext());
        setContentView(R.layout.activity_main);
        init();
        

        
    

        // 查詢網路程式碼
        filter = new IntentFilter();
        filter.addAction("android.net.conn.CONNECTIVITY_CHANGE");
        changeReceiver = new NetworkChangeReceiver();
        registerReceiver(changeReceiver, filter);

    }

    private void init() {
        // TODO Auto-generated method stub
        map = mMapView.getMap();    
        mMapView = (MapView) findViewById(R.id.bmapView);
        mMapView.showZoomControls(false);// 去除縮放功能
        mMapView.showScaleControl(false);// 去除標尺
        mMapView.removeViewAt(1);// 去除百度LOGO
        // 定位中心位置
        ll = new LatLng(32.0647517242, 118.8029140176);//座標
        MapStatus mMapStatus = new MapStatus.Builder().target(ll).zoom(13)
                .build();
        MapStatusUpdate mMapStatusUpdate = MapStatusUpdateFactory
                .newMapStatus(mMapStatus);
        map.setTrafficEnabled(true);
        map.setMapStatus(mMapStatusUpdate);
        map.setOnMapClickListener(this);//設定 地圖點選事件
        map.setOnMarkerClickListener(this);//設定覆蓋物點選事件
        
        //新增覆蓋物圖示
        bitmap = BitmapDescriptorFactory.fromResource(R.drawable.pic_gzyi);
        LatLng ll3 = new LatLng(31.937775, 118.777021);

        markerOptions = new MarkerOptions().icon(bitmap).position(ll3)
                .animateType(MarkerAnimateType.grow).perspective(true);

        marker = (Marker) map.addOverlay(markerOptions);
    }

    @Override
    protected void onDestroy() {
        // TODO Auto-generated method stub
        super.onDestroy();
        unregisterReceiver(changeReceiver);
    }

    class NetworkChangeReceiver extends BroadcastReceiver {

        @Override
        public void onReceive(Context context, Intent intent) {
            // TODO Auto-generated method stub
            ConnectivityManager connectionMange = (ConnectivityManager) getSystemService(CONNECTIVITY_SERVICE);
            NetworkInfo info = connectionMange.getActiveNetworkInfo();
            if (info != null && info.isAvailable()) {
                Toast.makeText(context, "網路開啟", 0).show();
            } else {
                Toast.makeText(context, "網路關閉", 0).show();
            }

        }

    }
    // 覆蓋物點選事件
    @Override
    public boolean onMarkerClick(Marker arg0) {
        // TODO Auto-generated method stub
        if (flag1 == 0)

        {
            Toast.makeText(MainActivity.this, "歡迎來到百度地圖頁面", 0).show();
            position2 = arg0.getPosition();
            double latitude = position2.latitude;
            // ll2 = new LatLng(31.937775, 118.777021);
            MapStatus mMapStatus = new MapStatus.Builder()
                    .target(position2).zoom(15).build();
            MapStatusUpdate mMapStatusUpdate = MapStatusUpdateFactory
                    .newMapStatus(mMapStatus);
            map.setTrafficEnabled(true);
            map.setMapStatus(mMapStatusUpdate);
            mInfoWindow = new InfoWindow((getInfoWindoView(marker)),
                    position2, -47);// 把彈出框的view新增到InfoWindow,關鍵就是這句程式碼


            map.showInfoWindow(mInfoWindow);
            BaiduMap map = mMapView.getMap();
            flag1 = 1;
        } else {
            map.hideInfoWindow();
            flag1 = 0;
        }
        return true;
    }
    //這個是覆蓋物彈出框
private View getInfoWindoView(Marker marker2) {
        // TODO Auto-generated method stub
    if (null == infoView) {
        infoView = (ViewGroup) LayoutInflater
                .from(getApplication()).inflate(
                        R.layout.overlay_layout4, null);//這個是點選覆蓋物彈出的也面,可以自己定義
    }

    return infoView;
    }

    //地圖點選事件
    @Override
    public void onMapClick(LatLng arg0) {
        // TODO Auto-generated method stub
        map.hideInfoWindow();
    }

    @Override
    public boolean onMapPoiClick(MapPoi arg0) {
        // TODO Auto-generated method stub
        return false;
    }


}

相關推薦

關於地圖InfoWindow響應定義佈局事件

大概講解:在百度地圖上顯示一個marker,當marker被點選後,會彈出一個自定義view,當時在公司做這個功能,被坑慘了,死活彈不出來,不響應.接下來看一下效果圖,程式碼有詳細註釋,進去之後把百度申請的祕鑰換成自己的.有一部分是檢測網路程式碼.這個不用管.程式碼如下:pu

地圖Map、Marker以及Label事件的區分

當我們同時為Marker和Map新增click事件後,會發現點選Marker時,不僅觸發了Marker的click事件,Map的click事件也會同時被觸發。實際上點選地圖上的任何覆蓋物都會傳遞到Map,這是因為API會將事件向上傳遞。那麼如何區分呢?在Map的

地圖的覆蓋物定義(二)--資訊視窗的定義(呼叫白茹提供的資訊視窗InfoWindow

百度地圖的覆蓋物自定義(而)--資訊視窗的自定義(呼叫白茹提供的資訊視窗InfoWindow) var point=new BMap.Point(111.54525,45.578); setInfo

Android定位&地圖&導航——基於地圖,實現定義圖示繪製並時彈出泡泡

public class MainActivity extends Activity { private EditText txtAddr; // 定位相關 LocationClient mLocClient; LocationData locData = nul

IOS地圖氣泡內容定義

 最簡單,最直接的方法。。。 自定義一個 UIView 核心程式碼如下: //改變標註圖片和自定義氣泡 -(BMKAnnotationView *)mapView:(BMKMapView *)mapView viewForAnnotation:(id<BMKAnno

地圖根據座標定義覆蓋物,並實現其事件

在很多APP中都會用到百度地圖,以實現各種功能,本片文章介紹在百度地圖中新增自定義覆蓋物並新增其點選事件 public class NearByFragment extends Fragment { private MapView mapView;

iOS開發之地圖大頭針的定義解決方法

方法1 - (BMKAnnotationView *)mapView:(BMKMapView *)mapView viewForAnnotation:(id <BMKAnnotation>

地圖API中使用ajax實現地圖生成標註並儲存到資料庫

在最近的專案中要使用到百度地圖的api對於地圖處理,要實現的功能是在地圖上每一次點選都會生成一個標註,並把標註位置的座標儲存到資料庫中。搜了很多地方都沒有找到,就打算自己寫寫,沒想到最後發現也不是很難。話不多說,直接上程式碼。 首先是地圖處理的map.html

介面的使用—定義view事件的介面回撥

我這裡使用的是自定義組合view點選事件的介面回撥,底層還是呼叫的android原生的OnClickListener事件。效果圖: 三步實現自定義view點選事件的介面回撥。

Qt-Qlabel 定義滑鼠事件以及文字樣式效果設計

最近專案中需要實現一個訊息推送的功能,模仿QQ訊息彈窗的方式實現,介面開發的工具為Qt。對桌面應用開發這塊不太熟悉,通過摸索嘗試也算是把這個功能實現了,其中也碰到了一些比較麻煩的問題,這些問題我看也具有一定的普遍性,就把我摸索出來的解決方法和大家分享下(可能有更好的方法我沒

ListView中定義Item事件處理

開發中很常見的一個問題,專案中的listview不僅僅是簡單的文字,常常需要自己定義listview的Item,自己的Adapter去繼承BaseAdapter,在adapter中按照需求進行編寫,問題就出現了,可能會發生點選每一個item的時候沒有反應,無法獲

地圖API一:根據標註坐標範圍計算顯示縮放級別zoom適應顯示地圖

var spa get bsp pan nts viewport 百度 getview 百度地圖中根據頁面中的point,自動設置縮放級別和視圖中心,將所有的point在視圖範圍內展示。 var points = [point1, point2,point3];

分享怎麽 定義圖片分享 【原創】

多功能 有道 amp popu har dia 1.0 例如 IV 我們在應用百度分享插件的時候, 默認如果開啟圖片分享的話,連很多小圖標也分享了,實在惱火! 去掉圖片分享吧,分享效果又不好。。。 如何做到自定義圖片分享呢? 就是預先定義tag標簽 例如: "tag":

地圖API二:根據標註坐標範圍計算顯示縮放級別zoom適應顯示地圖

max zoom 天地圖 功能 center 經緯 通過 極值 template 原文:百度地圖API二:根據標註點坐標範圍計算顯示縮放級別zoom自適應顯示地圖 版權聲明:本文為博主原創文章,轉載請註明出處。 https://blo

高德地圖定義Marker時出現的InfoWindow

1.自定義InfoWindowAdapter: package com.onetoo.www.onetoo.abapter.home; import android.content.Context;

ionic開發——地圖InfoWindow資訊視窗上新增按鈕,無法觸發事件問題解決辦法

ionic開發中,在使用百度地圖的時候,有時我們需要在點選地圖上標註的海量點彈出一個infowindow的資訊視窗,自定義資訊視窗的內容後,我們想要可以在資訊視窗上面點選的時候,發現點選沒有效果。 我

ueditor富文字--定義外掛按鈕

我們在在之前的文章中講了 百度ueditor富文字 的 配置和初始化的方法。我們可以給它配置更多的外掛,全部外掛可參考官網:如果官網提供的外掛仍不能滿足我們的需要時,則可以自定義外掛按鈕。比如 我們這裡

地圖infoWindow圓角處理

最近的一個專案用到了百度地圖API裡邊的infoWindow彈框,但是百度自帶的infoWindow彈框是個直角的矩形框,顯示過於難看,於是有了將該框改為圓角的想法,但是API本身不支援樣式的設定,所以我最終選擇在弄清頁面生成的彈框html元素後,自己來給他們定義css,以

地圖InfoWindow迴圈顯示不同的資訊視窗

使用BMap.InfoWindow,在for迴圈展示資訊的時候,總是顯示最後一條資訊的資料。 其實,可以將BMap.InfoWindow的建立寫在一個單獨的function中。這樣,每一個BMap.InfoWindow,就是顯示的當條的資訊。   這幾天在寫一個開發應用中

地圖簡要demo--關鍵字查詢,定位

主要的js: var map; var zoom = 13; //設定初始的地圖顯示級別 var localsearch; //定義搜尋物件 var mapclick; //定義手動標註物件 var markerPoint; var loadingGisSearchBox;