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