gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-29 02:12:51 25 4
gpt4 key购买 nike

我正在尝试绘制多个矩形。不过,我希望能够手工绘制每个矩形。我可以画一个,但是一旦我调用 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com