本文转载自 http://mzba520.iteye.com/blog/964657
作者mzba520 ,谢谢作者的辛勤劳动。
- package cn.cate.main;
-
- import java.util.List;
-
- import android.content.Context;
- import android.content.Intent;
- import android.location.Criteria;
- import android.location.Location;
- import android.location.LocationListener;
- import android.location.LocationManager;
- import android.os.Bundle;
- import android.view.View;
- import android.view.Window;
- import android.view.WindowManager;
- import android.view.View.OnClickListener;
- import android.widget.ImageButton;
- import android.widget.Toast;
-
- 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;
-
-
- public class MyMapActivity extends MapActivity implements OnClickListener{
- private MapController myMapController = null;
- private MapView mapView = null;
- private double c_lon = 0;
- private double c_lat = 0;
- private ImageButton myImageButton = null;
- private LocationManager lm = null;
-
- @Override
- protected boolean isRouteDisplayed() {
- return false;
- }
-
- @Override
- protected void onCreate(Bundle icicle) {
- super.onCreate(icicle);
- requestWindowFeature(Window.FEATURE_NO_TITLE);
- getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
- WindowManager.LayoutParams.FLAG_FULLSCREEN);
- this.setContentView(R.layout.map);
-
- mapView = (MapView) this.findViewById(R.id.myMapView);
- myMapController = mapView.getController();
- myMapController.setZoom(15);
- mapView.setBuiltInZoomControls(true);
-
- lm = (LocationManager)getSystemService(Context.LOCATION_SERVICE);
- String bestProvider = lm.getBestProvider(getCriteria(), true);
- Location l = lm.getLastKnownLocation(bestProvider);
- updateView(l);
- lm.requestLocationUpdates(bestProvider, 1000, 8, ll);
-
- myImageButton = (ImageButton)findViewById(R.id.MyImageButton);
- myImageButton.setOnClickListener(this);
-
- MyMapOverlay myOverlay = new MyMapOverlay();
- List<Overlay> overlays = mapView.getOverlays();
- overlays.clear();
- overlays.add(myOverlay);
- }
-
- public void updateView(Location location){
- if(location != null){
- c_lat = location.getLatitude();
- c_lon = location.getLongitude();
- System.out.println("纬度:"+c_lat+",经度:"+c_lon);
- GeoPoint gp = new GeoPoint((int)(c_lat * 1E6), (int)(c_lon * 1E6));
- myMapController.animateTo(gp);
- }
- }
-
- @Override
- public void onClick(View v) {
- if(v == myImageButton){
- boolean flag = true;
- List<Overlay> overlays = mapView.getOverlays();
- for(Overlay overlay:overlays){
- if(overlay instanceof MyBallonOverlay){
- flag = false;
- GeoPoint gp = ((MyBallonOverlay) overlay).getGeoPoint();
- Intent intent = new Intent();
- Bundle bundle = new Bundle();
- bundle.putDouble("lat", gp.getLatitudeE6()/1E6);
- bundle.putDouble("lon", gp.getLongitudeE6()/1E6);
- intent.putExtras(bundle);
- MyMapActivity.this.setResult(RESULT_OK, intent);
- MyMapActivity.this.finish();
- }
- }
- if(flag){
- Toast.makeText(this, "请点击地图获取店铺位置", Toast.LENGTH_LONG).show();
- }
- }
- }
-
- public Criteria getCriteria(){
- Criteria c = new Criteria();
- c.setAccuracy(Criteria.ACCURACY_FINE);
- c.setSpeedRequired(false);
- c.setCostAllowed(false);
- c.setBearingRequired(false);
- c.setAltitudeRequired(false);
- c.setPowerRequirement(Criteria.POWER_LOW);
- return c;
- }
-
- LocationListener ll = new LocationListener() {
-
- @Override
- public void onStatusChanged(String provider, int status, Bundle extras) {
-
- }
-
- @Override
- public void onProviderEnabled(String provider) {
-
- Location l = lm.getLastKnownLocation(provider);
- updateView(l);
- }
-
- @Override
- public void onProviderDisabled(String provider) {
-
- updateView(null);
- }
-
- @Override
- public void onLocationChanged(Location location) {
-
- updateView(location);
- }
- };
- }
- import java.util.List;
-
- import android.view.MotionEvent;
-
- import com.google.android.maps.GeoPoint;
- import com.google.android.maps.MapView;
- import com.google.android.maps.Overlay;
-
-
- public class MyMapOverlay extends Overlay{
- boolean flagMove=false;
- @Override
- public boolean onTouchEvent(MotionEvent event, MapView mv) {
- if(event.getAction() == MotionEvent.ACTION_MOVE){
- flagMove=true;
- }
- else if(event.getAction() == MotionEvent.ACTION_DOWN){
- flagMove=false;
- }
- else if (MyBallonOverlay.currentBallon==null&&
- !flagMove&&
- event.getAction() == MotionEvent.ACTION_UP ){
-
- GeoPoint gp = mv.getProjection().fromPixels(
- (int) event.getX(),
- (int) event.getY()
- );
-
- String latStr=Math.round(gp.getLatitudeE6()/1000.00)/1000.0+"";
- String longStr=Math.round(gp.getLongitudeE6()/1000.00)/1000.0+"";
-
- List<Overlay> overlays = mv.getOverlays();
- for(Overlay ol:overlays){
- if(ol instanceof MyBallonOverlay){
- overlays.remove(ol);
- }
- }
-
- MyBallonOverlay mbo=new MyBallonOverlay(
- gp,
- "店铺位置为:/n经度:"+longStr+"/n纬度:"+latStr
- );
- overlays.add(mbo);
- return true;
- }
- return false;
- }
- }
- package cn.cate.main;
- import java.util.ArrayList;
- import java.util.List;
-
- import android.view.MotionEvent;
- import com.google.android.maps.GeoPoint;
- import com.google.android.maps.MapView;
- import com.google.android.maps.Overlay;
- import com.google.android.maps.Projection;
- import android.graphics.*;
-
- public class MyBallonOverlay extends Overlay{
- final static int picWidth=20;
- final static int picHeight=34;
- final static int arcR=8;
-
- static MyBallonOverlay currentBallon=null;
- String msg;
-
- boolean showWindow=false;
-
- GeoPoint gp;
-
- public MyBallonOverlay(GeoPoint gp,String msg){
- this.gp=gp;
- this.msg=msg;
- }
-
- public GeoPoint getGeoPoint(){
- return gp;
- }
-
- @Override
- public boolean onTouchEvent(MotionEvent event, MapView mv) {
- if(currentBallon!=null&¤tBallon!=this){
-
- return false;
- }
- if(event.getAction() == MotionEvent.ACTION_DOWN){
-
- int x=(int)event.getX();
- int y=(int)event.getY();
- Point p= getPoint(mv);
-
- int xb=p.x-picWidth/2;
- int yb=p.y-picHeight;
-
- if(x>=xb&&x<xb+picWidth&&y>=yb&&y<yb+picHeight){
-
- currentBallon=this;
- return true;
- }
- }
- else if (event.getAction() == MotionEvent.ACTION_MOVE) {
-
- return currentBallon!=null;
- }
- else if (event.getAction() == MotionEvent.ACTION_UP) {
-
- int x=(int)event.getX();
- int y=(int)event.getY();
-
-
- Point p= getPoint(mv);
- int xb=p.x-picWidth/2;
- int yb=p.y-picHeight;
-
- if(currentBallon==this&&x>=xb&&x<xb+picWidth&&y>=yb&&y<yb+picHeight){
-
-
- currentBallon=null;
- showWindow=!showWindow;
-
- List<Overlay> overlays = mv.getOverlays();
- overlays.remove(this);
- overlays.add(this);
- for(Overlay ol:overlays){
- if(ol instanceof MyBallonOverlay){
- if(ol!=this){
- ((MyBallonOverlay)ol).showWindow=false;
- }
- }
- }
- return true;
- }
- else if(currentBallon==this){
-
- currentBallon=null;
- return true;
- }
- }
- return false;
- }
- @Override
- public void draw(Canvas canvas, MapView mapView, boolean shadow) {
-
- Point p= getPoint(mapView);
-
- canvas.drawBitmap(MainActivity.bitmap, p.x-picWidth/2, p.y-picHeight, null);
-
- if(showWindow){
- drawWindow(canvas,p,160);
- }
-
- super.draw(canvas, mapView, shadow);
- }
-
- public Point getPoint(MapView mapView){
- Projection projettion = mapView.getProjection();
- Point p = new Point();
- projettion.toPixels(gp, p);
- return p;
- }
-
- public void drawWindow(Canvas canvas,Point p,int winWidth){
- int charSize=15;
- int textSize=16;
- int leftRightPadding=2;
-
-
- int lineWidth=winWidth-leftRightPadding*2;
- int lineCharCount=lineWidth/(charSize);
-
- ArrayList<String> alRows=new ArrayList<String>();
- String currentRow="";
- for(int i=0;i<msg.length();i++){
- char c=msg.charAt(i);
- if(c!='/n'){
- currentRow=currentRow+c;
- }
- else{
- if(currentRow.length()>0){
- alRows.add(currentRow);
- }
- currentRow="";
- }
- if(currentRow.length()==lineCharCount){
- alRows.add(currentRow);
- currentRow="";
- }
- }
- if(currentRow.length()>0){
- alRows.add(currentRow);
- }
- int lineCount=alRows.size();
- int winHeight=lineCount*(charSize)+2*arcR;
-
- Paint paint=new Paint();
- paint.setAntiAlias(true);
- paint.setTextSize(textSize);
-
- paint.setARGB(255, 255,251,239);
- int x1=p.x-winWidth/2;
- int y1=p.y-picHeight-winHeight-1;
- int x2=x1+winWidth;
- int y2=y1+winHeight;
- RectF r=new RectF(x1,y1,x2,y2);
- canvas.drawRoundRect(r, arcR, arcR, paint);
- paint.setARGB(255,198,195,198);
- paint.setStyle(Paint.Style.STROKE);
- paint.setStrokeWidth(2);
- canvas.drawRoundRect(r, arcR, arcR, paint);
-
-
- paint.setStrokeWidth(0);
- paint.setARGB(255, 10, 10, 10);
- int lineY=y1+arcR+charSize;
- for(String lineStr:alRows){
- for(int j=0;j<lineStr.length();j++){
- String colChar=lineStr.charAt(j)+"";
- canvas.drawText(colChar, x1+leftRightPadding+j*charSize, lineY, paint);
- }
- lineY=lineY+charSize;
- }
- }
- }