2013-03-07 6 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 и у того же, чем последний в ActionUP и добавить +1 в обоих х и у ...

ответ

0

может быть

break; 

вместо

return true; 
+0

Это не имеет смысла, возвращает true; необходим для возвращаемого типа onTouch ...: S – desgraci

+0

, но в любом случае, когда он выходит из коммутатора, он попадет туда, туда, idk, просто предложение – JRowan

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

+0

Поскольку мы не знаем, как обрабатывается фактический чертеж, это просто пример того, как вы должны это делать. На основе кода, который вы предоставили ... – BrainCrash

+0

Дело в том, что в этом фрагменте вы собираетесь отправлять те же событияX и eventY в валидированный кран-кейс, который вы показываете здесь, path.lineTo ничего не рисует, если коорды являются То же самое, что я уже обсуждал, независимо от того, как вы делаете рисунок. – desgraci

1

... что-то делать, а не ничего в вашем случае MotionEvent.ACTION_UP. Что-то для начала:

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

Где дело ACTION_MOVE устанавливает флаг. Ваш следующий шаг: облегчить переход без случайного «перемещения», если ACTION_DOWN и ACTION_MOVE обмениваются заметками о координатах.

+0

Я добавил команду path.lineTo в ACTION_DOWN и ACTION_UP, никаких изменений ... – desgraci

Смежные вопросы