2014-09-14 2 views
1

Я реализую щепотку, чтобы увеличить приложение для рисования, но когда я увеличиваю масштаб, он рисует линию. Я знаю, почему это происходит (структура моего метода onTouchEvent), но я не могу найти способ обойти это. Может ли кто-нибудь помочь?pinch для увеличения по андроидному холсту рисует линию

public boolean onTouchEvent(MotionEvent event){ 

    //get x and y values of user touch 
    float touchx = event.getX(); 
    float touchy = event.getY(); 
    boolean isScaling; 

    if (event.getPointerCount() > 1){ 
     sgd.onTouchEvent(event); 
     isScaling = true; 
     return true; 
    } 
    switch (event.getAction()){ 
     case MotionEvent.ACTION_DOWN: 
      drawPath.moveTo(touchx, touchy); 
      drawPath.lineTo((touchx+1.0f), touchy); //enable drawing points 
      break; 
     case MotionEvent.ACTION_MOVE: 
      drawPath.lineTo(touchx, touchy); 
      break; 
     case MotionEvent.ACTION_UP: 
      drawCanvas.drawPath(drawPath, drawPaint); 
      drawPath.reset(); 
      break; 
     default: 
      return false; 
    } 
    invalidate(); 
    return true; 
} 

Редактировать: получил это! также еще не реализована функция перетаскивания ...

public boolean onTouchEvent(MotionEvent event){ 
    //get x and y values of user touch 
    float touchx = event.getX(); 
    float touchy = event.getY(); 

    if (event.getPointerCount() > 1){ 
     sgd.onTouchEvent(event); 
     isScaling=true; 
     return true; 
    } 

    else if (moving){ 
     switch (event.getAction()){ 
      case MotionEvent.ACTION_DOWN: 
       oldx = touchx; 
       oldy = touchy; 
       break; 
      case MotionEvent.ACTION_MOVE: 
       if (isScaling == false){ 
        tx = touchx-oldx; 
        ty = touchy-oldy; 
        //canvas.translate 
       } 
       break; 
      case MotionEvent.ACTION_UP: 
       if(isScaling){ 
        isScaling = false; 
       } 
       break; 
      default: 
       return false; 
     } 
    } 
    else{ 
     switch (event.getAction()){ 
      case MotionEvent.ACTION_DOWN: 
       drawPath.moveTo(touchx, touchy); 
       oldx = touchx; 
       oldy = touchy; 
       drawPath.lineTo((touchx+1.0f), touchy); //enable drawing points, silence during scaling somehow 
       break; 
      case MotionEvent.ACTION_MOVE: 
       if (isScaling == false){ 
        drawPath.lineTo(touchx, touchy); 
       } 
       break; 
      case MotionEvent.ACTION_UP: 
       if(isScaling){ 
        isScaling = false; 
       } 
       else{ 
        drawCanvas.drawPath(drawPath, drawPaint); 
       } 
       drawPath.reset(); 
       break; 
      default: 
       return false; 
     } 
    } 
    invalidate(); 
    return true; 
} 
+0

Добавьте решение в качестве ответа. +1 для выяснения этого – ElefantPhace

ответ

0

Возможно, у вас есть кнопка, которую вы нажимаете, чтобы включить рисование «включено» и «выключено». Если кнопка выбрана, то происходят события рисования. Если кнопка снова нажата для отмены, то случай MotionEvent выполняет события прокрутки/масштабирования. Это пользовательский интерфейс некоторых приложений, таких как Snapchat use, чтобы пользователь мог переключаться между рисованием и сменой фильтров изображений.

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