当前位置: 代码迷 >> Android >> android GoogleMap定位(3)
  详细解决方案

android GoogleMap定位(3)

热度:75   发布时间:2016-05-01 18:45:57.0
android GoogleMap定位(三)

一个根据GPS信息在地图上的定位的小demo

布局文件main.xml

<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"	android:orientation="vertical" android:layout_width="fill_parent"	android:layout_height="fill_parent">	<LinearLayout android:orientation="horizontal"		android:layout_width="fill_parent" android:layout_height="wrap_content"		android:gravity="center_horizontal">		<TextView android:text="经度" android:layout_width="wrap_content"			android:layout_height="wrap_content" />		<EditText android:id="@+id/lng" android:layout_width="85px"			android:layout_height="wrap_content" />		<TextView android:text="纬度" android:layout_width="wrap_content"			android:layout_height="wrap_content" />		<EditText android:id="@+id/lat" android:layout_width="85px"			android:layout_height="wrap_content" />		<Button android:id="@+id/loc" android:layout_width="wrap_content"			android:layout_height="wrap_content" android:text="定位"/>	</LinearLayout>	<LinearLayout android:orientation="horizontal"		android:layout_width="fill_parent" android:layout_height="wrap_content"		android:gravity="center_horizontal">		<RadioGroup android:id="@+id/rg" android:orientation="horizontal"			android:layout_width="wrap_content" android:layout_height="wrap_content"			android:layout_weight="1">			<RadioButton android:text="普通" android:id="@+id/normal"				android:checked="true" android:layout_width="wrap_content"				android:layout_height="wrap_content" />			<RadioButton android:text="卫星" android:id="@+id/satellite"				android:layout_width="wrap_content" android:layout_height="wrap_content" />		</RadioGroup>	</LinearLayout>	<com.google.android.maps.MapView		android:id="@+id/mv" android:clickable="true" android:enabled="true"		android:layout_width="fill_parent" android:layout_height="fill_parent"		android:apiKey="0kcrUw1E0GWVCoo6chWBqqxAxiLQGpqgcTII6HQ" /></LinearLayout>

?主界面文件

package com.hc;import java.util.List;import com.google.android.maps.GeoPoint;import com.google.android.maps.MapActivity;import com.google.android.maps.MapController;import com.google.android.maps.MapView;import com.google.android.maps.Overlay;import android.graphics.Bitmap;import android.graphics.BitmapFactory;import android.os.Bundle;import android.view.View;import android.view.View.OnClickListener;import android.widget.Button;import android.widget.EditText;import android.widget.RadioGroup;import android.widget.RadioGroup.OnCheckedChangeListener;import android.widget.Toast;public class GooglemapActivity extends MapActivity {	/** Called when the activity is first created. */	Button locBn;	RadioGroup mapType;	MapView mv;	EditText etLng, etLat;	MapController controller;	Bitmap posBitmap;	@Override	public void onCreate(Bundle savedInstanceState) {		super.onCreate(savedInstanceState);		setContentView(R.layout.main);		posBitmap = BitmapFactory.decodeResource(getResources(),				R.drawable.icon);		mv = (MapView) findViewById(R.id.mv);		etLng = (EditText) findViewById(R.id.lng);		etLat = (EditText) findViewById(R.id.lat);		// 显示放大缩小控制按钮		mv.setBuiltInZoomControls(true);		controller = mv.getController();		locBn = (Button) findViewById(R.id.loc);		locBn.setOnClickListener(new OnClickListener() {			@Override			public void onClick(View v) {				String lng = etLng.getEditableText().toString().trim();				String lat = etLat.getEditableText().toString().trim();				if (lng.equals("") || lat.equals("")) {					Toast.makeText(GooglemapActivity.this, "输入有效经度维度",							Toast.LENGTH_LONG).show();				} else {					double dlong = Double.parseDouble(lng);					double dLat = Double.parseDouble(lat);					UpdateMapView(dlong, dLat);				}			}		});		locBn.performClick();		mapType = (RadioGroup) findViewById(R.id.rg);		mapType.setOnCheckedChangeListener(new OnCheckedChangeListener() {			@Override			public void onCheckedChanged(RadioGroup group, int checkedId) {				switch (checkedId) {				case R.id.normal:					mv.setSatellite(false);					break;				case R.id.satellite:					mv.setSatellite(true);					break;				}			}		});	}	@Override	protected boolean isRouteDisplayed() {		// TODO Auto-generated method stub		return true;	}	private void UpdateMapView(double dlong, double dLat) {	GeoPoint gp = new GeoPoint((int)(dLat*1E6), (int)(dlong*1E6));	mv.displayZoomControls(true);	controller.animateTo(gp);	List<Overlay> ol = mv.getOverlays();	ol.clear();	ol.add(new PosOverLay(gp, posBitmap));	}}

?地图上显示的自定义定位图片

package com.hc;import android.graphics.Bitmap;import android.graphics.Canvas;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;public class PosOverLay extends Overlay {	Bitmap posBitmap;	GeoPoint gp;		public PosOverLay(GeoPoint gp,Bitmap posBitmap){		super();		this.gp=gp;		this.posBitmap=posBitmap;	}		@Override	public void draw(Canvas canvas, MapView mapView, boolean shadow) {	if(!shadow){		Projection proj = mapView.getProjection();		Point p= new Point();		proj.toPixels(gp, p);		canvas.drawBitmap(posBitmap, p.x-posBitmap.getWidth()/2,p.y-posBitmap.getHeight(), null);	}	}}

?manifest文件中加入两条

??? <uses-permission android:name="android.permission.INTERNET"/>? 网络权限

???? <uses-library android:name="com.google.android.maps"/>

?

效果如下

?


  相关解决方案