【问题标题】:How to erase previous drawing on Canvas?如何擦除以前在 Canvas 上的绘图?
【发布时间】:2011-10-20 20:58:02
【问题描述】:

我有一张背景图片(地图),我需要在其上定期绘制你在这​​里的图标。我使用 Canvas 在地图顶部绘制图标。假设在按钮单击时触发绘图过程(见下面的代码),我怎样才能擦除以前的绘图?

private void displayUserPos(Point userPos) {
    Bitmap marker = BitmapFactory.decodeResource(getResources(), R.drawable.ic_yah);
    canvas.drawBitmap(marker, (float)userPos.getX(), (float)userPos.getY(), null);
    imgView.setImageBitmap(fmOverlay);
}

【问题讨论】:

    标签: android canvas drawing


    【解决方案1】:

    我写了一个函数来帮助解决这个问题。通常我设置一个布尔值来检查页面是否发生了变化,如果有,我调用这个函数,使用返回布尔值来设置我的 newpage 布尔值。

        private boolean clearCanvas(Canvas canvas){
          canvas.drawColor(Color.TRANSPARENT, PorterDuff.Mode.CLEAR);
          return false;
        }
    

    Color.TRANSPARENT 并不是真正需要的,你可以不用 out。

    【讨论】:

      【解决方案2】:
      canvas.drawColor(0, PorterDuff.Mode.CLEAR);
      

      欲了解更多信息Click here

      【讨论】:

        【解决方案3】:
        canvas.drawColor(0, Mode.CLEAR);
        

        更多信息http://developer.android.com/guide/topics/graphics/index.html

        【讨论】:

        【解决方案4】:

        试试下面的方法,可以彻底清除画布。

        声明应该是这样的,

        ArrayList<Pair<Path, Paint>> paths = new ArrayList<Pair<Path, Paint>>();
        ArrayList<Pair<Path, Paint>> undonePaths = new ArrayList<Pair<Path, Paint>>();
        

        并在清除使用时

            undonePaths.clear();
            paths.clear();
            invalidate();
        

        【讨论】:

          【解决方案5】:
          overlayBitmap.eraseColor(Color.TRANSPARENT);
          

          这只是将现有位图设置为全透明。

          我用它来“清除”一个位图对象,我用它来覆盖另一个对象以显示裁剪窗口。

          【讨论】:

            【解决方案6】:

            只需用颜色或图像填充画布:

            canvas.drawColor(Color.BLACK);
            

            如果您想保留某些元素并删除某些元素,您可以将它们存储在 ArrayList 中。然后,您可以在需要时从这个 ArrayList 中添加和删除元素,然后在 onDraw() 中遍历它们。

            for (Iterator<GraphicObject> it = _graphics.iterator(); it.hasNext();) {
                GraphicObject graphic = (GraphicObject)it.next();
                coords = graphic.getCoordinates();
                canvas.drawCircle(coords.getX(), coords.getY(), (float)coords.getRadius(), paint);
            }
            

            【讨论】:

            • 啊,另一个输入。目前我还不需要它,但以后可能会有所帮助。谢谢! +1
            【解决方案7】:
            canvas.drawColor(0, Mode.CLEAR);
            

            【讨论】:

            • 当你的画布需要透明并且你不能用白色或黑色或任何你有的背景颜色填充它时,这个非常有用。
            猜你喜欢
            • 1970-01-01
            • 2012-06-08
            • 2023-03-16
            • 2017-07-06
            • 1970-01-01
            • 2016-09-14
            • 1970-01-01
            • 2014-04-03
            • 2023-04-08
            相关资源
            最近更新 更多