2014-11-15 2 views
0

나는 그림 그리기를 위해 안드로이드 페인트 응용 프로그램을 만들려고 노력하고 있으며 그리는 선을 움직이는 데 문제가 있습니다.Android에서 캔버스의 경로를 이동하는 방법은 무엇입니까?

내가 시도한 것은 ACTION_MOVE 동안 OnTouchEvent의 초기 손가락 누름 좌표와 현재 좌표 간의 차이로 현재 선택된 행의 경로를 오프셋하는 것이 었습니다.

case MotionEvent.ACTION_MOVE: 
selectline.getLine().offset(x - otherx, y - othery); 

ACTION_MOVE 중에 otherx 및 othery가 x 및 y 좌표로 설정되고 x 및 y는 현재 커서 좌표입니다. 내 라인은 경로, 색상, 두께 및 경계 상자를 포함하는 별도의 클래스로 저장됩니다.

내가 얻은 것은 사소한 움직임을 멈추지 않고 손가락의 방향으로 스크린에서 날아 오는 모양이었습니다. 행렬을 사용하여 경로를 이동하려고 시도했지만 결과는 같습니다.

"do while"을 삽입하려고하면 현재 좌표가 경로의 .computeBounds() 직사각형 중심과 일치하는지 확인하지만 손가락을 움직이면 프로그램이 충돌합니다.

감사합니다. 감사드립니다.

답변

0

좌표에 올바른 척도를 사용하지 않았을 가능성이 큽니다.

출처 : Get Canvas coordinates after scaling up/down or dragging in android

float px = ev.getX()/mScaleFactor + rect.left; 
float py = ev.getY()/mScaleFactor + rect.top; 
// where mScaleFactor is the scale use in canvas and rect.left and rect.top is the coordinate of top and left boundary of canvas respectively 
+0

답장을 보내 주셔서 감사합니다,하지만 좌표에 잘 될 것 같다. ACTION_UP에 "selectline.getLine() .offset (x - otherx, y - othery)"를 추가하고 모양을 원하는 곳으로 정확히 이동했습니다. 내 문제는 내가 ACTION_MOVE 동안 실시간으로 내 손가락을 따라 가고 싶다는 것이다. – Vodyara

+0

ACTION_DOWN 중에 좌표를 올바르게 설정하지 않았을 수 있습니다. 비슷한 문제에 대한 링크는 다음과 같습니다. http://stackoverflow.com/questions/9398057/android-move-a-view-on-touch-move-action-move – user3806339

0

조금 늦게 그것하지만 다른 사람의 문제를 해결할 수 있습니다. 나는이 같은 문제를 해결, 는 onLongPress

public void onLongPress(MotionEvent motionEvent) { 

     try { 
      shapeDrag = true; 
      SmEventX = getReletiveX(motionEvent); 
      SmEventY = getReletiveY(motionEvent); 
     } catch (Exception e) { 
      e.printStackTrace(); 
     } 

을 초기 X, Y 위치를 가져온 다음 onToucn (MotionEvent 이벤트)

case MotionEvent.ACTION_MOVE: { 
        actionMoveEvent(motionEvent); 
        try { 

         if (shapeDrag) { 
          StylePath sp = alStylePaths 
            .get(alStylePaths.size() - 1); 
          Path mpath = sp.getPath(); 


          float tempX = getReletiveX(motionEvent) - SmEventX; 
          float tempY = getReletiveY(motionEvent) - SmEventY; 

          mpath.offset(tempX, tempY); 
          SmEventX = getReletiveX(motionEvent); 
          SmEventY = getReletiveY(motionEvent); 


         } 
        } catch (Exception e) { 
         e.printStackTrace(); 
        } 

        break; 
       } 
    } 
관련 문제