97干视频,99国产精品懂色,亚洲精品99久久久久中文字幕,伊人五月丁香综合AⅤ,国产精品成人免费999

  您的位置:華清遠見教育科技集團 >> 新聞動態(tài) >> Android資料 >> Android開發(fā)之使用Overlay  
 
Android開發(fā)之使用Overlay
分享到:

通過在MapView上添加覆蓋層,可以在指定的位置上添加注解、繪制圖像等。Google地圖上可以加入多個覆蓋層,所有覆蓋層均都在地圖圖層之上,每個覆蓋層均可以對用戶的點擊事件做出響應。

創(chuàng)建覆蓋層繼承Overlay類的子類,并通過重載draw()方法為指定位置添加注解,重載onTap()方法處理用戶的點擊操作。

代碼清單1所示的代碼是創(chuàng)建Overlay的小代碼集合。

代碼清單1 創(chuàng)建Overlay


public class TextOverlay extends Overlay {
        //draw()中傳入的參數(shù)中,shadow變量是用來區(qū)分繪制圖層的:false表示在覆蓋層上進行繪制;true則表示在隱藏層上進行繪制
        @Override
        public void draw(Canvas canvas, MapView mapView, boolean shadow) {
            if (shadow == false){

            }
            else{
            }
            super.draw(canvas, mapView, shadow);
        }

        //onTap()方法的返回值:返回false表示覆蓋層不處理點擊事件;返回true則表示已經處理了點擊事件
        @Override
        public boolean onTap(GeoPoint p, MapView mapView) {
            return false;
        }
    }

在覆蓋層繪制圖形或文字需要使用“畫布”(Canvas)來實現(xiàn),繪制的位置是屏幕坐標,這就需要將地圖上的物理坐標與屏幕坐標進行轉換;Projection類提供了物理坐標和屏幕坐標的轉換功能,可在經度和緯度表示的GeoPoint點和屏幕上Point點進行轉換,toPixels()方法將物理坐標轉換為屏幕坐標,fromPixels()方法將屏幕坐標轉換為物理坐標。

兩個方法的具體使用方法可以參考代碼清單2所示的代碼。

代碼清單2 物理坐標和屏幕坐標的轉換


Projection projection = mapView.getProjection();

    projection.toPixels(geoPoint, point);
    projection.fromPixels(point.x, point.y);

以下內容以MapOverlayDemo示例,說明如何在Google地圖上添加覆蓋層,并在預訂的物理坐標上顯示提示信息。圖1是MapOverlayDemo示例的運行結果。


圖1 MapOverlayDemo示例的運行結果

TextOverlay類是MapOverlayDemo示例的覆蓋層,主要重載了draw()方法,在指定的物理坐標上繪制了標記點和提示文字。TextOverlay.java文件的核心代碼如代碼清單3所示。

代碼清單3 TextOverlay.java核心代碼


public class TextOverlay extends Overlay {
        //定義了繪制半徑變量mRadius,供定義繪制范圍使用
        private final int mRadius = 5;

        @Override
        public void draw(Canvas canvas, MapView mapView, boolean shadow) {
            Projection projection = mapView.getProjection();

            if (shadow == false){
                Double lng = 116.391483 * 1E6;
                Double lat = 39.9055472 * 1E6;

                GeoPoint geoPoint = new GeoPoint(lat.intValue(), lng.intValue());

                Point point = new Point();
                //使用Projection完成了從物理坐標到屏幕坐標的轉換
                projection.toPixels(geoPoint, point);

                //oval設定標記點的大小
                RectF oval = new RectF(point.x - mRadius, point.y - mRadius, point.x + mRadius, point.y + mRadius);

                Paint paint = new Paint();
                //設置了繪制顏色
                paint.setARGB(250, 250, 0, 0);
                //開啟了平滑設置,防止文字出現(xiàn)鋸齒
                paint.setAntiAlias(true);
                paint.setFakeBoldText(true);

                //繪制了圓形的標記點
                canvas.drawOval(oval, paint);
                //繪制了提示文字,第2個和第3個參數(shù)是繪制屏幕的x坐標和y坐標
                canvas.drawText("標記點", point.x+2*mRadius, point.y, paint);
            }
            super.draw(canvas, mapView, shadow);
        }

        @Override
        public boolean onTap(GeoPoint p, MapView mapView) {
            return false;
        }
    }

建立了覆蓋層后,還需要把覆蓋層添加到MapView上。MapOverlayDemo.java的核心代碼如代碼清單4所示。

代碼清單4 MapOverlayDemo.java的核心代碼


public class MapOverlayDemo extends MapActivity {
        private MapView mapView;
        private MapController mapController;
        private TextOverlay textOverlay;

        @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.main);

            mapView = (MapView)findViewById(R.id.mapview);
            mapController = mapView.getController();

            Double lng = 126.676530486 * 1E6;
            Double lat = 45.7698895661 * 1E6;
            GeoPoint point = new GeoPoint(lat.intValue(), lng.intValue());

            mapController.setCenter(point);
            mapController.setZoom(11);
            mapController.animateTo(point);

            //實例化了TextOverlay對象
            textOverlay = new TextOverlay();
            //獲取MapView已有的覆蓋層
            List<Overlay> overlays = mapView.getOverlays();
            //將TextOverlay對象添加到MapView中
            overlays.add(textOverlay);
        }

        @Override
        protected boolean isRouteDisplayed() {
            return false;
        }
    }

 更多相關文章

·Android Overlay硬件加速
·Android開發(fā)之使用Google地圖
·Android開發(fā)之Google地圖應用
·Android開發(fā)之GPS定位
·Android開發(fā)之Android Location API