0

for ループを使用して配列を介してポイント間に線を引こうとしていますが、いくつか問題があるようです。配列をループする for ループを作成しますが、projection.toPixels(arraylist,point); を使用しようとすると、エラーが発生し続けます。他の人がそれを使用しているのを見たことがありますが、エラーが発生していないようです。助けてください:

私が書いたコードは以下の通りです:

public class MyPositionOverlay extends ItemizedOverlay<OverlayItem> {

public List<GeoPoint> geoPointsArrayList = new ArrayList<GeoPoint>();
public ArrayList<OverlayItem> overlayItemList = new ArrayList<OverlayItem>();
Context context;
int listSize = overlayItemList.size();
//Vector <overlayItemList> vectorList;
public MyPositionOverlay(Drawable marker, Context c) {
    super(boundCenterBottom(marker));
    // TODO Auto-generated constructor stub
    populate();
    context = c;
}
private final int mRadius = 5;
Location location;
public Location getLocation() {
    return location;
}
public void setLocation(Location location) {;
this.location = location;
}

public void addItem(GeoPoint point, String title, String snippet){
    OverlayItem newItem = new OverlayItem(point, title, snippet);
    overlayItemList.add(newItem);
    populate();
}
@Override
public void draw(Canvas canvas, MapView mapView, boolean shadow) {
    Projection projection = mapView.getProjection();
    Double latitude = location.getLatitude()*1E6;
    Double longitude = location.getLongitude()*1E6;
    GeoPoint geoPoint; 
    geoPoint = new 
            GeoPoint(latitude.intValue(),longitude.intValue());
    GeoPoint prePoint = null, currentPoint = null;
    Path linePath = new Path();
    Point screenCoords = new Point();
    Point screenCoords2 = new Point();
    Point lastPoint = new Point();
    Point linePoint = new Point();
    if (shadow == false) {
        // Get the current location    
        // Convert the location to screen pixels     
        Point point = new Point();
        projection.toPixels(geoPoint, point);
        RectF oval = new RectF(point.x - mRadius, point.y - mRadius, 
                point.x + mRadius, point.y + mRadius);
        // Setup the paint
        Paint paint = new Paint();
        paint.setARGB(250, 255, 255, 255);
        paint.setAntiAlias(true);
        paint.setFakeBoldText(true);
        //Text set up
        Paint textPaint = new Paint();
        textPaint.setColor(Color.BLACK);
        Paint backPaint = new Paint();
        backPaint.setARGB(175, 50, 50, 50);
        backPaint.setAntiAlias(true);
        RectF backRect = new RectF(point.x + 2 + mRadius, 
                point.y - 3*mRadius,
                point.x + 65, point.y + mRadius);
        // Draw the marker    
        canvas.drawOval(oval, paint);
        canvas.drawRoundRect(backRect, 5, 5, backPaint);
        canvas.drawText("Here I Am", 
                point.x + 2*mRadius, point.y, 
                textPaint);

        for (int j = 1; j < overlayItemList.size();j++){
            linePath.setLastPoint(4, j - 1);
            linePath.lineTo(4, j);
        }
        linePath.close();
        canvas.drawPath(linePath, linePaint);
    } // End of If statement
    super.draw(canvas, mapView, shadow);
} // End of draw method
public void drawLine(MapView mapView){

    System.out.println("Drawing line");
    Path linePath = new Path();
    Canvas lineCanvas = new Canvas();
    Projection lineProjection = mapView.getProjection();


    //Line Settings
    Paint linePaint = new Paint();
    linePaint.setStyle(Style.FILL);
    linePaint.setStrokeWidth(2);
    linePaint.setARGB(0, 0, 0, 255);
    linePaint.setAntiAlias(true);
    linePaint.setStrokeJoin(Paint.Join.ROUND);
    linePaint.setStrokeCap(Paint.Cap.ROUND);
    /****************************************************************************/

    for (int k = 0; k<overlayItemList.size(); k++){
        if(k == overlayItemList.size() -1){
            break;
        }
        Point from = new Point();
        Point to = new Point();

        lineProjection.toPixels(overlayItemList.get(k), from);
        lineProjection.toPixels(overlayItemList.get(k + 1), to);

        linePath.moveTo(from.x, from.y);
        linePath.lineTo(to.x, to.y);
    }

    lineCanvas.drawPath(linePath, linePaint);


}//End of drawLine method

}*

4

1 に答える 1

1

タイプ Projection のメソッド toPixels(GeoPoint, Point) は、引数 (OverlayItem, Point) には適用されません。

OverlayItemtypeのオブジェクトを期待するメソッドに type のオブジェクトを渡そうとしているため、このエラーが発生していますGeoPointOverlayItemから拡張されていないため、これは機能しませんGeoPointgetPoint()ただし、オーバーレイの を返すメソッドがあるのでGeoPoint、それを使用できます。

コードでは、次の 2 行を変更するだけです。

lineProjection.toPixels(overlayItemList.get(k), from);
lineProjection.toPixels(overlayItemList.get(k + 1), to);

それらの行は読むべきです

lineProjection.toPixels(overlayItemList.get(k).getPoint(), from);
lineProjection.toPixels(overlayItemList.get(k + 1).getPoint(), to);
于 2012-07-28T01:31:57.840 に答える