Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/194.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/ssh/2.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
Java 加上“可见”;标记”;在Android中使用ItemizeOverlay将地质点表示为地图视图_Java_Android_Sqlite_Overlay_Android Mapview - Fatal编程技术网

Java 加上“可见”;标记”;在Android中使用ItemizeOverlay将地质点表示为地图视图

Java 加上“可见”;标记”;在Android中使用ItemizeOverlay将地质点表示为地图视图,java,android,sqlite,overlay,android-mapview,Java,Android,Sqlite,Overlay,Android Mapview,我正在构建一个应用程序,它将GPS位置存储在SQLite数据库中,然后通过在点之间绘制红线,使用覆盖将数据输出到地图视图中 我希望能够显示这些点以及红线的图形标记(图像)。我的代码如下: public class MyOverlay extends ItemizedOverlay<OverlayItem> { // private Projection projection; private Paint linePaint; private Vector<GeoPoint&g

我正在构建一个应用程序,它将GPS位置存储在SQLite数据库中,然后通过在点之间绘制红线,使用覆盖将数据输出到地图视图中

我希望能够显示这些点以及红线的图形标记(图像)。我的代码如下:

public class MyOverlay extends ItemizedOverlay<OverlayItem> {

// private Projection projection;
private Paint linePaint;
private Vector<GeoPoint> points;

public MyOverlay(Drawable defaultMarker) {
    super(defaultMarker);
    points = new Vector<GeoPoint>();
    //set colour, stroke width etc.
    linePaint = new Paint();
    linePaint.setARGB(255, 255, 0, 0);
    linePaint.setStrokeWidth(3);
    linePaint.setDither(true);
    linePaint.setStyle(Style.FILL);
    linePaint.setAntiAlias(true);
    linePaint.setStrokeJoin(Paint.Join.ROUND);
    linePaint.setStrokeCap(Paint.Cap.ROUND);

}

public void addPoint(GeoPoint point) {
    populate();
    points.addElement(point);

}

//public void setProjection(Projection projection) {
//   this.projection = projection;
// }

public void draw(Canvas canvas, MapView view, boolean shadow) {
    populate();
    int size = points.size();
    Point lastPoint = new Point();
    if(size == 0) return;
    view.getProjection().toPixels(points.get(0), lastPoint);
    Point point = new Point();
    for(int i = 1; i<size; i++){
       view.getProjection().toPixels(points.get(i), point);
        canvas.drawLine(lastPoint.x, lastPoint.y, point.x, point.y, linePaint);
        lastPoint = point;

    }
}

@Override
protected OverlayItem createItem(int arg0) {
    // TODO Auto-generated method stub
    return null;
}

@Override
public int size() {
    // TODO Auto-generated method stub
    return 0;
}
}
公共类MyOverlay扩展了ItemizeOverlay{
//私人投影;
私人油漆;
私有向量点;
公共MyOverlay(可拖动默认标记){
超级(默认标记);
点=新向量();
//设置颜色、笔划宽度等。
linePaint=新油漆();
setARGB(255,255,0,0);
linePaint.设置行程宽度(3);
linePaint.setDither(真);
linePaint.setStyle(样式填充);
linePaint.setAntiAlias(真);
linePaint.setStrokeJoin(绘制.连接.圆形);
linePaint.setStrokeCap(油漆盖圆形);
}
公共无效添加点(地质点){
填充();
点。加法(点);
}
//公共空间集合投影(投影){
//这个。投影=投影;
// }
公共空白绘制(画布、地图视图、布尔阴影){
填充();
int size=points.size();
点lastPoint=新点();
如果(大小==0)返回;
view.getProjection().toPixels(points.get(0),lastPoint);
点=新点();

对于(int i=1;i看一看,看看它是否回答了您的问题。

Jay您好,这正是我要找的canvas.drawBitmap方法。谢谢!Jay,我似乎收到了canvas.drawBitmap(BitmapFactory.decodeResource(getResources(),R.drawable.arrow)“getResources()方法的一个错误对于类型MyOverlay“您需要一个上下文对象来调用getResources()”未定义。与每次绘制时访问资源并创建新的可绘制文件不同,您应该在地图活动中创建可绘制文件并将其传递给覆盖文件,或者将地图活动中的上下文传递给覆盖文件,并在构造函数中一次性获取可绘制文件。经验法则指出,最好避免创建新对象和执行以下操作:gic是你的绘制方法,因为它非常慢。根据使用情况,我还建议你在其他地方收集投影。Dave,谢谢你的回答。实际上,我对只为前2个绘制红线而不为其他任何点存在问题。这是因为我创建了项目吗离子?