2013-01-07 3 views
1

나는 메서드를 재정의하고 이동 이벤트에서 이벤트 액션 (x, y) 좌표를 기반으로 내 View의 위치를 ​​변경/변환하므로 드래그 할 수있는 View이 있습니다. 하나! 예를 들어 내 View을 드래그하면 이벤트 동작의 x 좌표가 꾸준히 증가하지 않고있는 것을 볼 수 있습니다 (즉 ... 15, 16, 17, 18 ...) 대신 인터리브됩니다 (즉 ... 15, 23, 16, 24, 17, 25 ...) 따라서 내 View은 갑자기 움직입니다. (왼쪽, 위, 아래로 드래그하는 것과 마찬가지로)이동 액션 jerking

누구나 이것이 어째서 그런지, 어떻게 피할 수 있는지 알고 있습니까?!

여기 ... 내 onTouchEvent(..) 방법이다

@Override 
public boolean onTouchEvent(MotionEvent event) 
{ 
    switch (event.getAction()) 
    { 
    case MotionEvent.ACTION_DOWN: 
    // make note of the down action's (x, y) coordinate 
    action_down_x = event.getX(); 
    action_down_y = event.getY(); 
    return true; 
    case MotionEvent.ACTION_MOVE: 
    // work out displacement 
    dX = event.getX() - action_down_x; 
    dY = event.getY() - action_down_y; 
    // code here to move the view 
    return true; 
    case MotionEvent.ACTION_UP: 
    return true; 
    } 

    return super.onTouchEvent(event); 
} 

답변

1

문제는 아주 간단합니다 : 두 상대 좌표와 함께 노력하고 있습니다. 보기에서 onTouchEvent()을 겹쳐 쓰면 값 10,10이 표시 될 수 있습니다. 이제 손가락을 움직이면 새로운 가치를 얻게됩니다. 9,9를 말하면 뷰의 위치가 바뀌므로 손가락이 뷰 좌표계의 10,10에 다시 위치하게됩니다.

내가하는 일 : 동일한 좌표계를 유지하도록 부모의 onTouchEvent()을 재정의하십시오. 구현이보기에 좋으므로 부모 뷰/활동으로 코드를 옮기면 쉽게 작동합니다.

+0

그걸 고쳤습니다. 감사. 아래쪽면은 부모가 터치 이벤트의 좌표에서 어떤 하위보기를 눌렀는지 확인해야한다는 것입니다. –

+1

각보기에는 저장된 경계가 있어야하므로 터치 이벤트가 하위보기의 경계를 치는 간단한 루프 여야합니다. 그리 어려운 일이 아닙니다 :) 팁 :'Rect.contains (x, y)' – WarrenFaith