?
實現結果如下:
?
?
?
代碼如下:?
package com.easyway.polyline; import java.util.ArrayList; import java.util.List; import android.os.Bundle; import com.google.android.maps.GeoPoint; import com.google.android.maps.MapActivity; import com.google.android.maps.MapController; import com.google.android.maps.MapView; /** * 自定義的折現圖層的實現 * 在特定情況下,可能需要我們開發人員繪制特定的圖層在google map上面顯示 * * * * @author longgangbai * */ public class GooglePolylineActivity extends MapActivity { private MapView mapView; /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); mapView =(MapView)findViewById(R.id.mapView); //存儲連接的點的信息 List<GeoPoint> points = new ArrayList<GeoPoint>(); points.add(new GeoPoint(39907794,116356694)); points.add(new GeoPoint(39950181,116415059)); points.add(new GeoPoint(39909637,116435315)); points.add(new GeoPoint(39902526,116398236)); //添加自定義的圖層 PolyLine polyline = new PolyLine(points); mapView.getOverlays().add(polyline); //map是MapView類型 mapView.invalidate(); mapView.setBuiltInZoomControls(true); MapController mapcontroller=mapView.getController(); GeoPoint point=new GeoPoint(39950181,116415059); mapcontroller.setCenter(point); mapcontroller.setZoom(7); } /** * 是否顯示路線顯示 */ @Override protected boolean isRouteDisplayed() { return true; } }
?
?
?
package com.easyway.polyline; import java.util.List; import android.graphics.Canvas; import android.graphics.Color; import android.graphics.Paint; import android.graphics.Point; import com.google.android.maps.GeoPoint; import com.google.android.maps.MapView; import com.google.android.maps.Overlay; import com.google.android.maps.Projection; /** * Goolge地圖之Polyline實現Overlay 以圖層形式存在. * MyLocationOverlay:定位當前位置的圖層 * ItemizedOverlay:圖層的基類 * OverlayItem:圖層的項 * * * @author longgangbai */ public class PolyLine extends Overlay { List<GeoPoint> points; Paint paint; /** * 構造函數,使用GeoPoint List構造Polyline * * @param points * GeoPoint點List */ public PolyLine(List<GeoPoint> points) { this.points = points; paint = new Paint(); paint.setColor(Color.BLUE); paint.setAlpha(150); paint.setAntiAlias(true); paint.setStyle(Paint.Style.FILL_AND_STROKE); paint.setStrokeWidth(4); } /** * 使用GeoPoint點List和Paint對象來構造Polyline * * @param points * GeoPoint點List,所有的拐點 * @param paint * Paint對象,用來控制劃線樣式 */ public PolyLine(List<GeoPoint> points, Paint paint) { this.points = points; this.paint = paint; } /** * 真正將線繪制出來 只需將線繪制到canvas上即可,主要是要轉換經緯度到屏幕坐標 */ @Override public void draw(Canvas canvas, MapView mapView, boolean shadow) { if (!shadow) {// 不是繪制shadow層 Projection projection = mapView.getProjection(); if (points != null) { if (points.size() >= 2) { Point start = projection.toPixels(points.get(0), null);// 需要轉換坐標 for (int i = 1; i < points.size(); i++) { Point end = projection.toPixels(points.get(i), null); canvas.drawLine(start.x, start.y, end.x, end.y, paint);// 繪制到canvas上即可 start = end; } } } } } }
?
更多文章、技術交流、商務合作、聯系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號聯系: 360901061
您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元
