如何添加覆盖映射在Android? [英] How can add overlay to map on android?
本文介绍了如何添加覆盖映射在Android?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我试图应用这些codeS就是在这个链接。但我发现了错误,如NullPointerException异常。
我用不成,这里是我的功能就是在我BaseFragment
公共无效createMapViewForHaritaFragment(IlanList名单)
{
IlanList gelenListe;
gelenListe =清单; 如果(gelenListe!= NULL)
{
MainActivity父= getParentActivity();
mMapViewContainer = parent.getmMapViewContainer();
mMapView = parent.getmMapView(); / ** /
MC = mMapView.getController(); LM的LocationManager =(的LocationManager)parent.getSystemService(parent.getApplicationContext()LOCATION_SERVICE);
地点= lm.getLastKnownLocation(LocationManager.NETWORK_PROVIDER);
。串经度=将String.valueOf(location.getLongitude())子(0,9);
串纬度=将String.valueOf(location.getLatitude())子(0,9)。
字符串的坐标[] = {纬度,经度};
双纬度= Double.parseDouble(坐标[0]);
双经度= Double.parseDouble(坐标[1]); P =新的GeoPoint(
(INT)(LAT * 1E6)
(INT)(LNG * 1E6)); mc.animateTo(P);
mMapView.setBuiltInZoomControls(真); mMapView.setSatellite(假);
mc.setZoom(16);
/ *地图
公共查看mMapViewContainer;
公共图形页面mMapView;
公共MapController MC;
公众的GeoPoint磷; 公开名单<&叠加GT; mapOverlays;
公众可绘制可绘制;
公共MapItemizedOverlay itemizedOverlay;
HARITA * / 绘制= this.getResources()getDrawable(R.drawable.map_kirmizi_png)。
itemizedOverlay =新MapItemizedOverlay(绘制,parent.getApplicationContext(),30); //文字大小:30 GeoPoint的gPointMe =新的GeoPoint(41099932,29002657);
OverlayItem overlayItem =新OverlayItem(gPointMe,我,这是我的位置);
itemizedOverlay.addOverlay(overlayItem); mapOverlays.add(itemizedOverlay); mMapView.setBuiltInZoomControls(真); //移动地图上,我的立场
mc.animateTo(gPointMe); mMapView.invalidate();
}}
我想,我得到的错误处理此code:
保护OverlayItem createItem中(int i)以
{
返回mOverlays.get(ⅰ);
}
这是我的LogCat中。
12月12日至21日:35:53.443:E / AndroidRuntime(19782):致命异常:主要
12月12日至21日:35:53.443:E / AndroidRuntime(19782):显示java.lang.NullPointerException
12月12日至21日:35:53.443:E / AndroidRuntime(19782):在com.mert.fragment.BaseFragment.createMapViewForHaritaFragment(BaseFragment.java:274)
12月12日至21日:35:53.443:E / AndroidRuntime(19782):在com.mert.fragment.impl.EtrafimdaHaritaFragment$MyHandler.handleMessage(EtrafimdaHaritaFragment.java:154)
12月12日至21日:35:53.443:E / AndroidRuntime(19782):在android.os.Handler.dispatchMessage(Handler.java:99)
12月12日至21日:35:53.443:E / AndroidRuntime(19782):在android.os.Looper.loop(Looper.java:143)
12月12日至21日:35:53.443:E / AndroidRuntime(19782):在android.app.ActivityThread.main(ActivityThread.java:4277)
12月12日至21日:35:53.443:E / AndroidRuntime(19782):在java.lang.reflect.Method.invokeNative(本机方法)
12月12日至21日:35:53.443:E / AndroidRuntime(19782):在java.lang.reflect.Method.invoke(Method.java:507)
12月12日至21日:35:53.443:E / AndroidRuntime(19782):在com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:839)
12月12日至21日:35:53.443:E / AndroidRuntime(19782):在com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597)
12月12日至21日:35:53.443:E / AndroidRuntime(19782):在dalvik.system.NativeStart.main(本机方法)
感谢您的帮助。
解决方案
AddItemized覆盖类: 公共类AddItemizedOverlay扩展ItemizedOverlay< OverlayItem> { 私人的ArrayList< OverlayItem> mapOverlays =新的ArrayList< OverlayItem>(); 私人上下文的背景下; 公共AddItemizedOverlay(可绘制defaultMarker){
超(boundCenterBottom(defaultMarker));
} 公共AddItemizedOverlay(可绘制defaultMarker,上下文的背景下){
这个(defaultMarker);
this.context =背景;
} @覆盖
保护OverlayItem createItem中(int i)以{
返回mapOverlays.get(ⅰ);
} @覆盖
公众诠释大小(){
返回mapOverlays.size();
} @覆盖
保护布尔中的onTap(INT指数){
Log.e(点击,点击演出);
返回true;
} 公共无效addOverlay(OverlayItem叠加){
mapOverlays.add(覆盖);
this.populate();
} }
使用此code在你的活动
清单<&叠加GT; mapOverlays = mv.getOverlays();
可绘制可绘制= this.getResources()getDrawable(R.drawable.drawable)。
AddItemizedOverlay itemizedOverlay =
新AddItemizedOverlay(绘制,这一点);
OverlayItem overlayitem =新OverlayItem(GP,你好,我在这里);
itemizedOverlay.addOverlay(overlayitem);
mapOverlays.add(itemizedOverlay);
公共无效createMapViewForHaritaFragment(IlanList名单)
{
IlanList gelenListe;
gelenListe =清单; 如果(gelenListe!= NULL)
{
MainActivity父= getParentActivity();
mMapViewContainer = parent.getmMapViewContainer();
mMapView = parent.getmMapView(); / ** /
MC = mMapView.getController(); LM的LocationManager =(的LocationManager)parent.getSystemService(parent.getApplicationContext()LOCATION_SERVICE);
地点= lm.getLastKnownLocation(LocationManager.NETWORK_PROVIDER);
。串经度=将String.valueOf(location.getLongitude())子(0,9);
串纬度=将String.valueOf(location.getLatitude())子(0,9)。
字符串的坐标[] = {纬度,经度};
双纬度= Double.parseDouble(坐标[0]);
双经度= Double.parseDouble(坐标[1]); P =新的GeoPoint(
(INT)(LAT * 1E6)
(INT)(LNG * 1E6)); MC = mMapView.getController();
mc.setCenter(P);
mc.setZoom(16); 清单<&叠加GT; mapOverlays = mv.getOverlays();
可绘制可绘制= this.getResources()getDrawable(R.drawable.pin)。
AddItemizedOverlay itemizedOverlay =新AddItemizedOverlay(绘制,
这个);
OverlayItem overlayitem =新OverlayItem(P,你好,我在这里);
itemizedOverlay.addOverlay(overlayitem);
mapOverlays.add(itemizedOverlay); / * mc.animateTo(对);
mMapView.setBuiltInZoomControls(真); mMapView.setSatellite(假);
mc.setZoom(16); * /
/ *地图
公共查看mMapViewContainer;
公共图形页面mMapView;
公共MapController MC;
公众的GeoPoint磷; 公开名单<&叠加GT; mapOverlays;
公众可绘制可绘制;
公共MapItemizedOverlay itemizedOverlay;
HARITA * / / *绘制= this.getResources()getDrawable(R.drawable.map_kirmizi_png)。
itemizedOverlay =新MapItemizedOverlay(绘制,parent.getApplicationContext(),30); //文字大小:30 GeoPoint的gPointMe =新的GeoPoint(41099932,29002657);
OverlayItem overlayItem =新OverlayItem(gPointMe,我,这是我的位置);
itemizedOverlay.addOverlay(overlayItem); mapOverlays.add(itemizedOverlay); mMapView.setBuiltInZoomControls(真); //移动地图上,我的立场
mc.animateTo(gPointMe); mMapView.invalidate(); * /
}}
i tried to apply these codes that is in this link. But I'm getting error like NullPointerException.
I use fragmentation and here is my function that is in my BaseFragment
public void createMapViewForHaritaFragment(IlanList list)
{
IlanList gelenListe;
gelenListe=list;
if(gelenListe!=null)
{
MainActivity parent = getParentActivity();
mMapViewContainer = parent.getmMapViewContainer();
mMapView = parent.getmMapView();
/**/
mc = mMapView.getController();
LocationManager lm = (LocationManager) parent.getSystemService(parent.getApplicationContext().LOCATION_SERVICE);
Location location = lm.getLastKnownLocation(LocationManager.NETWORK_PROVIDER);
String longitude = String.valueOf(location.getLongitude()).substring(0, 9);
String latitude = String.valueOf(location.getLatitude()).substring(0, 9);
String coordinates[] = {latitude,longitude};
double lat = Double.parseDouble(coordinates[0]);
double lng = Double.parseDouble(coordinates[1]);
p = new GeoPoint(
(int) (lat * 1E6),
(int) (lng * 1E6));
mc.animateTo(p);
mMapView.setBuiltInZoomControls(true);
mMapView.setSatellite(false);
mc.setZoom(16);
/*Harita
public View mMapViewContainer;
public MapView mMapView;
public MapController mc;
public GeoPoint p;
public List<Overlay> mapOverlays;
public Drawable drawable;
public MapItemizedOverlay itemizedOverlay;
Harita*/
drawable = this.getResources().getDrawable(R.drawable.map_kirmizi_png);
itemizedOverlay = new MapItemizedOverlay(drawable, parent.getApplicationContext(), 30);//text size: 30
GeoPoint gPointMe = new GeoPoint(41099932,29002657);
OverlayItem overlayItem = new OverlayItem(gPointMe, "Me", "This is my location");
itemizedOverlay.addOverlay(overlayItem);
mapOverlays.add(itemizedOverlay);
mMapView.setBuiltInZoomControls(true);
//move map over to my position
mc.animateTo(gPointMe);
mMapView.invalidate();
}
}
And I think, I'm getting error while processing this code :
protected OverlayItem createItem(int i)
{
return mOverlays.get(i);
}
These are my LogCat.
12-21 12:35:53.443: E/AndroidRuntime(19782): FATAL EXCEPTION: main
12-21 12:35:53.443: E/AndroidRuntime(19782): java.lang.NullPointerException
12-21 12:35:53.443: E/AndroidRuntime(19782): at com.mert.fragment.BaseFragment.createMapViewForHaritaFragment(BaseFragment.java:274)
12-21 12:35:53.443: E/AndroidRuntime(19782): at com.mert.fragment.impl.EtrafimdaHaritaFragment$MyHandler.handleMessage(EtrafimdaHaritaFragment.java:154)
12-21 12:35:53.443: E/AndroidRuntime(19782): at android.os.Handler.dispatchMessage(Handler.java:99)
12-21 12:35:53.443: E/AndroidRuntime(19782): at android.os.Looper.loop(Looper.java:143)
12-21 12:35:53.443: E/AndroidRuntime(19782): at android.app.ActivityThread.main(ActivityThread.java:4277)
12-21 12:35:53.443: E/AndroidRuntime(19782): at java.lang.reflect.Method.invokeNative(Native Method)
12-21 12:35:53.443: E/AndroidRuntime(19782): at java.lang.reflect.Method.invoke(Method.java:507)
12-21 12:35:53.443: E/AndroidRuntime(19782): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839)
12-21 12:35:53.443: E/AndroidRuntime(19782): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597)
12-21 12:35:53.443: E/AndroidRuntime(19782): at dalvik.system.NativeStart.main(Native Method)
Thanks for your help.
解决方案
AddItemized Overlay class:
public class AddItemizedOverlay extends ItemizedOverlay<OverlayItem> {
private ArrayList<OverlayItem> mapOverlays = new ArrayList<OverlayItem>();
private Context context;
public AddItemizedOverlay(Drawable defaultMarker) {
super(boundCenterBottom(defaultMarker));
}
public AddItemizedOverlay(Drawable defaultMarker, Context context) {
this(defaultMarker);
this.context = context;
}
@Override
protected OverlayItem createItem(int i) {
return mapOverlays.get(i);
}
@Override
public int size() {
return mapOverlays.size();
}
@Override
protected boolean onTap(int index) {
Log.e("Tap", "Tap Performed");
return true;
}
public void addOverlay(OverlayItem overlay) {
mapOverlays.add(overlay);
this.populate();
}
}
Use this code in your Activity
List<Overlay> mapOverlays = mv.getOverlays();
Drawable drawable = this.getResources().getDrawable(R.drawable.drawable);
AddItemizedOverlay itemizedOverlay =
new AddItemizedOverlay(drawable, this);
OverlayItem overlayitem = new OverlayItem(gp, "Hello", "I am here");
itemizedOverlay.addOverlay(overlayitem);
mapOverlays.add(itemizedOverlay);
public void createMapViewForHaritaFragment(IlanList list)
{
IlanList gelenListe;
gelenListe=list;
if(gelenListe!=null)
{
MainActivity parent = getParentActivity();
mMapViewContainer = parent.getmMapViewContainer();
mMapView = parent.getmMapView();
/**/
mc = mMapView.getController();
LocationManager lm = (LocationManager) parent.getSystemService(parent.getApplicationContext().LOCATION_SERVICE);
Location location = lm.getLastKnownLocation(LocationManager.NETWORK_PROVIDER);
String longitude = String.valueOf(location.getLongitude()).substring(0, 9);
String latitude = String.valueOf(location.getLatitude()).substring(0, 9);
String coordinates[] = {latitude,longitude};
double lat = Double.parseDouble(coordinates[0]);
double lng = Double.parseDouble(coordinates[1]);
p = new GeoPoint(
(int) (lat * 1E6),
(int) (lng * 1E6));
mc = mMapView.getController();
mc.setCenter(p);
mc.setZoom(16);
List<Overlay> mapOverlays = mv.getOverlays();
Drawable drawable = this.getResources().getDrawable(R.drawable.pin);
AddItemizedOverlay itemizedOverlay = new AddItemizedOverlay(drawable,
this);
OverlayItem overlayitem = new OverlayItem(p, "Hello", "I AM HERE");
itemizedOverlay.addOverlay(overlayitem);
mapOverlays.add(itemizedOverlay);
/* mc.animateTo(p);
mMapView.setBuiltInZoomControls(true);
mMapView.setSatellite(false);
mc.setZoom(16); */
/*Harita
public View mMapViewContainer;
public MapView mMapView;
public MapController mc;
public GeoPoint p;
public List<Overlay> mapOverlays;
public Drawable drawable;
public MapItemizedOverlay itemizedOverlay;
Harita*/
/* drawable = this.getResources().getDrawable(R.drawable.map_kirmizi_png);
itemizedOverlay = new MapItemizedOverlay(drawable, parent.getApplicationContext(), 30);//text size: 30
GeoPoint gPointMe = new GeoPoint(41099932,29002657);
OverlayItem overlayItem = new OverlayItem(gPointMe, "Me", "This is my location");
itemizedOverlay.addOverlay(overlayItem);
mapOverlays.add(itemizedOverlay);
mMapView.setBuiltInZoomControls(true);
//move map over to my position
mc.animateTo(gPointMe);
mMapView.invalidate(); */
}
}
这篇关于如何添加覆盖映射在Android?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文