0

我正在尝试扩展/继承 ShapeDrawable。结果确实令人困惑。我的简单代码应该创建一个小点和一个小三角形。事实上,这些形状确实出现在绘制它们的地图视图上。然而,第二个形状有些不同的三角形也出现了,我不知道这是为什么。为什么我的 ShapeDrawable 子类会创建一个额外的三角形?

示例屏幕截图 --->> http://www.activemetrics.com/DrawableProb.png

    private class CustomDrawable extends ShapeDrawable
    {
        public CustomDrawable() //GeoPoint point, MapView mapView)
        {
        }

        public void draw(Canvas canvas)
        {
            canvas.drawCircle(0, 0, 2/*radius*/,    getPaint());
            Paint paint = new Paint();
            paint.setStyle(Paint.Style.STROKE);
            paint.setStrokeWidth(2);
            paint.setColor(Color.RED);
            Path path = new Path();
            path.reset();
            path.moveTo(0, -10);
            path.lineTo(5, 0);
            path.lineTo(-5, 0);
            path.close();
            path.offset(10, 40);
            canvas.drawPath(path, paint);
        }
    }   
4

1 回答 1

0

我想也许这个问题太难了。也许在这个子类之外的某个地方出了点问题。(但奇怪的是,通过删除此处的绘图逻辑,鬼三角形消失了,这确实发生了。)无论如何,我通过制作一个添加到地图视图然后重载绘图方法的单一叠加层获得了更好的体验...

    private class MapOverlay extends com.google.android.maps.Overlay
    {
        @Override
        public boolean draw(Canvas canvas, MapView mapView,
        boolean shadow, long when)
        {
            super.draw(canvas, mapView, shadow);

            Bitmap bmp = BitmapFactory.decodeResource(
                    getResources(), R.drawable.ic_launcher);

            //---translate the GeoPoint to screen pixels---
            Point screenPts1 = new Point();
            mapView.getProjection().toPixels(p1, screenPts1);

            //---translate the GeoPoint to screen pixels---
            Point screenPts2 = new Point();
            mapView.getProjection().toPixels(p2, screenPts2);

            //---add the first marker---
            canvas.drawBitmap(bmp, screenPts1.x - bmp.getWidth()/2,
                                   screenPts1.y - bmp.getHeight()/2, null);

(……剪……)

于 2013-01-14T10:03:32.850 回答