android - 在不调用 invalidate() 的情况下绘制多个矩形

标签 android android-canvas draw invalidation

我正在尝试绘制多个矩形。不过,我希望能够手工绘制每个矩形。我可以画一个,但是一旦我调用 invalidate(),当然, Canvas 就会被清除。 是否有另一种调用 onDraw() 的方法,这样 Canvas 就不会被清除? 这是我拥有的:

我只是有一个扩展 SurfaceView 的类,然后 覆盖 onDraw

@Override
protected void onDraw(Canvas canvas) 
{
    Paint paint = new Paint();
    paint.setColor(Color.BLUE);
    canvas.drawRect(xCoor, yCoor, rectW, rectH, paint);
}

然后我覆盖了一个 OnTouchEvent

@Override
public boolean onTouchEvent (MotionEvent event) 
{

    downX = Math.round(event.getX());
    downY = Math.round(event.getY());

    invalidate();    //clears canvas which I don't want
    switch (event.getAction())
    {
        case MotionEvent.ACTION_DOWN:
            xCoor = downX;
            yCoor = downY;
            rectH = 0;
            rectW = 0;
            break;
        case MotionEvent.ACTION_MOVE:
            rectH = downY;
            rectW = downX;
            break;
        case MotionEvent.ACTION_UP:

            break;
    }

    return true;
}

我这样做完全错了吗? :)

如有任何帮助,我们将不胜感激。

谢谢!

最佳答案

您可以将每个矩形添加到列表中并像这样在 onDraw 上迭代它:

import android.graphics.Rect;

private ArrayList<Rect> rectangles = new ArrayList<Rect>();

@Override
public boolean onTouchEvent (MotionEvent event) {
    // ...
    case MotionEvent.ACTION_UP:
        rectangles.add(new Rect(xCoor, yCoor, rectW, rectH));
        break;
    // ...
}

@Override
protected void onDraw(Canvas canvas) {
    Paint paint = new Paint();
    paint.setColor(Color.BLUE);
    for (Rect rect : rectangles) {
        canvas.drawRect(rect, paint);
    }
}

关于android - 在不调用 invalidate() 的情况下绘制多个矩形,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6246904/

相关文章:

android - gradle android studio 2.3 : failed to resolve 'com.google.code.gson:gson:2.8.0'

android - 从 Android 应用程序编译 Gradle 时出错 : The SDK Build Tools revision (24. 0.3) 对于项目而言太低

android - 不同颜色的 TextView Border Top

java - 如何在 Canvas 的右上角绘制位图

c++ - 如何在 C++ 中使用 DirectX 绘制透明矩形?

java - 如何使用 Point2D.Double 作为点绘制多边形?

c++ - 无法在 Win 7 上绘制到 SysListView32 控件?

android - 某些表的动态数据库备份

android - 如何使物体沿圆形路径移动?

java - drawBitmap() 绘制虚假部分