Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> Android開發實例 >> Android進階:在地圖MapView通過Overlay顯示POI位置信息

Android進階:在地圖MapView通過Overlay顯示POI位置信息

編輯:Android開發實例

首先繼承抽象類 ItemizedOverlay 並重寫onTap方法

  1. class MyOverItem extends ItemizedOverlay<OverlayItem> {  
  2.     private List<OverlayItem> GeoList = new ArrayList<OverlayItem>();  
  3.     private Drawable marker;  
  4.     private Context mContext;  
  5.     //這裡寫死poi點。。可以從服務器查詢獲得  
  6.       
  7.     private double mLat1 = 40.0506; // point1緯度  
  8.     private double mLon1 = 116.288700; // point1經度  
  9.     private double mLat2 = 40.051723;  
  10.     private double mLon2 = 116.287741;  
  11.     private double mLat3 = 40.052723;  
  12.     private double mLon3 = 116.286741;  
  13.     public MyOverItem(Drawable marker, Context context) {  
  14.         super(boundCenterBottom(marker));  
  15.         this.marker = marker;  
  16.         this.mContext = context;  
  17.           
  18.           
  19.         // 用給定的經緯度構造GeoPoint,單位是微度 (度 * 1E6)  
  20.         GeoPoint p1 = new GeoPoint((int) (mLat1 * 1E6), (int) (mLon1 * 1E6));  
  21.         GeoPoint p2 = new GeoPoint((int) (mLat2 * 1E6), (int) (mLon2 * 1E6));  
  22.         GeoPoint p3 = new GeoPoint((int) (mLat3 * 1E6), (int) (mLon3 * 1E6));  
  23.         // 構造OverlayItem的三個參數依次為:item的位置,標題文本,文字片段  
  24.         GeoList.add(new OverlayItem(p1, "P1", "point1"));  
  25.         GeoList.add(new OverlayItem(p2, "P2", "point2"));  
  26.         GeoList.add(new OverlayItem(p3, "P3", "point3"));         
  27.         //該方法應該是將當前的GeoList的overlay 同步到 父類ItemizedOverlay中的list中以進行重繪    
  28.         //所以當GeoList數據發生變化時需要調用該方法  
  29.         populate();    
  30.                          
  31.     }  
  32.     @Override 
  33.     public void draw(Canvas canvas, MapView mapView, boolean shadow) {  
  34.         // Projection接口用於屏幕像素點坐標系統和地球表面經緯度點坐標系統之間的變換  
  35.         Projection projection = mapView.getProjection();   
  36.         for (int index = size() - 1; index >= 0; index--) { // 遍歷GeoList  
  37.             OverlayItem overLayItem = getItem(index); // 得到給定索引的item  
  38.             String title = overLayItem.getTitle();  
  39.             // 把經緯度變換到相對於MapView左上角的屏幕像素坐標  
  40.             Point point = projection.toPixels(overLayItem.getPoint(), null);   
  41.             Paint paintCircle = new Paint();  
  42.             paintCircle.setColor(Color.RED);  
  43.             canvas.drawCircle(point.x, point.y, 5, paintCircle); // 畫圓  
  44.             Paint paintText = new Paint();  
  45.             paintText.setColor(Color.BLACK);  
  46.             paintText.setTextSize(15);  
  47.             canvas.drawText(title, point.x, point.y - 25, paintText); // 繪制文本  
  48.         }  
  49.         super.draw(canvas, mapView, shadow);  
  50.         //調整一個drawable邊界,使得(0,0)是這個drawable底部最後一行中心的一個像素  
  51.         boundCenterBottom(marker);  
  52.     }  
  53.     @Override 
  54.     protected OverlayItem createItem(int i) {  
  55.         return GeoList.get(i);  
  56.     }  
  57.     @Override 
  58.     public int size() {  
  59.         return GeoList.size();  
  60.     }  
  61.     @Override 
  62.     // 處理當點擊事件  
  63.     //mapview的onTouch事件會傳播到overlay的 onTouch方法 通過點擊范圍可以確定觸發哪個overlay的onTap  
  64.     protected boolean onTap(int i) {  
  65.         setFocus(GeoList.get(i));  
  66.         Toast.makeText(this.mContext, GeoList.get(i).getSnippet(),  
  67.                 Toast.LENGTH_SHORT).show();  
  68.         return true;  
  69.     }  
  70. }  

 

 

 

Google API中MapView可以獲得Overlay的列表

  1. private void initOverlayItem(){  
  2.         Drawable marker = getResources().getDrawable(R.drawable.poi_1);  //得到需要標在地圖上的資源  
  3.           
  4.         marker.setBounds(0, 0, marker.getIntrinsicWidth(), marker  
  5.                 .getIntrinsicHeight());   //為maker定義位置和邊界  
  6.           
  7.         mapView.getOverlays().add(new MyOverItem(marker, this)); //添加ItemizedOverlay實例到mMapView  
  8.     } 

MapView會 根據順序在onDraw方法中重繪

 

  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved