Android
애플리케이션에 대해 Drag and drop
동작을 코딩했습니다. 지금까지 내 HTC One
및 내 Samsung S3
에 완벽하게 작동합니다. 기본적으로보기에서 leftMargin
및 topMargin
을 이동하도록 설정합니다.Android 세트 LeftMargin이 일부 기기에서 작동하지 않습니다.
Xperia Arc S
에서 시도해 볼 때 topMargin
을 설정하고 아무 문제없이 수직으로보기를 이동할 수 있습니다. 하지만 일단 수평으로 이동하려고하면 (leftMargin
설정) 작동하지 않습니다. 프로그래밍 방식으로 leftMargin
을 설정할 수도 없습니다.
나는 매우 간단한 코드를 가지고 있지만, Xperia
에서 무엇이 잘못되고 있는지, 그리고 다른 장치에서 제대로 작동 하는지를 알 수 없습니다.
params.topMargin = (int) event.getRawY() - view.getHeight();
params.leftMargin = (int) event.getRawX() - (view.getWidth()/2);
// Set bounds
if (params.topMargin < 0) params.topMargin = 0;
if (params.topMargin + viewHeight * 3/2 > display.heightPixels) params.topMargin = display.heightPixels - viewHeight * 3/2;
if (params.leftMargin < 0) params.leftMargin = 0;
if (params.leftMargin + viewWidth > display.widthPixels) params.leftMargin = display.widthPixels - viewWidth;
view.setLayoutParams(params);
내가 leftMargin
, display.widthPixels
및 viewWidth
의 값을 표시하는 경우
leftMargin
= -100에서 600 사이의 값
widthPixels
= 480 및
viewWidth
= 316).
Xperia
에 문제가 있습니까? 아니면 내 코드에 오류가 있습니까?
귀하의 소중한 도움에 감사드립니다.
편집 : 솔루션은 4.4 안드로이드
FrameLayout.LayoutParams paramsOld = (FrameLayout.LayoutParams) view.getLayoutParams();
FrameLayout.LayoutParams params = new FrameLayout.LayoutParams(paramsOld.width, paramsOld.height, Gravity.TOP);
params.topMargin = (int) event.getRawY() - view.getHeight();
params.leftMargin = (int) event.getRawX() - (view.getWidth()/2);
// Set bounds
if (params.topMargin < 0) params.topMargin = 0;
if (params.topMargin + viewHeight * 3/2 > display.heightPixels) params.topMargin = display.heightPixels - viewHeight * 3/2;
if (params.leftMargin < 0) params.leftMargin = 0;
if (params.leftMargin + viewWidth > display.widthPixels) params.leftMargin = display.widthPixels - viewWidth;
view.setLayoutParams(params);
view.invalidate();
여백 넘침 옵션이 있습니까? 그렇다면 시도해보십시오. – kupsef
무엇을 의미합니까? 'view'는'height'와'width' 둘 다에 대해'wrap_content'를 가진 간단한'LinearLayout'입니다. 패딩이없고 요소가 화면 너비의 25 % 만 차지하는 것을 볼 수 있습니다. 어느 것이 매우 disapointing인지, 그것은 내 HTC에서 완벽하게 작동하지만 내 Xperia에서는 그렇지 않습니다. – Manitoba
invalidate()를 호출하여 명시 적으로보기를 무효화하고 있습니까 –