package com.zhangle.gmt;
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.graphics.Canvas;
import android.graphics.Paint;
import android.graphics.Point;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.RadioGroup;
import android.widget.Toast;
import android.widget.RadioGroup.OnCheckedChangeListener;
// 必须继承MapActivity
public class GoogleMapTestActivity extends MapActivity
{
// 定义界面上的的可视化控件
Button locBn;
RadioGroup mapType;
MapView mv;
EditText etLng , etLat;
// 定义MapController对象
MapController controller;
Bitmap posBitmap;
//构造方法(纬度,经度)乘以10的六次方
GeoPoint geoPoint=new GeoPoint((int)(31.38*1E6),(int)(117.5*1000000));
private String text="安徽";
@Override
protected void onCreate(Bundle status)
{
super.onCreate(status);
setContentView(R.layout.main);
// 获得界面上MapView对象
mv = (MapView) findViewById(R.id.mv);
mv.setTraffic(true);//交通模式
mv.setSatellite(true);//卫星模式
mv.setStreetView(true);//街道模式
/*mv.setEnabled(true); 这两个事件可以在配置文件中设置
mv.setClickable(true);*/
// 设置显示放大、缩小的控制按钮
mv.setBuiltInZoomControls(true);
// 创建MapController对象
controller = mv.getController();
//controller.setCenter(geoPoint);设置中
controller.animateTo(geoPoint);//移动到某个点
controller.setZoom(12);//设置缩放尺寸1-21
//定义提示层
LocationOverlay lOverlay=new LocationOverlay();
//在mapview增加显示层
List<Overlay> overlays=mv.getOverlays();
overlays.add(lOverlay);
/*posBitmap = BitmapFactory.decodeResource(getResources(),
R.drawable.pos);
// 获取界面上两个文本框
etLng = (EditText) findViewById(R.id.lng);
etLat = (EditText) findViewById(R.id.lat);
// 获得Button对象
locBn = (Button) findViewById(R.id.loc);
locBn.setOnClickListener(new View.OnClickListener()
{
public void onClick(View source)
{
// 获取用户输入的经度、纬度值
String lng = etLng.getEditableText().toString().trim();
String lat = etLat.getEditableText().toString().trim();
if (lng.equals("") || lat.equals(""))
{
Toast.makeText(GoogleMapTestActivity.this, "请输入有效的经度、纬度!",
Toast.LENGTH_LONG).show();
}
else
{
double dLong = Double.parseDouble(lng);
double dLat = Double.parseDouble(lat);
// 调用方法更新MapView
updateMapView(dLong , dLat);
}
}
});
// 触发按钮的单击事件
locBn.performClick();
// 获得RadioGroup对象
mapType = (RadioGroup) findViewById(R.id.rg);
// 为RadioGroup的选中状态改变添加监听器
mapType.setOnCheckedChangeListener(new OnCheckedChangeListener()
{
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()
{
return true;
}
public class LocationOverlay extends Overlay {
@Override
public void draw(Canvas canvas, MapView mapView, boolean shadow) {
//坐标转换,把经纬度转换成屏幕坐标
Point point=new Point();
mv.getProjection().toPixels(geoPoint, point);
/**
* 绘制
*/
Paint paint=new Paint();
paint.setARGB(255,255, 0, 0);
paint.setStrokeWidth(1);//设置画笔宽带
paint.setARGB(255,255, 0, 0);
paint.setStyle(Paint.Style.STROKE);
//绘制矩形,知道左上和右下坐标即可
canvas.drawRect(point.x, point.y, point.x+20, point.y+10, paint);
//提示文本
canvas.drawText(text, point.x, point.y+10, paint);
//绘制图片
Bitmap bitmap=BitmapFactory.decodeResource(getResources(), R.drawable.pos);
canvas.drawBitmap(bitmap, point.x,point.y, paint);
}
}
private void updateMapView(double lng, double lat)
{
GeoPoint gp = new GeoPoint((int) (lat * 1E6)
, (int) (lng * 1E6));
mv.displayZoomControls(true);
controller.animateTo(gp);
List<Overlay> ol = mv.getOverlays();
ol.clear();
ol.add(new PosOverLay(gp, posBitmap));
}
}