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 (이 시점에서이 변수의 값을 알지 못함)이 맞습니까?
감사
Okey! 그래서 initialTouchX는 0이고 절대로 변하지 않을 것입니까? –
아니요. 첫 번째 손가락 터치의 원시 X 위치 (즉, ACTION_DOWN의 event.getRawX())와 각 시간 (ACTION_MOVE의)에서 새 손가락의 위치가 초기화 된 후에 initialTouchX가 계산되므로 델타 만 계산됩니다. –
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? –