Android: у canvas.drawCircle внутри есть эллипс?

#android #canvas #android-mapview #geometry

#Android #холст #android-mapview #геометрия

Вопрос:

Я пытаюсь нарисовать пользовательское рисованное наложение на MapView. Я использую пользовательский класс, который расширяет Drawable, чтобы нарисовать круг на холсте. Затем я передаю ему переменную radius и добавляю ее в 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 paint…

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

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

 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:

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

 @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