2013-05-28 12 views
6

Android 활동에서 이미지를 동적으로 만들고 이동하려고합니다. 그러나 setX() 및 setY() 메서드는 제대로 작동하지 않는 것 같습니다. 이미지를 처음 만들고 배치 할 때 이미지의 위치를 ​​올바르게 설정하지만 이미지를 업데이트하려고하면 이미지가 잘못된 위치에 배치됩니다. 예를 들어, 이미지는 다음에 이동 코드 : ACTION_MOVE의 이미지는 X 및 Y 위치 값이 동일하게 유지 되더라도 이동Android setX() 및 setY() 이상한 행동

ImageView image; 
RelativeLayout layout = (RelativeLayout)findViewById(R.id.activity_this); 

if(action == MotionEvent.ACTION_DOWN){ 

    image = new ImageView(MyClass.this);        
    layout.addView(image, width, height); 
    image.setX(206); 
    image.setY(206); 
} 
else if(action == MotionEvent.ACTION_MOVE){ 

    if(image != null){ 
     image.setX(206); 
     image.setY(206); 
    } 
} 

. 이미지의 부모는 동일하게 유지됩니다. 크기는 동일하게 유지됩니다. x와 y 값을 얻으면 여전히 206을 말하지만 더 이상 활동에 (206, 206)에 놓이지는 않습니다. 왜 이런 일이 일어나고 있는지 나는 분실된다. 내가 물리적으로 위치를 변경하는 경우를 제외하고 이미지가 변경되었다는 어떤 징후도 발견 할 수 없습니다.

답변

13

정말 이런 일이 있어서는 안됩니다. 또는 다른 변수를 설정하고 x와 y를 설정하거나 x를 얻고 y를 얻은 다음 동일한 위치에 대해 각각에 0을 추가하십시오.

RelativeLayout.LayoutParams params = new RelativeLayout.LayoutParams(LayoutParams.WRAP_CONTENT,LayoutParams.WRAP_CONTENT); //WRAP_CONTENT param can be FILL_PARENT 
params.leftMargin = 206; //XCOORD 
params.topMargin = 206; //YCOORD 
childView.setLayoutParams(params); 

자세한 내용이 있습니다 -

당신이 검색 한 경우, Android - Use of view.setX() and setY in api 8에 명시된 바와 같이

, 또한 심지어 API를하기 전에이 같은 8 LayoutParams 작품을 작동 다른 해결책이있다. 이 도움이 되었기를 바랍니다.

+1

Tyvm입니다. params 사용은 저에게 효과적입니다. 나는 아직도 setX와 Y로 무슨 일이 일어나고 있는지 궁금해. 나는 모든 것을 시도했으나 언제든지 값을 어떻게 설정했는지에 상관없이 이미지를 잘못된 위치로 옮겼습니다. 약 30 픽셀의 상수 값으로 너무 멀리 떨어져 있으며 테스트 할 에뮬레이터의 왼쪽에 있습니다. 보기의 부모 또는 다른 것을 변경해야한다고 생각했지만 그렇지 않습니다. 문자 그대로 내가 찾을 수있는 것과 다른 점은 없습니다. – user2423199

+0

밀도가 될 수 있습니까? 숫자를 프로그램 적으로 설정할 때 getResources(). getDisplayMetrics() .px 값을 dp 값으로 변경하는 밀도를 곱해야합니다. – marmor

1

동일한 문제로 실행하십시오. View.setLeft(int)/View.setTop(int) 나를 위해 일했습니다

+0

나를 위해 작동하지 않았습니다. 그냥 내 전망을 수직으로 늘렸다 – tieorange

+1

@tieorange 다운 vote? 나는 당신이 당신을 위해 일하지 않은 모든 대답에 대해 똑같이해야한다고 생각합니다. 그러나 일반적으로 서로 다른 대답을 내놓을수록 비슷한 문제가 실제로는 다른 솔루션을 가질 수 있고 당신을 위해 일할 수 있기 때문에 다른 사람들의 도움으로 문제를 해결하는 시간을 절약 할 수 있습니다. 그렇지 않을 수도 있습니다. 이 경우에 파기를 계속하십시오. 그래서 실제로 다른 사람들에게 도움이 될 수 있기 때문에 특정 사례에 효과가 없다면 실제로 투표 결과를 볼 수있는 실질적인 이유는 없습니다. 다른 솔루션을 공유하도록 장려하십시오. –

0

전체 화면 모드로 활동 중이십니까? 아무도 그것을 전체 화면으로 만들려고하지 않으면 문제가 해결됩니다.

0

꽤 늦게 대답하지만 다른 사람이 같은 문제에 직면 한 경우. 이 레이아웃 파일의 패딩이 나를 위해 그것을 해결했다 : 사람으로

android:paddingBottom="16dp" 
android:paddingLeft="16dp" 
android:paddingRight="16dp" 
android:paddingTop="16dp" 
0

실제로이 문제에 직면, 나는 parentView에 패딩을 제거하여이 문제를 해결할 수 있습니다. 패딩은 레이아웃 크기를 변경하는 것 같습니다. 대답은