如何在android中动态绘制一条直线

如何在android中动态绘制一条直线,android,line,Android,Line,可能重复: 我必须匹配两个选项,就像我们用铅笔匹配列一样。如果我单击一列中的一行,并将该行与另一列中的其他合适行进行匹配,则应在两行之间动态绘制线。首先,我使用了拖放功能。但有了它,我就不能动态地画线了。这怎么可能呢?请给我一些建议。使用地图视图中的投影,以便将地质点转换为“屏幕”点。之后,您可以使用路径来绘制所需的线。第一个点应使用path.moveTo(x,y)指定,其余点应使用path.lineTo(x,y)指定。最后调用canvas.drawPath(path),就完成了 下面是my

可能重复:


我必须匹配两个选项,就像我们用铅笔匹配列一样。如果我单击一列中的一行,并将该行与另一列中的其他合适行进行匹配,则应在两行之间动态绘制线。首先,我使用了拖放功能。但有了它,我就不能动态地画线了。这怎么可能呢?请给我一些建议。

使用地图视图中的投影,以便将地质点转换为“屏幕”点。之后,您可以使用路径来绘制所需的线。第一个点应使用path.moveTo(x,y)指定,其余点应使用path.lineTo(x,y)指定。最后调用canvas.drawPath(path),就完成了

下面是my draw()方法的代码,该方法围绕一组点绘制多边形。请注意,您不必像我在代码中那样使用path.close()

public void draw(android.graphics.Canvas canvas, MapView mapView, boolean shadow)
{
if(shadow){
    if(isDrawing == false){
        return;
    }
    Projection proj = mapView.getProjection();

    boolean first = true;
    /*Clear the old path at first*/
    path.rewind();
    /* The first tap */
    Paint circlePaint = new Paint();
    Point tempPoint = new Point();
    for(GeoPoint point: polygon){
        proj.toPixels(point, tempPoint);
        if(first){
            path.moveTo(tempPoint.x, tempPoint.y);
            first = false;
            circlePaint.setARGB(100, 255, 117, 0);
            circlePaint.setAntiAlias(true);
            canvas.drawCircle(tempPoint.x, tempPoint.y, FIRST_CIRCLE_RADIOUS, circlePaint);
        }
        else{
            path.lineTo(tempPoint.x, tempPoint.y);
            circlePaint.setARGB(100, 235, 0, 235);
            circlePaint.setAntiAlias(true);
            canvas.drawCircle(tempPoint.x, tempPoint.y, CIRCLE_RADIOUS, circlePaint);
        }
    }
    /* If indeed is a polygon just close the perimeter */
    if(polygon.size() > 2){
        path.close();
    }
    canvas.drawPath(path, polygonPaint);
    super.draw(canvas, mapView, shadow);
}
}


请参阅:

使用地图视图中的投影将地质点转换为“屏幕”点。之后,您可以使用路径来绘制所需的线。第一个点应使用path.moveTo(x,y)指定,其余点应使用path.lineTo(x,y)指定。最后调用canvas.drawPath(path),就完成了

下面是my draw()方法的代码,该方法围绕一组点绘制多边形。请注意,您不必像我在代码中那样使用path.close()

public void draw(android.graphics.Canvas canvas, MapView mapView, boolean shadow)
{
if(shadow){
    if(isDrawing == false){
        return;
    }
    Projection proj = mapView.getProjection();

    boolean first = true;
    /*Clear the old path at first*/
    path.rewind();
    /* The first tap */
    Paint circlePaint = new Paint();
    Point tempPoint = new Point();
    for(GeoPoint point: polygon){
        proj.toPixels(point, tempPoint);
        if(first){
            path.moveTo(tempPoint.x, tempPoint.y);
            first = false;
            circlePaint.setARGB(100, 255, 117, 0);
            circlePaint.setAntiAlias(true);
            canvas.drawCircle(tempPoint.x, tempPoint.y, FIRST_CIRCLE_RADIOUS, circlePaint);
        }
        else{
            path.lineTo(tempPoint.x, tempPoint.y);
            circlePaint.setARGB(100, 235, 0, 235);
            circlePaint.setAntiAlias(true);
            canvas.drawCircle(tempPoint.x, tempPoint.y, CIRCLE_RADIOUS, circlePaint);
        }
    }
    /* If indeed is a polygon just close the perimeter */
    if(polygon.size() > 2){
        path.close();
    }
    canvas.drawPath(path, polygonPaint);
    super.draw(canvas, mapView, shadow);
}
}


请参阅:

获取两个行元素的
触摸事件
,如果它们匹配,请使用以下代码绘制水平线:

canvas.drawLine(10, 10, 90, 10, paint);
canvas.drawLine(10, 20, 90, 20, paint);

编辑:请参考获取两个行元素的
触摸事件
,如果它们匹配,请使用以下代码绘制水平线:

canvas.drawLine(10, 10, 90, 10, paint);
canvas.drawLine(10, 20, 90, 20, paint);

编辑:请参考

在两列之间放置一个自定义视图,并准备好画布来绘制任何内容。当您做出成功选择时。获取这两个选定视图的边界,并使用画布从“开始视图”的右端和底端到第二个视图的左上角绘制直线。

在两列之间放置一个自定义视图,并准备画布绘制任何内容。当您做出成功选择时。获取这两个选定视图的边界,并使用画布从“开始视图”的右端和底端到第二个视图的左上角绘制直线