2011-03-29 47 views
0

我讓用戶在我的應用程序中進行繪畫。一旦整個屏幕被繪製,應用程序將在屏幕上顯示一些選項。檢測用戶是否繪製了整個屏幕

我想保持屏幕像素數組例如。 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); 
} 
+0

而不是一個數組,那麼櫃檯呢?每個像素的Pixel ++翻轉,然後檢查它何時達到上限。 – 2011-03-29 14:16:08

+0

用戶可能在相同的位置進行繪製,從而導致pixel ++方法無效 – SteD 2011-03-29 14:28:19

回答

1

我想不出別的什麼比使用數組來跟蹤像素的狀態。然而2D陣列比使用2個並行1D陣列要慢。但是如何將所有像素放在一個單獨的數組中,並在繪製時從數組中刪除它的元素?您可以簡單地檢查陣列長度爲0,而不是遍歷整個陣列。

0

我覺得你的方法(保持矩陣)可能是正確的,但如果刷的大小比1個像素大了很多,這可能是有意義的,以保持較低分辨率的矩陣:你可能不需要像素精確的準確性。是的,這樣你可能會讓用戶逃避不在屏幕上的所有像素,但它會花費更少的內存。

0

答案可能是創建一個位圖。所有的顏色都出現在位圖中,並傳遞到畫布以保持同步。

該檢查是從定時器和後臺線程完成的,該定時器和後臺線程定期調用Bitmap.copyPixelsToBuffer將數據複製到IntBuffer中。然後,您可以一次將緩衝區移動一個像素(一個int32)。如果所有的像素都是相同的值,那麼你知道屏幕已經填滿了,你可以做你喜歡的迴應。

更高效的實現可能會使用用戶的繪圖作爲後臺計時器的觸發器,並將自身限制爲自上次檢查後用戶繪製的邊界的並集,而不是再次檢查整個屏幕。

0

使用用戶不能使用的背景色。每次像素從背景顏色變爲新顏色時,向計數器添加一個(請參閱AD的建議)。