免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 3370 | 回复: 0
打印 上一主题 下一主题

个人android之mapview作品-(1)根据输入城市名动态加载google地图 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2008-08-15 14:38 |只看该作者 |倒序浏览
(1)SendCityName.java:

package com.google.android.citygmapview;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
public class SendCityName extends Activity {
protected static final int REQUEST_SEND_DATA = 0;
/** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle icicle) {
        super.onCreate(icicle);
        setContentView(R.layout.main);
        getAndSendCityName();
    }
   
    public void getAndSendCityName()
    {
       Button btn = (Button)findViewById(R.id.confirm);
       btn.setOnClickListener(new View.OnClickListener()
        {
           public void onClick(View v)
           {
            EditText edt=(EditText)SendCityName.this.findViewById(R.id.edt);
            
            Intent intent = new Intent();
               intent.setClass(SendCityName.this, ShowGmapView.class);
               if(edt.getText().length()!= 0) {
                String data = edt.getText().toString();
                String name="data";
                intent.putExtra(name, data);                     
                startSubActivity(intent,REQUEST_SEND_DATA);
               }
           }
       });      
         
   }
}

说明:
if(edt.getText().length()!= 0)用来处理用户输入为空的情况,为空时数据不会传递到另外一个activity中去,节省资源。
图示:


(2)ShowGmapView.java:

package com.google.android.citygmapview;
import java.io.IOException;
import java.util.Locale;
import com.google.android.location.GmmGeocoder;
import com.google.android.maps.MapActivity;
import com.google.android.maps.MapController;
import com.google.android.maps.MapView;
import com.google.android.maps.Point;
import android.location.Address;
import android.os.Bundle;
import android.util.Log;
import android.view.KeyEvent;
import android.view.Menu;
import android.view.Menu.Item;
public class ShowGmapView extends MapActivity {
    private static final int EXIT_ID = 0;
    private MapView myMapView;
    private Address[] maddrs;
protected void onCreate(Bundle icicle) {
       super.onCreate(icicle);
       setContentView(R.layout.gmap_view);
       Bundle extras = getIntent().getExtras();   
       String name="data";
       if(extras != null) {
        String data1 = extras.getString(name);
        GmmGeocoder mgc = new GmmGeocoder(Locale.getDefault());
           try {
            maddrs = mgc.query(data1, GmmGeocoder.QUERY_TYPE_LOCATION, 0, 0, 180.0, 360.0);
               if (null!=maddrs && maddrs.length > 0) {
                Log.d("CountryName: ", maddrs[0].getCountryName());
                maddrs[0].getLatitude();
               } else {
                setResult(RESULT_OK, null, extras);
                finish();
               }
               
        } catch (IOException e1) {
       // TODO Auto-generated catch block
       e1.printStackTrace();
        }
        
           myMapView = new MapView(this);   
           
           if(null!=maddrs && maddrs.length > 0) {
            Point p = new Point((int) (maddrs[0].getLatitude() * 1000000),   
              (int) (maddrs[0].getLongitude() * 1000000));   
            /** 地图控制器 */
            MapController mc = myMapView.getController();
            mc.animateTo(p);
            /** 21是最zoom in的一级,一共是1-21级 */
            mc.zoomTo(21);   
            setContentView(myMapView);   
            /** 切换到卫星地图 */
            myMapView.toggleSatellite();
           }
           setResult(RESULT_OK, null, extras);
       }
   }
   
   public boolean onKeyDown(int keyCode, KeyEvent event) {   
       if (keyCode == KeyEvent.KEYCODE_I) {   
           /** zoom in */
           myMapView.getController().zoomTo(myMapView.getZoomLevel() + 1);   
           return true;   
       } else if (keyCode == KeyEvent.KEYCODE_O) {   
           
        /** zoom out */  
           myMapView.getController().zoomTo(myMapView.getZoomLevel() - 1);   
           return true;   
       } else if (keyCode == KeyEvent.KEYCODE_S) {  
        
         /** 卫星地图 */
           myMapView.toggleSatellite();   
           return true;   
       } else if (keyCode == KeyEvent.KEYCODE_T) {   
           /** traffic,路况 */
           myMapView.toggleTraffic();   
           return true;   
       }   
       return false;   
   }
   
   @Override   
   public boolean onCreateOptionsMenu(Menu menu) {   
       super.onCreateOptionsMenu(menu);   
       menu.add(0, EXIT_ID, R.string.exit_gmap);   
       return true;   
   }   
      
   @Override   
   public boolean onMenuItemSelected(int featureId, Item item) {   
       super.onMenuItemSelected(featureId, item);   
       switch(item.getId()) {   
       case EXIT_ID:   
           finish();   
           break;   
       }   
       return true;   
   }   
}

说明:
在开始设计时采用了Geocoder这个类,但似乎通过它获取的经纬度为空值,所以最后采取了GmmGeocoder,并能达到目的。
图示:





(3)main.xml:
     

         
(4)gmap_view.xml:
(5)strings.xml:
    city gmap view
    confirm
    Exit google map

(6)AndroidManifest.xml:
   
        
            
               
               
            
        
        
   




以下是整个代码的压缩包:


文件:
CityGmapView.rar
大小:
38KB
下载:
下载

以上代码可以随意转载和copy,但请转载时加上转载的地址,谢谢大家,毕竟自己做这些也算是奉献自己的休息时间。有问题的朋友可以跟我交流,qq:286505491,Email:
zxgang_andy@sina.com




本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u1/43206/showart_1131452.html
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP