Android: в canvas.drawCircle есть эллипс? - PullRequest
0 голосов
/ 19 апреля 2011

Я пытаюсь нарисовать собственное наложение Drawable на MapView.Я использую пользовательский класс, расширяющий Drawable, чтобы нарисовать круг на холсте.Затем я передаю ей радиус-переменную и добавляю ее в ItemizedOverlay, который применяется к MapView.

Пока что все работает довольно хорошо, но по какой-то причине метод canvas.drawCircle рисует прозрачныйкруг с чем-то похожим на эллипс, и я не могу понять, что вызывает его.Я хочу, чтобы круг был прозрачным, но я не хочу, чтобы внутри него был эллипс.

Вот пользовательский класс Drawable:

import android.graphics.Canvas;
import android.graphics.ColorFilter;
import android.graphics.Paint;
import android.graphics.drawable.Drawable;
public class PileDrawable extends Drawable {
    private static final Paint paint = new Paint();
    int rad;
    public PileDrawable(int radius) {
            paint.setARGB(100, 0, 255, 0);
            paint.setAntiAlias(false);
            paint.setStyle(Paint.Style.FILL);
            rad=radius;
    }
    @Override
    public void draw(Canvas canvas) {

            canvas.drawCircle(0, 0, rad, paint);

    }
    @Override
    public int getOpacity() {
            return 0;
    }
    @Override
    public void setAlpha(int alpha) {

    }
    @Override
    public void setColorFilter(ColorFilter cf) {

    }
}

Это своего родапохоже, не обращай внимания на мое отсутствие навыков рисования MS ...

http://img222.imageshack.us/img222/4356/circleellipse.png

У меня осталось ощущение, что проблема возникает, когда я накладываю границы на Drawable.

PileDrawable pd = new PileDrawable((int)(mapView.getProjection().metersToEquatorPixels(Radius) * (1/ Math.cos(Math.toRadians(point.getLatitudeE6()))))); 
     pd.setBounds(0,0,pd.getIntrinsicWidth(),pd.getIntrinsicHeight()); //HERE?

Итак, есть идеи?

1 Ответ

1 голос
/ 22 июня 2012

может быть немного поздно, но вот как я рисую круг на карте в качестве наложения. надеюсь, что это поможет людям в будущем

@Override
public void draw(Canvas canvas, MapView mapView, boolean shadow)
{
        Projection proj = mapView.getProjection();
        GeoPoint loc = new GeoPoint(geo.getLat(), geo.getLng());

        Point point = new Point();
        proj.toPixels(loc, point);
        float rad = (float) (proj.metersToEquatorPixels(radius) * (1 / Math.cos(Math.toRadians(loc.getLatitudeE6() / 1000000))));

        Paint circle = new Paint();
        circle.setColor(colour);
        circle.setAlpha(30);
        circle.setAntiAlias(true);
        circle.setStyle(Style.FILL);

        canvas.drawCircle(point.x, point.y, rad, circle);

        super.draw(canvas, mapView, shadow);

}

и работает как шарм. я не уверен относительно того, почему эллипс нарисован, поскольку в коде нет ничего для рисования эллипса, но я предполагаю, что это может быть причиной преобразования целочисленных значений, а не преобразования значений с плавающей запятой, пока вы инициализируете PileDrawable

...