检测用户是否已绘制整个屏幕

时间:2011-03-29 14:13:52

标签: android

我让用户在我的应用程序中进行绘画。一旦整个屏幕被绘制,应用程序将在屏幕上显示一些选项。

我正在考虑保留一系列屏幕像素,例如。 pixel = new int[width][height];并在绘制像素时标记它,但我想这对我的问题来说是一个糟糕的解决方案。

有没有办法检测用户是否画了整个屏幕?

@Override
public boolean onTouchEvent(MotionEvent ev) {
    switch (ev.getAction()) {
    case MotionEvent.ACTION_DOWN: {
        X = (int) ev.getX();
        Y = (int) ev.getY();
        break;
    }
    case MotionEvent.ACTION_MOVE: {
        X = (int) ev.getX();
        Y = (int) ev.getY();
        break;
    }
    return true;
}
@Override
public void onDraw(Canvas canvas) {
    super.onDraw(canvas); 
    canvas.drawCircle(X, Y, 50, paint);
}

4 个答案:

答案 0 :(得分:1)

除了使用数组来跟踪像素的状态之外,我什么都想不到。然而,2D阵列比使用2个并行1D阵列慢。但是如何将所有像素放在一个单独的数组中并在绘制时,从阵列中删除它的元素呢?您可以简单地将数组长度检查为0,而不是遍历整个数组。

答案 1 :(得分:0)

我认为你的方法(保持矩阵)可能是正确的,但如果画笔的大小远大于1像素,那么保持较低分辨率矩阵可能是有意义的:你可能不会需要像素精确度。是的,通过这种方式,您可以让用户在屏幕上没有填充所有像素,但这会占用更少的内存。

答案 2 :(得分:0)

答案可能是创建一个位图。所有颜料都出现在位图中,并与画布相连,以使其保持同步。

检查是从计时器和后台线程完成的,后台线程定期调用Bitmap.copyPixelsToBuffer将数据复制到IntBuffer中。然后你可以一次走缓冲区一个像素(一个int32)。如果所有像素都是相同的值,您就知道屏幕已填满,您可以做出您喜欢的响应。

更高效的实现可能会将用户的绘图用作后台计时器的触发器,并将自身限制为自上次检查后用户绘制的边界的并集,而不是再次检查整个屏幕。

答案 3 :(得分:0)

使用用户无法绘制的背景颜色。每当像素从背景颜色变为新颜色时,向计数器添加一个(参见AD的建议)。