2011-09-05 4 views
4

부모 레이아웃에 맞춤보기를 추가하고 있습니다. 마녀는 RelativeLayout입니다.이동 된보기가 여전히 왼쪽 상단에 있습니다.

myView.layout(xx, yy, width, height); 

이 작동 :

나는 또한 내가 할 수 있도록 화면이보기를 이동해야합니다. 내가 이것을 호출 할 때마다보기가 이동됩니다.

문제는이 뷰가 이동 될 때, 그것의
사본 왼쪽 상단 레이아웃의 코너,이 같은
에 매달려 유지한다는 것입니다 :

enter image description here

왜 이런 일이 발생하는 방법 이걸 막을 수 있을까요? 편집 - - 아래

일부 코드

당신에게


감사드립니다.

myView.layout(startX, startY, width, height); 
myView.invalidate 
: 난 그냥 이렇게보기를 이동해야하는 경우

final RelativeLayout.LayoutParams params = new RelativeLayout.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT); 
parentLayout.addView(myView, params); 

: 다음 부모이보기를 추가

LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
inflater.inflate(R.layout.ipmaps_lib_balloon_overlay, this); 

: 내 사용자 지정보기의 생성자에서

+0

먼저 코드 –

+0

을 추가하십시오! 아직 이동해야하는 뷰 (이동해야하는 뷰)가 여전히 클릭 가능해야합니다! 제발, 제발 말해주세요 –

+0

아니, 구석에 보관 된 이미지는 클릭 할 수 없습니다. Tkanks – Tsimmi

답변

2

나는이 이상한 행동의 이유를 발견했다.
그건 내 잘못 이었어. I이 메시지 풍선의 위치를 ​​변경할 때마다

, I뿐만 아니라 view.draw(canvas) 호출 된
,
및이 이유로, 뷰 회 그려지 하였다.

대단히 감사합니다.

1

도면 패스를 요청하는 것을 잊어 버린 것 같습니다. myView에서 invalidate()를 호출하십시오.

+0

나는 그것을 언급하지 않았지만 이미 'layout (...)'호출 바로 뒤에 'invalidate()'를 호출하고있다. 감사 – Tsimmi

1

TranslateAnimation을 사용하여보기를 이동할 수 있습니다. 그리고 만약 당신이 setFillAfterEnabled(true);을 가지고 있다면, 그것은 그곳에 도착한 후에 그것을 계속 번역 할 것입니다.

1

정확한 위치를 RelativeLayout과 함께 사용하면 더러운 해킹처럼 보입니다. 대신 AbsoluteLayout을 사용해야한다고 생각합니다. 일부 Android 앱 (예 : Browser)에서 사용되었으므로 제거되지 않을 것으로 생각됩니다. 그러나 비추천 클래스를 사용하지 않으려는 경우 소스를 프로젝트에 복사하면됩니다.

2

documentation에 따르면, 뷰 그룹의 뷰 배치 배치 단계에서 layout 방법을 사용해야합니다. 당신이 다른 위치로 일시적으로 뷰를 이동하려면 그 문제가 해결되지 않으면, 당신이보기에 대해 setLayoutParams해야합니다, offsetLeftAndRight(int offset)offsetTopAndBottom(int offset).

를 사용합니다.

RelativeLayout.LayoutParams params = view.getLayoutParams(); 
params.setMargins(int left, int top, int right, int bottom); 
view.setLayoutParams(params); 
관련 문제