Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/amazon-web-services/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android osm中的自定义覆盖标记_Android_Osmdroid - Fatal编程技术网

Android osm中的自定义覆盖标记

Android osm中的自定义覆盖标记,android,osmdroid,Android,Osmdroid,我正在尝试使用自定义覆盖类为OSMdroid映射创建自定义标记。我想我明白了,但它在绘图控制器上给了我一个堆栈溢出错误 这是主要活动的代码 package com.example.osmap1;import java.util.List; import org.osmdroid.util.GeoPoint; import org.osmdroid.views.MapController; import org.osmdroid.views.MapView; import org.osmdroi

我正在尝试使用自定义覆盖类为OSMdroid映射创建自定义标记。我想我明白了,但它在绘图控制器上给了我一个堆栈溢出错误

这是主要活动的代码

package com.example.osmap1;import java.util.List;

import org.osmdroid.util.GeoPoint;
import org.osmdroid.views.MapController;
import org.osmdroid.views.MapView;
import org.osmdroid.views.overlay.Overlay;

import com.example.osmap1.herramientas.MiOverlay;

import android.os.Bundle;
import android.app.Activity;
import android.view.Menu;

public class MainActivity extends Activity {
MapView map;
MapController mc;
GeoPoint gp;
List<Overlay> mOverlays;

private static MainActivity mainActivity=null;
public static MainActivity getInstance(){
    if(mainActivity == null){
        mainActivity=new MainActivity();

    }
    return mainActivity;
}

@Override
public void onCreate(Bundle savedInstanceState) {

    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    mainActivity=this;
    map=(MapView)findViewById(R.id.mapView);

    mc=map.getController();
    map.setBuiltInZoomControls(true);
    map.setMultiTouchControls(true);

    addPointToMapOverlay("43.528023","-5.672949");

}

private void addPointToMap (String latitud, String longitud){

    String coordenadas[]={latitud,longitud};
    double lat=Double.parseDouble(coordenadas[0]);
    double lng=Double.parseDouble(coordenadas[1]);
    GeoPoint gp=new GeoPoint((int)lat*1E6,(int)lng*1E6);
    mc.animateTo(gp);
    mc.setZoom(4);
    /*map.invalidate(); no funciona en osm*/
}

private void addPointToMapOverlay (String latitud, String longitud){


    String coordenadas[]={latitud,longitud};
    double lat=Double.parseDouble(coordenadas[0]);
    double lng=Double.parseDouble(coordenadas[1]);
    GeoPoint gp=new GeoPoint((int)lat*1E6,(int)lng*1E6);

    mOverlays=map.getOverlays();
    MiOverlay marker= new MiOverlay(gp);
    mOverlays.add(marker);
    mc.animateTo(gp);
    mc.setZoom(4);
    map.invalidate();
}



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

我认为问题可能是mapview.getProjection().toMapPixels(this.punto,scrnPoint),但我不确定。。。任何建议都是很好的

这是一个无限循环-我承认我不太明白你想做什么,但是draw函数递归调用自己:

@Override
public void draw(Canvas canvas, MapView mapview, boolean shadow) {

    this.draw(canvas, mapview, shadow); // This is the same method!
}
说明控制流程的结果如下:

draw()
 -> draw()
    -> draw()
    ...
    StackOverflowException

也许您的意思是
super.draw(canvas,mapview,shadow)

是的,这就是循环,但是覆盖类上的draw构造函数不接受super.draw(canvas,mapview,shadow),而是调用super.drawAt(canvas,Drawable,x,y,shadow)。。。也许这比调用位图要好。我是从另一个使用谷歌地图的实践中得出这个结论的,这就是问题所在:P
draw()
 -> draw()
    -> draw()
    ...
    StackOverflowException