简单的Google Map程序

                     

1.个人爱好,首先上布局

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical" >

    <TextView
        android:id="@+id/textview"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:background="#F0FFFF"
        android:textColor="#0000CD"
        android:padding="8dip"
        android:text="" />
    <com.google.android.maps.MapView
                 android:id="@+id/map"
                 android:layout_width="fill_parent"
                 android:layout_height="fill_parent"
                 android:layout_below="@id/textview"
                 android:clickable="true"
               
                 android:apiKey="0cz9nP0sCgX6ARM3EivWBlKrmb2Wt9c13aitJVA"
                 />
      <!-- clickable="true"设置屏幕上的地图是否可以被用户拖动  
      layout_alignParentBottom 向下对齐
      layout_centerHorizontal="true"水平居中-->
<LinearLayout 
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:id="@+id/zoom"
    android:layout_alignParentBottom="true"
    android:layout_centerHorizontal="true"
 >
    
    </LinearLayout>
</RelativeLayout>
2.接着上活动  Googlemap1Activity.java

package com.wang;

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.MyLocationOverlay;
import com.google.android.maps.Overlay;
import com.wang.R.drawable;

import android.app.Activity;
import android.app.AlertDialog;
import android.app.Dialog;
import android.content.DialogInterface;
import android.graphics.drawable.Drawable;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.widget.TextView;

public class Googlemap1Activity extends MapActivity {

	private MapView mapView;
	private MapController mapController;
	private MyLocationOverlay myLocationOverlay;
	private possitionOverlay  pOverlay;
	private TextView textView;
	public void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.main);
        textView=(TextView)findViewById(R.id.textview);  
		
		mapView = (MapView) findViewById(R.id.map);
		// 取得地图控制对象的实体mapController
		mapController = mapView.getController();
		// 缩放尺度,数字越大,地图的细节越详细
		mapController.setZoom(17);
		// 设置地图的模式为一般模式
		// 还有卫星(mapView.setSatellite(true);)、街道模式mapView.setStreetView(true);
		mapView.setTraffic(true);
		// 设置是是否显示缩放组件
		mapView.setBuiltInZoomControls(true);

	}

	protected static final int MENU_NYLG = Menu.FIRST;
	protected static final int MENU_NYSF = Menu.FIRST + 1;
	protected static final int MENU_qixian = Menu.FIRST + 2;

	@Override
	public boolean onCreateOptionsMenu(Menu menu) {
		menu.add(0, MENU_NYLG, 0, "南阳理工学院").setIcon(R.drawable.nylg)
				.setAlphabeticShortcut('a');
		menu.add(0, MENU_NYSF, 0, "南阳师范学院").setIcon(R.drawable.nysf)
				.setAlphabeticShortcut('b');
		menu.add(0, MENU_qixian, 0, "杞县于镇高中").setIcon(R.drawable.yzgz)
				.setAlphabeticShortcut('c');

		return super.onCreateOptionsMenu(menu);
	}

	GeoPoint position_nylg = new GeoPoint((int) (32.973657928606265 * 1000000),
			(int) (112.54251837730408 * 1000000));
	GeoPoint position_nysf = new GeoPoint((int) (32.97835 * 1000000),
			(int) (112.48368000000005 * 1000000));
	GeoPoint position_qixian = new GeoPoint((int) (34.55 * 1000000),
			(int) (114.78 * 1000000));

	public boolean onOptionsItemSelected(MenuItem item) {

		switch (item.getItemId()) {
		case MENU_NYLG:
			mapController.animateTo(position_nylg);
			showDialog("  南阳理工学院前身是1987年创办的南阳大学;1993年由国家教委正式批准建校,定名为南阳理工学院;2004年经国家教育部批准,升格为本科院校,现已成为一所以工科为主,拥有工、管、文、理、法、医、经济、教育等多学科协调发展的普通本科高校。      ");
			break;

		case MENU_NYSF:
			mapController.animateTo(position_nysf);
			textView.setText("  南阳师范学院是河南省省属全日制普通本科高等院校,其办学历史可追溯到1907年的南阳县师范传习所,2000年3月,经国务院批准,南阳高等师范专科学校与南阳教育学院合并组建南阳师范学院,现有本科专业52个,涵盖文学、理学、工学、法学、经济学、历史学、教育学、管理学、农学、艺术学等十大学科门类。   ");
			break;
		case MENU_qixian:
			
			if (textView.getText().toString()!=null) {
				textView.setText(" 杞县于镇高中即河南省杞县第一高级中学杞县第一高级中学坐落在历史文化名镇蔡文姬故里——圉镇镇北关,创办于1952年 ");
				mapController.animateTo(position_qixian);
			}
			
			break;
		default:
			break;
		}
		return super.onOptionsItemSelected(item);
	}

	private void showDialog(String string) {
		
		new AlertDialog.Builder(Googlemap1Activity.this).setTitle("学院简介")
		.setMessage(string).setNegativeButton("确定", new DialogInterface.OnClickListener() {
			
			public void onClick(DialogInterface dialog, int which) {
				// TODO Auto-generated method stub
				
			}
		}).show();
		
	}

	protected boolean isRouteDisplayed() {
		// 判断服务器是否显示远程信息
		return false;

	}

	private void getView() {
		List<Overlay> overlays = mapView.getOverlays();
		Drawable drawable = getResources().getDrawable(R.drawable.mark);
		drawable.setBounds(-drawable.getMinimumWidth(), -drawable
				.getMinimumHeight(), 0, 0);
		myLocationOverlay = new MyLocationOverlay(this, mapView);
		myLocationOverlay.runOnFirstFix(new Runnable() {

			public void run() {
				mapView.setTraffic(true);
				mapController.setZoom(17);
				mapController.animateTo(myLocationOverlay.getMyLocation());
			}

		});
		overlays.add(myLocationOverlay);
		pOverlay =new possitionOverlay(drawable);
		overlays.add(pOverlay);
	}

	@Override
	protected void onResume() {
		System.out.println("----11--");
	//   这一下没有实现!!!
		//myLocationOverlay.enableMyLocation();	
		super.onResume();
		System.out.println("----11--");
	}

	@Override
	protected void onStop() {
		System.out.println("----11--");
	myLocationOverlay.disableMyLocation();
		super.onStop();
		System.out.println("----11--");
	}

	
}

