2016-09-01 2 views
0

나는 다음 코드 조각을 가지고 뷰에 드래그를 처리 할 수있는 마지막 스위치케이스의 포인트,하지만 난 이해 종료 할 수 없습니다 (이 chathead tutorial에서) 어떻게 논리가 작동 : 그래서 내가합니다 (initialX) + 4 (내가 그것을 이동하기 때문에 내 손가락으로 내보기를 클릭하고 O를 받게됩니다 4 params.x에 의해 오른쪽으로 드래그거야 때안드로이드 MotionEven.Action_MOVE

 ... 

     params.gravity = Gravity.TOP | Gravity.LEFT ; 
     params.x = 0; 
     params.y = 100; 

     chatHead.setOnTouchListener(new View.OnTouchListener() { 

     private int initialX; 
     private int initialY; 
     private float initialTouchX; 
     private float initialTouchY; 

     @Override 
     public boolean onTouch(View v, MotionEvent event){ 

      switch (event.getAction()){ 
       case MotionEvent.ACTION_DOWN: 
        initialX = params.x; 
        initialY = params.y; 
        initialTouchX = event.getRawX(); 
        initialTouchY = event.getRawY(); 
        return true; 
       case MotionEvent.ACTION_UP: 
        return true; 
       case MotionEvent.ACTION_MOVE: 
        params.x = initialX + (int) (event.getRawX()-initialTouchX); 
        params.y = initialY + (int) (event.getRawY() - initialTouchY); 
        windowManager.updateViewLayout(chatHead, params); 
        return true; 
      } 

      return false; 
     } 
    }); 

... 

x = 4) - initialTouchX (이 시점에서이 변수의 값을 알지 못함)이 맞습니까?

감사

답변

1

내 params.x 0 (초기 값) + (4) (이동 델타) 수신처이 코드로만 손가락 움직임의 델타 변화를 추적.

+0

Okey! 그래서 initialTouchX는 0이고 절대로 변하지 않을 것입니까? –

+1

아니요. 첫 번째 손가락 터치의 원시 X 위치 (즉, ACTION_DOWN의 event.getRawX())와 각 시간 (ACTION_MOVE의)에서 새 손가락의 위치가 초기화 된 후에 initialTouchX가 계산되므로 델타 만 계산됩니다. –

+0

Ok. (x, y) (0,100), 내 손가락을보기에 밀어 넣고 ACTION_DOWN, intialX가 0을받을 때 오른쪽으로 4 번 이동했습니다. initialTouchX도 0을받습니다 (x = 0에 손가락을 밀었 기 때문에). 델타 4로 새로운 ACTION_MOVE를 호출하면 새로운 event.getrawX는 4를받습니다 : params.x = 0 + (4-0) = 4? –