2013-03-07 69 views
1

這工作正常,如果我移動我的手指,但如果我只點擊(從ACTION_DOWN到ACTION_UP而不通過ACTION_MOVE)它不會繪製任何東西。任何想法?如何在畫布中使用水龍頭畫畫?

@Override 
protected void onDraw(Canvas canvas) { 
    canvas.drawPath(path, paint); 
} 

@Override 
public boolean onTouchEvent(MotionEvent event) { 
    float eventX = event.getX(); 
    float eventY = event.getY(); 

    switch (event.getAction()) { 
     case MotionEvent.ACTION_DOWN: 
      path.moveTo(eventX, eventY); 
      path.lineTo(eventX, eventY); 
     return true; 
     case MotionEvent.ACTION_MOVE: 
      path.lineTo(eventX, eventY); 
     break; 
     case MotionEvent.ACTION_UP: 
      path.lineTo(eventX, eventY); 
     break; 
     default: 
     return false; 
    } 

    // Schedules a repaint. 
    invalidate(); 
    return true; 
} 
} 

我想出了一個答案最接近的是檢查是否eventx和y是不是在ActionUP最後一個相同,並添加在x和y +1 ...

回答

0

也許

break; 

,而不是

return true; 
+0

這沒有意義,返回true;是需要的onTouch返回類型...:S – desgraci 2013-03-08 13:59:24

+0

但無論哪種方式,當它退出交換機,它會打到那裏的回報,idk,只是一個建議 – JRowan 2013-03-08 17:37:29

1

讓它做的東西也一個簡單的水龍頭必須做這樣的事情:

boolean notMoved = true; 
switch (event.getAction()) { 

    case MotionEvent.ACTION_DOWN: 
     path.moveTo(eventX, eventY); 
    return true; 

    case MotionEvent.ACTION_MOVE: 
     path.lineTo(eventX, eventY); 
     notMoved = false; 
    break; 

    case MotionEvent.ACTION_UP: 
     if(notMoved) { 
      //draw something 
      path.lineTo(eventX, eventY); 
     } 
    break; 
    default: 
    return false; 
} 
+0

添加path.line ACTION_UP甚至在所有情況下沒有解決問題。 – desgraci 2013-03-08 13:58:15

+0

由於我們不知道如何處理實際圖紙,這只是您應該如何做的一個例子。根據你提供的代碼... – BrainCrash 2013-03-09 00:58:19

+0

的情況是,在這個片段中,你將發送相同的eventX和eventY到你在這裏顯示的有色水龍頭的情況下,如果coords是同樣,這是我之前提出的問題,與您如何製作繪圖無關。 – desgraci 2013-03-11 13:44:46

1

...在MotionEvent.ACTION_UP的情況下做些事情而不是做任何事情。一開始:

if (moved) { 
    moved = false; 
    // on-tap behavior 
} 

其中ACTION_MOVE案例設置標誌。您的下一步:通過讓ACTION_DOWN和ACTION_MOVE分享關於座標的筆記,讓輕鬆點擊而不會意外「移動」。

+0

我在ACTION_DOWN和ACTION_UP上添加了path.lineTo命令,沒有更改... – desgraci 2013-03-08 13:55:21