2011年5月22日 Android谷歌地图

两个星期前开始接触Android,学习了如何如何配置Android开发环境,简单来说,首先要在Eclipse安装ADT插件,安装完毕以后再配置sdk,当然啦,配置之前要先安装Android sdk(相当于java当中的jdk),在sdk中,可以继续的下载所需要用到的架包,比如我们要开发一个类似谷歌地图的软件,就需要下载google map的相关架包。

 

因为是第一次接触这个,为开发环境就忙活了很长事件,后来制作地图,又需要什么密钥,又忙活了很久,最后终于搞定了。

 

好久没看Android了,今天听了报告,决心接下来的时间好好的跟着队长把我们的齐鲁软件大赛的参赛作品商议和制作一下,时不待人,说做就要抓紧事件做。

 

今天我的工作主要就是通过坐标找到我想要的城市,并显示在手机模拟器中。

 

1.在main.xml文件中编写布局代码:

<?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/mainlayout" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent" > <TextView android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="@string/hello" /> <com.google.android.maps.MapView android:id="@+id/mapview" android:layout_width="fill_parent" android:layout_height="fill_parent" android:enabled="true" android:clickable="true" android:apiKey="你的谷歌密钥" /> <LinearLayout android:id="@+id/zoomview" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignBottom="@id/mapview" android:layout_centerHorizontal="true"> </LinearLayout> </RelativeLayout>

布局很简单,就是一个文本域,一个地图显示,一个缩放控制。

 

 

2.接下来是AndroidManifest.xml配置文件:

 

<?xml version="1.0" encoding="utf-8"?>

<manifest xmlns:android="http://schemas.android.com/apk/res/android"

      package="cn.zbvc.google"

      android:versionCode="1"

      android:versionName="1.0">

 

    <uses-sdk android:minSdkVersion="8" />

    <application android:icon="@drawable/icon" android:label="@string/app_name">

 

        <activity android:name=".MapMain"

                  android:label="@string/app_name">

            <intent-filter>

                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />

            </intent-filter>

        </activity>

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

    </application>

        <uses-permission android:name="android.permission.INTERNET" />

</manifest>

 

 

3.接下来是地图显示的代码:首先是Mapmain.java:

 

package cn.zbvc.google;

 

import java.util.List;

import android.os.Bundle;

import android.widget.LinearLayout;

import android.widget.ZoomControls;

 

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 MapMain extends MapActivity {

    /** Called when the activity is first created. */

private MapView mapView;

private MapController mapController;

private TextOverlay textOverlay;

private ZoomControls zoom;

private LinearLayout lin;

//设定经纬度

public Double a = 36.645 * 1E6;

public Double b = 117.014 * 1E6;

 

    @SuppressWarnings("deprecation")

public void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);

        setContentView(R.layout.main);

 

 

        //获取地图

        mapView = (MapView)findViewById(R.id.mapview);

        //获取缩放控制对象

        zoom = (ZoomControls)mapView.getZoomControls();

        //获取线性布局对象

        lin = (LinearLayout)findViewById(R.id.zoomview);

        lin.addView(zoom);

        //获取MapController

        mapController = mapView.getController();

 

        //转化坐标为地图中心

        GeoPoint point = new GeoPoint(a.intValue(),b.intValue());

        //放大层级

        mapController.setCenter(point);

        mapController.setZoom(11);

        //将地图显示区域的中心移动到显示中心

        mapController.animateTo(point);

 

 

        //使用覆盖物,初始化坐标

        textOverlay = new TextOverlay(a,b);

        //获取覆盖物

        List<Overlay> overlays = mapView.getOverlays();

        //将覆盖物添加到地图中

        overlays.add(textOverlay);

 

        //设定地图显示模式是否为卫星模式

        mapView.setSatellite(false);

    }

protected boolean isRouteDisplayed() {

// TODO Auto-generated method stub

return false;

}

}

4.接下来是一个显示标记物的类:TextOverlay.java:
package cn.zbvc.google;
import android.graphics.Canvas;
import android.graphics.Paint;
import android.graphics.Point;
import android.graphics.RectF;
import com.google.android.maps.GeoPoint;
import com.google.android.maps.MapView;
import com.google.android.maps.Overlay;
import com.google.android.maps.Projection;
/**
 * 
 * 此例说明如何在GoogleITU上添加覆盖层,并在预定的物理坐标上显示提示信息
 * @author Guest
 *
 */
public class TextOverlay extends Overlay {
private final int mRadius = 5;
private Double a;
private Double b;
//设置经纬度
public TextOverlay(Double a,Double b){
this.a = a;
this.b = b;
}
public void draw(Canvas canvas, MapView mapView, boolean shadow) {
//Projection类提供了物理坐标和屏幕坐标的转换工程,
//可以在精度和纬度表示的GeoPoint点和屏幕上的Point点进行转换
Projection pro = mapView.getProjection();
//shadow变量是用来区分绘制图层的 false表示在覆盖层上进行绘制 true表示在隐藏层上进行绘制
if(shadow == false){
       //转化坐标为地图中心
       GeoPoint geoPoint = new GeoPoint(a.intValue(),b.intValue());
       
       Point point = new Point();
       //toPixels()方法将物理坐标转换为屏幕坐标
       pro.toPixels(geoPoint,point);
       
       //绘制标记点的大小
       RectF oval = new RectF(point.x - mRadius,point.y - mRadius,point.x + mRadius,point.y + mRadius);
       
       Paint paint = new Paint();
       //设置绘制颜色
       paint.setARGB(250, 250, 0, 0);
       //开启了平滑设置 放置文字出现锯齿
       paint.setAntiAlias(true);
       paint.setFakeBoldText(true);
       //绘制圆形的标记点
       canvas.drawOval(oval, paint);
       canvas.drawText("济南市", point.x+2*mRadius,point.y,paint);
       
       
}
super.draw(canvas, mapView, shadow);
}
public boolean onTap(GeoPoint p, MapView mapView) {
//false表示覆盖层不处理点击事件 true表示已经处理了点击事件
return false;
}
}
最后测试效果如下:

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值