2010-06-22 73 views
3

我一直試圖在任意位置放置視圖。Android:在任意位置放置視圖

我的目標:要覆蓋一個JPG/PNG的一些長方形,定座標,涉及到JPG/PNG,與其他一些觀點,比如畫廊,或一些視頻。

我不想使用AbsoluteLayout,因爲它是depricated。

因此,我使用RelativeLayout,將一個虛擬文本框定義爲佔位符,並將我的視圖RIGHT_TO和BELOW放在文本框中。

+--------+ 
|TextView| 
|  | (x,y) 
+--------+-----------------------+ 
     |      | 
     |  My View   | 
     |      | 
     +-----------------------+ 

我的問題是:有一個更強大和優雅的方式來做到這一點?

上面提出的方法存在的問題是它非常脆弱:需要重新計算每個新屏幕的座標。我的觀點覆蓋下面的東西。它需要準確放置,這很難做到。

  • 無論何時旋轉或縮放,我都需要重新佈置屏幕。 更糟糕:
    • 在初始時間,放置圖像的典型時間,屏幕的座標無效。將實體放置在屏幕上後,座標有效。爲了精確地將實體放置在屏幕上,我們需要座標。雞肉和雞蛋的問題:(
    • 旋轉時,座標包括邊距而不是視圖本身的寬度(例如:在縱向AVD上顯示一幅肖像ImageView,然後按下CTRL + F12旋轉左側,右側,是完全沒有預期的ImageView的頂部和底部)。
    • 當量表動畫效果,座標縮放。

所以我想找到一個更好的方式來做到這一點。

Thanks 
    M. 
+2

如果你告訴我們,正是你想要什麼來完成的,而不是你想什麼假貨原來的技術來獲得該結果可能有幫助。我懷疑你可以通過一個FrameLayout來完成你想要的內容,這些子對象具有在DIP中定義的特定佈局邊距,或者使用一些嵌套的LinearLayout和佈局權重,但是直到我們看到它適合整體活動佈局的位置以及究竟是什麼你正試圖修正XY座標,我們只是在猜測。 – 2010-06-22 14:11:33

+0

對不起,補充說明一下。那麼重點是我想疊加一些矩形的視頻或畫廊,這是一個JPG/PNG的一部分。給出了疊加的座標,但它們是指JPG/PNG。 謝謝 M – Meymann 2010-06-22 14:53:11

回答

2

的解決方案是很醜陋,它不是相對的,但有些人可能會說這是合理的:

添加的FrameLayout作爲一個容器(而不是RelativeLayout的下面說明)。要顯示的視圖是該FrameLayout的子視圖。 爲了將其放置到位,請添加填充。

void addViewInAnArbitraryRect(Rect rect, 
           Context context, 
           View subjectView, 
           View parent) { 
    FrameLayout container = new FrameLayout(context); 
    parent.addView(container); 
    container.setPadding(rect.left, 
          rect.top, 
          container.getWidth() - rect.right, 
          container.getHeight() - rect.bottom); 
    container.addView(subjectView); 

} 

注:您可能需要在頁面的座標調整到屏幕上的座標。請記住:

  1. 直到onSizeChanged被調用,座標/寬度/高度才準備就緒。
  2. 請勿操作onSizeChanged範圍的視圖,否則它可能會裁剪您的視圖。視圖必須從創建它們的線程的上下文中操縱。爲此使用處理程序。

我希望它對某人有幫助。

Meymann

2

不完全理解你在做什麼,看起來你正在通過使用RelativeLayout爲自己做額外的工作。你試圖在屏幕上放置的東西與任何東西都沒有關係,它基於圖像中的特定座標,因此即使使用其他佈局之一,仍然基本上將某些東西放置在絕對座標中。

至於AbsoluteLayout被棄用,從我讀過的只是勸阻它的使用,因爲它的可變屏幕尺寸的缺點。他們無意實際將其刪除,即使他們確實可以獲取源代碼並將其編譯到您的項目中。

+0

是的,我同意。這絕對是絕對的。它呼喊出「絕對佈局」。你顯然是對的,它是關於軟件的,最糟糕的事情是增加絕對佈局。不過,我想我太過分了,不推薦使用。我只是不想要前向兼容性問題。非常感謝。 – Meymann 2010-06-30 11:43:48

相關問題