android GoogleMap定位(三)一个根据GPS信息在地图上的定位的小demo布局文件main.xml?xml version1.0 e
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.MapViewandroid: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;@Overridepublic 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() {@Overridepublic 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() {@Overridepublic void onCheckedChanged(RadioGroup group, int checkedId) {switch (checkedId) {case R.id.normal:mv.setSatellite(false);break;case R.id.satellite:mv.setSatellite(true);break;}}});}@Overrideprotected boolean isRouteDisplayed() {// TODO Auto-generated method stubreturn 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;}@Overridepublic 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"/>
?
效果如下
?

