2011-09-05 21 views
4

我將自定義View添加到父佈局,女巫是RelativeLayout。查看已移動但仍位於左上角

我還需要移動此查看屏幕,所以我做:

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

這工作。每次我打電話時,視圖都會移動。

的問題是,當這種觀點被移動,
其副本保持掛在佈局的左上角,
這樣的:

enter image description here

爲什麼發生這種情況,以及如何我能阻止這個嗎?

謝謝


- 編輯 -

一些下面的代碼。

在我的自定義視圖的構造:

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

我那麼這個視圖添加到它的父:

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

當我需要移動視圖我只是做:

myView.layout(startX, startY, width, height); 
myView.invalidate 
+0

請首先添加代碼 –

+0

!確保仍然存在的視圖(應該移動的視圖)仍然是可點擊的!並告訴我是否請 –

+0

不,保存在角落的圖像不可點擊。 Tkanks – Tsimmi

回答

2

我發現了這種奇怪行爲的原因。
這是我的錯。

每當改變了這個消息氣球的位置,
我以及主叫view.draw(canvas)
並且由於這個原因,有人正在繪製兩次。

非常感謝大家。

1

我想你忘了要求一張繪圖卡。在您的myView上致電invalidate()。

+0

我沒有提到,但我已經在'layout(...)'調用之後立即調用'invalidate()'。謝謝 – Tsimmi

1

您可以使用TranslateAnimation移動您的視圖。如果你有setFillAfterEnabled(true);那麼它會留在你翻譯它到達的地方。

1

使用具有RelativeLayout的確切位置看起來像一個骯髒的黑客。我認爲你應該使用AbsoluteLayout。它已被棄用,但它在一些Android應用程序中使用(例如Browser),所以我不認爲它會被刪除。但是,如果您不想使用棄用的類,則可以將其源代碼複製到您的項目中。

2

根據documentationlayout方法應該用於視圖組中視圖佈局的onLayout階段。如果你想暫時移動視圖到另一個位置,使用offsetLeftAndRight(int offset)offsetTopAndBottom(int offset).

如果沒有幫助,你將不得不setLayoutParams的視圖。

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