3.接着上possitionOverlay.java

   Overlay 是一种专门在target中的选择图上的2D图像进行标记的类,可以
  覆盖在地图(Mapview)表面的图层,可以把它当做一个花板canvas,
  在重叠的overlay对想上绘制地标,和线条等标记,
  其有两个子类 ,
  ItemizedOverlay   和MyLocationOverlay
 

package com.wang;

import java.util.ArrayList;
import java.util.List;

import android.R.color;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.Point;
import android.graphics.RectF;
import android.graphics.drawable.Drawable;
import android.widget.Toast;

import com.google.android.maps.GeoPoint;
import com.google.android.maps.ItemizedOverlay;
import com.google.android.maps.MapView;
import com.google.android.maps.OverlayItem;
import com.google.android.maps.Projection;
/**
 *  Overlay 是一种专门在target中的选择图上的2D图像进行标记的类,可以
 * 覆盖在地图(Mapview)表面的图层,可以把它当做一个花板canvas,
 * 在重叠的overlay对想上绘制地标,和线条等标记,
 * 其有两个子类 ,
 * ItemizedOverlay   和MyLocationOverlay
 *
 */
public class possitionOverlay extends ItemizedOverlay<OverlayItem> {
private final int mRadius=5;
private GeoPoint position_qixian;
private GeoPoint position_nylg;
private GeoPoint position_nysf;
private List<OverlayItem> items =new ArrayList<OverlayItem>();
	public possitionOverlay(Drawable drawable) {
		super(boundCenter(drawable));
		items.add(new OverlayItem(position_nylg, "南阳理工学院", "阴天,20度"));
		items.add(new OverlayItem(position_nysf, "南阳师院", "阴天,  21度"));
		items.add(new OverlayItem(position_qixian, "于镇高中", "晴天  23度"));
	// 调用populate() 处理possitionOverlay()类之后的动作
		populate();
		
	}

	@Override
	protected OverlayItem createItem(int i) {
		// TODO Auto-generated method stub
		return items.get(i);
	}

	@Override
	public int size() {
		// TODO Auto-generated method stub
		return items.size();
	}

	@Override
	public void draw(Canvas canvas, MapView mapView, boolean shadow) {
	
		Projection projection=mapView.getProjection();
		for (int index = size()-1; index >=0; index--) {
			OverlayItem overlayItem=getItem(index);
			String title=overlayItem.getTitle();
			Point point=projection.toPixels(overlayItem.getPoint(), null);
			RectF rectF =new RectF(point.x-mRadius,point.y-mRadius,point.x+mRadius,point.y+mRadius);
			
			Paint paint=new Paint();
			paint.setColor(Color.CYAN);
			paint.setAntiAlias(true);
			paint.setFakeBoldText(true);
			
			Paint backpaint=new Paint();
			backpaint.setColor(Color.RED);
			backpaint.setAntiAlias(true);
			
			
			RectF backRectF =new RectF(point.x+40+mRadius,point.y-3*mRadius,point.x+65,point.y+2*mRadius);
			
			Paint painttext=new Paint();
			painttext.setColor(Color.BLUE);
			painttext.setTextSize(25);
			
			canvas.drawOval(backRectF, paint);
			canvas.drawRoundRect(backRectF,10,10,backpaint);
			canvas.drawText(title, point.x, point.y, painttext);
			
		}
		super.draw(canvas, mapView, shadow);
	}

	@Override
	protected boolean onTap(int index) {
		//   不知道为甚么这句话老是报错,相当的郁闷!!!!!!!
		//Toast.makeText(possitionOverlay.this, "今天天气情况是:"+items.get(index).getSnippet(), Toast.LENGTH_LONG).show();
		
		return true;
	}

}

4.亲、最重要的哦!别忘了添加权限哦

最特别的权限,一定要放在activity和application之间 的是------------->  <uses-library    android:name="com.google.android.mapss"/>

   <!--  1.map扩展库,增加地图的功能  2.连接网络权限 3. 访问粗略位置权限4.访问最佳位置权限 -->
<uses-permission  android:name="android.permission.ACCESS_COARSE_LOCATION"/>
<uses-permission  android:name="android.permission.ACCESS_FINE_LOCATION" />N
<uses-permission  android:name="android.permission.INTERNET" />
<uses-permission  android:name="com.google.android.maps"/>

5.最后小小庆幸一下看看运行结果:看到运行结果,有点想家了,如果要想地图那样可以直接一步到达想要去的地方那该多好--比如回家呵呵

 

 

 


 

posted @ 2012-06-29 17:55  程序员Android的博客  阅读(68)  评论(0编辑  收藏  举报