제가 하려는ㄱㄴ,
구글 맵을 띄우고, 롱클릭을 누르면 미리 정의된 포인트로 오버레이 시켜주는 것입니다.
아래는 LogCat 메세지입니다.
02-08 08:29:25.834: ERROR/AndroidRuntime(604): Caused by: java.lang.ClassNotFoundException: com.google.android.GoogleMapM in loader dalvik.system.PathClassLoader@43b7d6c0
아래는 JAVA 소스입니다.
package com.google.android;
import android.os.Bundle;
import android.view.View;
import java.util.List;
import com.google.android.maps.MapActivity;
import com.google.android.maps.MapView;
import com.google.android.maps.Overlay;
import com.google.android.maps.OverlayItem;
import com.google.android.maps.GeoPoint;
import android.graphics.drawable.Drawable;
import com.google.android.HelloItemizedOverlayc;
public class GoogleMapM extends MapActivity {
MapView v = (MapView)findViewById(R.id.map_view);
//Button long_press = (Button)findViewById(R.id.long_press);
MapView v1 = (MapView)findViewById(R.id.long_press);
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.events);
setContentView(R.layout.main);
v.setBuiltInZoomControls(true);
final List<Overlay> mapOverlays = v.getOverlays();
Drawable drawable = this.getResources().getDrawable(R.drawable.icon);
final HelloItemizedOverlayc itemizedoverlay = new HelloItemizedOverlayc(drawable);
GeoPoint point = new GeoPoint(19240000,-99120000);
final OverlayItem overlayitem = new OverlayItem(point, "Hola, Mundo!", "I'm in Mexico City!");
GeoPoint point2 = new GeoPoint(35410000, 139460000);
final OverlayItem overlayitem2 = new OverlayItem(point2, "Sekai, konichiwa!", "I'm in Japan!");
v1.setOnLongClickListener(new View.OnLongClickListener() {
public boolean onLongClick(View v) {
itemizedoverlay.addOverlay(overlayitem);
itemizedoverlay.addOverlay(overlayitem2);
mapOverlays.add(itemizedoverlay);
return true;
}
});
}
protected boolean isRouteDisplayed(){
return false;
}
}
매니페스트
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.google.android"
android:versionCode="1"
android:versionName="1.0">
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>
<application android:icon="@drawable/icon" android:label="@string/app_name" android:debuggable="true">
<activity android:name=".GoogleMapM"
android:label="@string/app_name"
android:theme="@android:style/Theme.NoTitleBar">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
<activity android:name="Events" />
<uses-library android:name="com.google.android.maps"/>
<uses-sdk android:minSdkVersion="7" />
</manifest>
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">
<com.google.android.maps.MapView
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/map_view"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:enabled="true"
android:focusable="true"
android:clickable="true"
android:apiKey="0JMls9YCx8qIecPqcoyIR4FwFpM0Q9eYif4YuMA"
/>
</LinearLayout>
res/layout/events.xml
<ScrollView
android:id="@+id/events_screen"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
xmlns:android="http://schemas.android.com/apk/res/android">
<LinearLayout
android:id="@+id/long_press"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="vertical"
android:longClickable="true"
>
</LinearLayout>
</ScrollView>
소스는 이렇습니다.
구글맵에 오버레이하는 소스는 제대로 실행이 되었었는데 롱클릭 추가하려니 에러네요.
마커를 띄우는 부분은 ItemizedOverlay를 상속한 클래스에서 처리를 해줘야 할것 같습니다.
기본 기능은 ItemizedOverlay에서 구현을 해놓으시고 이소스에서
itemizedoverlay.addOverlay(overlayitem); itemizedoverlay.addOverlay(overlayitem2);
이부분은 ItemizedOverlay를 상속한 클래스에서 처리해주시고 mapOverlays.add(itemizedoverlay);부분만
저 클래스에서 처리를 해주시면 될것같네요 원래 마커 띄우는건 맵액티비티가 하는게 아니고 오버레이 클래스가 하는거니깐요..
근데 기능자체를 저기서 구현하셨네요..
setContentView(R.layout.main);
이런식으로 2번 호출하지는 않습니다.