Một ví dụ đơn giản nhưng khá căn bản về Map

Thảo luận trong 'Điện thoại, viễn thông' bắt đầu bởi g08ct, 18/9/12.

  1. g08ct New Member

    g08ct

    Tham gia ngày:
    15/8/12
    Bài viết:
    1,116
    Đã được thích:
    55
    Điểm thành tích:
    0
    Giới tính:
    Nam



    Đây là một bài tập mình làm về Map khi học Android, nó bao gồm các chức năng hiển thị Map, phóng to, thu nhỏ, xử lý khi người dùng nhấn vào một điểm thì hiện lên địa chỉ cụ thể.
    Đầu tiên tạo một project MyMap, trong main.xml ta viết như sau:
    ?

    <?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">

    <com.google.android.maps.MapView
    android:id="@+id/map"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:enabled="true"
    android:clickable="true"
    android:apiKey="Cái này là key API trên máy các bạn"
    />
    </RelativeLayout>





    Trong phần MyMapActivity chúng ta viết như sau:
    Mã:
    package com.app.mymap;  import java.util.List;  import android.os.Bundle;  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 MyMapActivity extends MapActivity { 	private MapView map; 	MapController mc;     GeoPoint p;      /** Called when the activity is first created. */     @Override     public void onCreate(Bundle savedInstanceState) {         super.onCreate(savedInstanceState);         setContentView(R.layout.main);         map = (MapView) findViewById(R.id.map);         map.setBuiltInZoomControls(true);         mc = map.getController();         double coordinates[] = {10.763161, 106.675606};          p = new GeoPoint(             (int) (coordinates[0] * 1E6),              (int) (coordinates[1] * 1E6));           mc.animateTo(p);         mc.setZoom(5);          //map.invalidate();         MyOverlay mapOverlay = new MyOverlay(this, p);          List<Overlay> listOfOverlays = map.getOverlays();          listOfOverlays.clear();          listOfOverlays.add(mapOverlay);                     map.invalidate();      }  	@Override 	protected boolean isRouteDisplayed() { 		// TODO Auto-generated method stub 		return false; 	} }
    Phần xử lý hiển thị địa chỉ dựa vào kinh độ vĩ độ chúng ta viết một lớp riêng là lớp MyOverlay kế thừa từ com.google.android.maps.Overlay.

    Mã:
    package com.app.mymap;  import java.io.IOException; import java.util.List; import java.util.Locale;  import com.google.android.maps.GeoPoint; import com.google.android.maps.MapView;  import android.content.Context; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.graphics.Canvas; import android.graphics.Point; import android.location.Address; import android.location.Geocoder; import android.view.MotionEvent; import android.widget.Toast;  public class MyOverlay extends com.google.android.maps.Overlay { 	Context context;    	GeoPoint p; 	    	   public MyOverlay(Context pcontext,GeoPoint pp){  		     context=pcontext;  		    p=pp;  	   }    	    	@Override 	public boolean onTouchEvent(MotionEvent event, MapView mapView) { 		 //---when user lifts his finger---          if (event.getAction() == 1) {                              GeoPoint p = mapView.getProjection().fromPixels(                  (int) event.getX(),                  (int) event.getY());              Toast.makeText(context,                       p.getLatitudeE6() / 1E6 + "," +                       p.getLongitudeE6() /1E6 ,                       Toast.LENGTH_SHORT).show();               Geocoder geoCoder = new Geocoder(              		context, Locale.getDefault());                     try {                      List<Address> addresses =                      	geoCoder.getFromLocation(                          p.getLatitudeE6()  / 1E6,                           p.getLongitudeE6() / 1E6, 1);                         String add = "";                      if (addresses.size() > 0)                       {                          for (int i=0;                          		i<addresses.get(0).getMaxAddressLineIndex();                                i++)                             add +=                             addresses.get(0).getAddressLine(i) + "\n";                      }                         Toast.makeText(context, add,                      		Toast.LENGTH_SHORT).show();                  }                  catch (IOException e) {                                      e.printStackTrace();                  }                            return true;          }          else                              return false;      }  	 }
    Như vậy là đã xong ví dụ, bình thường khi hiển thị Map sẽ mặc định hiển thị nước Mỹ nhưng ở đây mình chọn một tọa độ hiển thị tại Việt Nam, và setZoom(5) nó hiện vừa tới bản đồ nước ta trông khá quen thuộc, hihi. Cũng trong bài này có yêu cầu đánh dấu một địa chỉ cụ thể mình đã làm nhưng chưa biết xử lý nền ảnh trong suốt do đó khi hiển thị nó che mất thông tin trên Map, khi nào làm được mình sẽ bổ sung (cũng chỉ một đoạn code ngắn thôi). Các bạn cứ thực hành thử có gì thắc mắc cùng nhau trao đổi vì mình cũng mới tìm hiểu Android nên cũng chưa biết nhiều lắm. Nói chung là gà cũng cần học hỏi nhiều từ các bạn nữa. Hehe
    À thêm một cái nữa là khi làm ví dụ này bạn phải thêm vào một số cái trong AndroidMainnifest như sau:
    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
    <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
    <uses-permission android:name="android.permission.INTERNET" />
    và <uses-library android:name="com.google.android.maps" /> (riêng cái này nằm trong application)
     
    Đang tải...
  2. Vũ Duy Hoàng New Member

    Vũ Duy Hoàng

    Tham gia ngày:
    5/4/13
    Bài viết:
    9
    Đã được thích:
    0
    Điểm thành tích:
    0
    Giới tính:
    Nam
    anh ơi bgio không sử dụng được google api v1 nữa vậy sử dụng api v2 cho ví dụ này được k anh?
     
  3. bka15 New Member

    bka15

    Tham gia ngày:
    18/7/12
    Bài viết:
    128
    Đã được thích:
    105
    Điểm thành tích:
    0

Chia sẻ trang này