Canvas ShapeDrawable子类经常被幽灵三角形困扰

Canvas ShapeDrawable子类经常被幽灵三角形困扰,canvas,shapedrawable,Canvas,Shapedrawable,我正在尝试扩展/子类ShapeDrawable。结果真是令人费解。我的简单代码应该创建一个小点和一个小三角形。事实上,这些形状确实出现在地图视图上,在那里绘制它们。然而,第二个三角形的形状也有所不同,我不知道这是为什么。为什么我的ShapeDrawable子类会创建一个额外的三角形 示例屏幕截图--->> 我想这个问题可能太难了。也许在这个子类之外的某个地方出了问题。(但奇怪的是,通过删除这里的绘图逻辑,重影三角形消失了,这确实发生了。)无论如何,我已经获得了一个更好的经验,制作了一个叠加,添加

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

示例屏幕截图--->>


我想这个问题可能太难了。也许在这个子类之外的某个地方出了问题。(但奇怪的是,通过删除这里的绘图逻辑,重影三角形消失了,这确实发生了。)无论如何,我已经获得了一个更好的经验,制作了一个叠加,添加到mapview中,然后重载绘图方法

    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);
(…剪断…)

    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);