2008年2月26日 星期二

MapActivity in Android 3 - city menu

We apply city menu in Taiwan for app. You can choose city to position the map. "P" for Position."G" for focusing in city menu.

加入各縣市表單,你可以更進一步地定位Google map。

1. mapdemo.java:再將上一篇的程式碼主要加上籃色部份,其他部份亦有加上小部份修改,P為定位、G為到城市選單。


package com.test.demo;

import com.google.android.maps.MapActivity;
import android.os.Bundle;
import android.view.KeyEvent;
import android.widget.ArrayAdapter;
import android.widget.Spinner;
import com.google.android.maps.MapController;
import com.google.android.maps.MapView;
import com.google.android.maps.Point;

public class mapdemo extends MapActivity{
/** Called when the activity is first created. */
public static final int change = 3000;
private MapView mapView;
private MapController mapConrtoller;
private Spinner s1;

@Override
public void onCreate(Bundle icicle) {
super.onCreate(icicle);
setContentView(R.layout.main);

s1 = (Spinner) findViewById(R.id.spinner1);
Spinner s1 = (Spinner) findViewById(R.id.spinner1);
ArrayAdapter adapter = ArrayAdapter.createFromResource(
this, R.array.city, android.R.layout.simple_spinner_item);
adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
s1.setAdapter(adapter);

mapView =(MapView) findViewById(R.id.my_map);
mapConrtoller = mapView.getController();
mapConrtoller.zoomTo(17);
updateView();
}

public boolean onKeyDown(int keyCode, KeyEvent event) {

if (keyCode == KeyEvent.KEYCODE_I) {
mapView.requestFocus();
// zoom in
mapView.getController().zoomTo(mapView.getZoomLevel() + 1);
return true;
} else if (keyCode == KeyEvent.KEYCODE_P) {
// position
Double lat=0.0;
Double lng=0.0;
if(s1.getSelectedItemIndex()==0){
lat = 25.08421662*1E6;
lng = 121.5588632*1E6;
}else if(s1.getSelectedItemIndex()==1){
lat = 25.156109*1E6;
lng = 121.695457*1E6;
}else if(s1.getSelectedItemIndex()==2){
lat = 25.02723286*1E6;
lng = 121.4777282*1E6;
}else if(s1.getSelectedItemIndex()==3){
lat = 24.766944444*1E6;
lng = 121.758333333*1E6;
}else if(s1.getSelectedItemIndex()==4){
lat = 24.7952904064701*1E6;
lng = 121.005980402031*1E6;
}else if(s1.getSelectedItemIndex()==5){
lat = 25.01049145*1E6;
lng = 121.2988981*1E6;
}else if(s1.getSelectedItemIndex()==6){
lat = 24.6929396881103*1E6;
lng = 120.916988073054*1E6;
}else if(s1.getSelectedItemIndex()==7){
lat = 24.165632*1E6;
lng = 120.640234*1E6;
}else if(s1.getSelectedItemIndex()==8){
lat = 24.085467449249*1E6;
lng = 120.53489812506*1E6;
}else if(s1.getSelectedItemIndex()==9){
lat = 23.831933886322*1E6;
lng = 120.71674349869*1E6;
}else if(s1.getSelectedItemIndex()==10){
lat = 23.4670607206971*1E6;
lng = 120.424347942069*1E6;
}else if(s1.getSelectedItemIndex()==11){
lat = 23.68080782*1E6;
lng = 120.4857101*1E6;
}else if(s1.getSelectedItemIndex()==12){
lat = 23.015307619667*1E6;
lng = 120.19802892001*1E6;
}else if(s1.getSelectedItemIndex()==13){
lat = 22.6516357159836*1E6;
lng = 120.305947184541*1E6;
} else if(s1.getSelectedItemIndex()==14){
lat = 22.568397*1E6;
lng = 120.539828*1E6;
} else if(s1.getSelectedItemIndex()==15){
lat = 22.736944444*1E6;
lng = 121.122777778*1E6;
}else if(s1.getSelectedItemIndex()==16){
lat = 23.973333333*1E6;
lng = 121.588055556*1E6;
}
Point point = new Point(lat.intValue(), lng.intValue());
mapConrtoller.centerMapTo(point, false);
mapView.requestFocus();
return true;
}else if (keyCode == KeyEvent.KEYCODE_G) {
// zoom out
s1.requestFocus();
return true;
}else if (keyCode == KeyEvent.KEYCODE_O) {
mapView.requestFocus();
// zoom out
mapView.getController().zoomTo(mapView.getZoomLevel() - 1);
return true;
} else if (keyCode == KeyEvent.KEYCODE_S) {
mapView.requestFocus();
// Satellite,衛星地图
if(!mapView.isSatellite()){
mapView.toggleSatellite();
}
return true;
} else if (keyCode == KeyEvent.KEYCODE_M) {
mapView.requestFocus();
// traffic,路况
if(mapView.isSatellite()){
mapView.toggleSatellite();
}
return true;
} else if (keyCode == KeyEvent.KEYCODE_DPAD_UP) {

mapView.requestFocus();
Double lat = mapView.getMapCenter().getLatitudeE6()/1.0;
Double lng = mapView.getMapCenter().getLongitudeE6()/1.0;
lat=lat+change;
Point point = new Point(lat.intValue(),lng.intValue());
mapConrtoller.animateTo(point);
return true;
} else if (keyCode == KeyEvent.KEYCODE_DPAD_DOWN) {
mapView.requestFocus();
Double lat = mapView.getMapCenter().getLatitudeE6()/1.0;
Double lng = mapView.getMapCenter().getLongitudeE6()/1.0;
lat=lat-change;
Point point = new Point(lat.intValue(),lng.intValue());
mapConrtoller.animateTo(point);
return true;

} else if (keyCode == KeyEvent.KEYCODE_DPAD_LEFT) {
mapView.requestFocus();
Double lat = mapView.getMapCenter().getLatitudeE6()/1.0;
Double lng = mapView.getMapCenter().getLongitudeE6()/1.0;
lng=lng-change;
Point point = new Point(lat.intValue(),lng.intValue());
mapConrtoller.animateTo(point);
return true;
} else if (keyCode == KeyEvent.KEYCODE_DPAD_RIGHT) {
mapView.requestFocus();
Double lat = mapView.getMapCenter().getLatitudeE6()/1.0;
Double lng = mapView.getMapCenter().getLongitudeE6()/1.0;
lng=lng+change;
Point point = new Point(lat.intValue(),lng.intValue());
mapConrtoller.animateTo(point);
return true;
}
return false;
}

private void updateView(){
Double lat = 25.025708*1E6;
Double lng = 121.526403*1E6;
Point point = new Point(lat.intValue(), lng.intValue());
mapConrtoller.centerMapTo(point, false);
}

}


2. arrays.xml:在目錄res下的values目錄下建立一arrays.xml,是要存放城市表單內容。

<?xml version="1.0" encoding="utf-8"?>
<resources>
<array name="city">
<item>台北市</item>
<item>基隆市</item>
<item>台北縣</item>
<item>宜蘭縣</item>
<item>新竹市</item>
<item>桃園市</item>
<item>苗栗縣</item>
<item>台中市</item>
<item>彰化縣</item>
<item>南投縣</item>
<item>嘉義市</item>
<item>雲林縣</item>
<item>臺南市</item>
<item>高雄市</item>
<item>屏東縣</item>
<item>臺東縣</item>
<item>花蓮縣</item>
</array>
</resources>

3. 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"
>
<view id="@+id/my_map" class="com.google.android.maps.MapView"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:layout_weight="1" /
>

<Spinner id="@+id/spinner1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:drawSelectorOnTop="true"
/
>
</LinearLayout>


沒有留言: