사각형 (400dp 높이 및 400dp 너비) 인 팝업 창을 만들어야했습니다. 이제 팝업의 왼쪽 상단에있는 버튼을 탭하면 드래그하고 싶습니다. 나는 팝업에 배치 레이아웃에 onTouch()을 설정하고이 내가 드래그하기 위해 사용하는 코드입니다 :Android : 팝업 창 드래그
@Override
public boolean onTouch(View v, MotionEvent event) {
int eventAction = event.getAction();
switch (eventAction) {
case MotionEvent.ACTION_MOVE: // Drag event
xRow = (int) event.getRawX() - rootView.getWidth();
yRow = (int) event.getRawY() - rootView.getHeight();
/* Updates the position of the popup on the screen */
update(xRow, yRow, -1, -1);
break;
}
return true;
}
문제를이 태블릿에서만 넥서스 7에 대한 작동하는 것 같다이다 10 인치가 제대로 작동하지 않습니다. 더 큰 태블릿으로 드래그하면 손가락과 팝업 사이에 공간이 생깁니다. 그래서 제가 사용하는 측정 단위가 올바른 단위가 아니라고 가정합니다. 통계를 사용하려고했지만 성공하지는 못했습니다. 누구든지 나를 도울 수 있습니까?
내가 rootView의 폭이 getRawX() 값과 아무 상관이 볼 수 없습니다. 모든 것이 원시 픽셀이기 때문에 여기에는 단위 문제가 없어야합니다. 그러나 계산 논리가 합리적이지는 않습니다. – SDJMcHattie
일반적으로 객체 드래그를 처리 할 때 'MotionEvent.ACTION_DOWN'에서 터치의 원래 X 위치와 원래 Y 위치를 기록합니다. 동시에 움직이는 뷰의 원래 위치를 기록합니다. 그런 다음'MotionEvent.ACTION_MOVE'에서 델타 X 값을 얻기 위해 새로운 X 위치에서 원래의 X 위치를 뺍니다. 저는 델타에게 Y를 받기 위해서도 똑같이합니다. 그런 다음 이동 된 뷰의 원래 위치에 이들을 추가하면 손가락을 완벽하게 추적하는 부드러운 움직임을 얻을 수 있습니다. – SDJMcHattie
down 액션에서 두 델타 dx와 dy를 계산합니다 : dx = currentx - event_raw_x, dy와 동일하고 이동 작업에서 사용 new_x = event_raw_x + dx 및 new_y와 동일 – pskink