2017-11-11 5 views
0

나는 this 질문을 찾았지만 iOS 개발 용입니다. 나는 안드로이드에서 뭔가하고있어, 아무 도움이되지 않았다.개체 자체를 건드리지 않고 SurfaceView에서 개체를 이동하는 방법은 무엇입니까?

검은 캔버스에 간단한 흰색 사각형이 있으며 onTouchEvent가 설정되어 있습니다. 예상대로 직사각형을 움직일 수는 있지만 이것은 내가 찾고있는 기능이 아닙니다.

화면의 아무 곳이나 터치하고 개체를 움직이는 방법을 알아야합니까? 객체의 X와 Y가 터치 이벤트의 getX() 및 getY()가되지 않도록하고 싶습니다. 지금은

, 나는이 : 이것에 대한

@Override 
public boolean onTouchEvent(MotionEvent event) { 

    switch(event.getAction()) { 
     case MotionEvent.ACTION_DOWN: 
     case MotionEvent.ACTION_MOVE: 
      myPoint.set((int)event.getX(), (int)event.getY()); 
    } 
    return true; 
} 

내 추론은 유혹 손가락없이 그래서 객체가 볼 수 있습니다. 이것이 가능한가? 여기

내가 달성하고 싶은 무슨을의 시각적 표현이다

onTouch example

답변

1

왜 얻고 이전 MotionEvent 다음의 onTouchEvent 콜백 좌표 저장 onTouchEvent 화재 다시 (첫번째 ACTION_MOVE 후 ACTION_DOWN 그리고 각 ACTION_MOVE 콜백에 대해 계속해서) 오프셋 값을 구하고 값 사이의 차이를 구한 다음 자신의 myPoint 좌표를 얻고 현재 값에 오프셋을 더합니다. 이 방법을 사용하면 myPoint 객체를 실제 좌표가 아닌 위치 오프셋만큼 이동시킬 수 있습니다.

이 코드는 테스트되지 않고, 나는이 같은 IDE하지만, 뭔가를 사용하지 않는 한 :이 작업 한

private float oldX; 
private float oldY; 

@Override 
public boolean onTouchEvent(MotionEvent event) { 
    switch (event.getAction()) { 
     case MotionEvent.ACTION_DOWN: 
      oldX = event.getX(); 
      oldY = event.getY(); 
      break; 

     case MotionEvent.ACTION_MOVE: 
      float newX = event.getX(); 
      float newY = event.getY(); 
      float offsetX = getOffset(oldX, newX, myPoint.x); 
      float offsetY = getOffset(oldY, newY, myPoint.y); 

      myPoint.set((int) offsetX, (int) offsetY); 

      oldX = newX; 
      oldY = newY; 
      break; 
    } 
    return true; 
} 

private float getOffset(float oldVal, float newVal, float current) { 
    return current + (newVal - oldVal); 
} 
+0

,하지만 당신은 그것에 나를 이길. 그것은 일종의 일입니다. 내 사각형은 왼쪽 상단에서 오른쪽 하단까지 대각선으로 만 이동합니다. Lol. 그러나 그것은 진보입니다! – IRGeekSauce

+0

좋아, 조금 수정했다. offsetX 및 offsetY 선언에서 myPoint.x 및 myPoint.y를 수행했습니다. 그것은 작동합니다. 나는 너의 대답을 기꺼이 받아 들일 것이다. – IRGeekSauce

+0

@IRGeekSauce ok, 다행히 원하는대로 작동합니다 (완료된 경우에만 업데이트 된 솔루션으로 언제든지 답변을 편집 할 수 있습니다). –

관련 문제