twitter
    Find out what I'm doing, Follow Me :)

Android Google Maps Apide Overlay Ekleme

Androidde Google Maps Apide istediğimiz yere overlay koymak isteyebiliriz. Örneğin maps.google.com da müze , şehir  gibi lokasyonlar girdiğimizde cevap olarak overlay ile gösterilirler. Buna benzer olarak istedğimiz yere overlay koyarak bu yerleri gösterme imkanımız vardır . Bunun için yeni bir proje oluşturalım.

Burada bir önceki yazıdaki işlemler yapılır. activity_main.xml de mapview elemanı  aldıgımız key ile birlikte tanımlanır.





<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="0HTP3v1tYryFVJ35Gq5k3kTrmx7SJFnt67ZTz0g"
                 />


Ayrıca AndroidManifest.xml'de gerekli izinler de eklenir.

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.mapstouchedaddoverlay"
    android:versionCode="1"
    android:versionName="1.0" >
    <uses-sdk
        android:minSdkVersion="8"
        android:targetSdkVersion="15" />
    <uses-permission android:name="android.permission.INTERNET"/> 
    <application
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/AppTheme" >
        <uses-library android:name="com.google.android.maps" />
        <activity
            android:name=".MainActivity"
            android:label="@string/title_activity_main" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>
</manifest>


Bu işlemlerden sonra MainActivity.java classımızı düzenleyelim. Burada bir handler tanımlamamız gerekir. Bu handler sayesinde haritada dokuduğumuz yerin enlem ve boylam bilgilerini alacağız. Bu enlem ve boylam bilgileriyle de GeoPoint yardımıyla bir overlay oluşturacağız.

MainActivity.java classından başka overlay için bir class oluşturmamız gerekmektedir. Bu classımızı oluştururken  Superclass için "com.google.android.maps.ItemizedOverlay" seçilir ve  Constructors from superclass checkboxı seçilir , Finish butonuna tıklanır.

LocationOverlay.java Classı

public class LocationOverlay extends ItemizedOverlay<OverlayItem> {
 
 private ArrayList<OverlayItem> mOverlays = new ArrayList<OverlayItem>(); 
 private Handler handler;

 public LocationOverlay(Drawable defaultMarker,Handler h) {
  super(boundCenterBottom(defaultMarker));
  this.handler = h;
 }


 @Override
 protected OverlayItem createItem(int arg0) {
  return mOverlays.get(arg0);
  
 }

 @Override
 public int size() {
  return mOverlays.size();
 }
 
 public void addOverlay(OverlayItem overlay){
  mOverlays.add(overlay);
  populate(); 
 }
 
 @Override
 public boolean onTap(GeoPoint p, MapView map) {  
            
     Message message = new Message();
     Bundle data = new Bundle();
     data.putInt("latitude", p.getLatitudeE6());
     data.putInt("longitude", p.getLongitudeE6());
     message.setData(data);handler.sendMessage(message);  
  return super.onTap(p, map);
 }

}





MainActivity.java Classı :

public class MainActivity extends MapActivity {
 
 private MapView mView;
 private MapController mController;
 private GeoPoint gPoint;
 Handler h = new Handler(){
 
  @Override
  public void handleMessage(Message msg) {   
   Bundle data = msg.getData();
   int latitude = data.getInt("latitude"); // Tıklanılan yerin enlemi.
   int longitude = data.getInt("longitude"); // Tıklanılan yerin boylamı
   showLocation(latitude,longitude);    
  }
  
 };

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        
        mView = (MapView) findViewById(R.id.mapView);
        mView.setBuiltInZoomControls(true);
        
        int latitude = 41987654;
     int longitude = 29320393;
        
        showLocation(latitude,longitude);        
    }
    
    private void showLocation(int latitude, int longitude){    
     
     List<Overlay> overlays = mView.getOverlays(); 
     Drawable drawable = getResources().getDrawable(R.drawable.marker);  // Koyacagımız overlay görüntüsü.
     LocationOverlay locationOverlay = new LocationOverlay(drawable,h);        
     //https://maps.google.com/maps?q=m%C3%BCze&hl=tr&ie=UTF8&ll=41.067116,29.037216&spn=0.277483,0.676346&sll=40.27081,28.567321&sspn=0.561627,1.352692&t=w&hq=m%C3%BCze&fll=41.166437,29.061935&fspn=0.277063,0.676346&z=11
     
     gPoint = new GeoPoint(latitude, longitude);
     
     mController = mView.getController();
     mController.setZoom(10);
     mController.animateTo(gPoint);        
       
     OverlayItem overlayItem = new OverlayItem(gPoint, "Item", "Item");
     locationOverlay.addOverlay(overlayItem);
     overlays.add(locationOverlay);
     
     mView.invalidate();
     
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        getMenuInflater().inflate(R.menu.activity_main, menu);
        return false;
    }

 @Override
 protected boolean isRouteDisplayed() {
  // TODO Auto-generated method stub
  return false;
 } 
}



Projemizi çalıştıralım :















0 yorum:

Yorum Gönder