2014-12-29 22 views
0

我的任務是允許用戶上傳圖片並讓用戶在他點擊的任何位置放置自定義視圖。 (就像在Facebook上發佈圖片)通過獲取觸摸位置並動態地將視圖添加到相對佈局並設置leftMargin和topMargin,很簡單。將視圖置於同一個地方,適用於所有的Android設備

但我想要這個自定義組件在每個Android設備的'確切'相同的位置繪製。

例如;假設你上傳了一張照片到你的個人資料中並給某人加標籤,其他人使用不同的設備查看你的照片時,應該在與圖片完全相同的地方看到標籤。

我知道我也必須考慮屏幕密度,但不知道如何操作x,y。

看的示例屏幕截圖: (藍色盒由用戶點擊放)

這截圖是從與屏幕密度1的試驗裝置,與密度1.5另一設備示出了處於不同位置的藍色框。

(圖片更新:)

Device with density 1

Device with density 1,5

這是一個測試代碼:

  icon = new ImageView(getActivity()); 
      icon.setBackgroundColor(getResources().getColor(R.color.blue)); 
      RelativeLayout.LayoutParams params = new RelativeLayout.LayoutParams(30, 40); 
      int density = this.getResources().getDisplayMetrics().density; 
      params.leftMargin = (int)(posX/density); 
      params.topMargin = (int)(posY/density); 
+0

是posX/Y int?如果是這樣,在將它們轉換爲整數之前,嘗試將它們和密度轉換爲浮點數。 –

+0

這並沒有真正改變。藍色框出現在不同設備的不同位置 –

回答

1

想想,你上傳圖片到您的個人資料和標記的人,其他人用不同的設備看你的照片應該會看到標記在完全相同的地方。

然後你不想放置「一個絕對的X,Y爲所有Android設備」的視圖。

例如,假設我們有兩個設備,A和B.在設備A上,您的圖像是一個小型手機,並且圖像恰好以480像素高,270像素寬的大小渲染。用戶輕敲的位置恰好是從頂部向下80個像素和從左側至70個像素。

設備B的屏幕大小約爲土耳其國家的大小。更具體地說,您的圖像在縱向1600像素,900像素,mdpi屏幕密度下呈現,意味着圖像高度爲10,078,736,000像素,高達5,669,289,000像素寬。

您不希望將標記從頂部向下80像素,從左側向下70像素。這將使標記幾乎位於左上角。

假設您安排以相同長寬比顯示圖像,您需要保存標記來自某個角落的百分比。在這個例子中,頂部80像素是80/480或頂部〜16.7%,左邊70像素是70/270或左邊約25.9%。然後,您可以將百分比應用於其他設備上的圖像大小,因此在土耳其大小的屏幕上顯示標記〜16.7%,左側〜25.9%。或在平板電腦上。或者在更大的手機上。或在電視上。或者你選擇使用什麼。

+0

感謝您的回答。我已經完成了真正的設備測試,但仍然存在問題。這些是計算: –

+0

我的imageview在寬度和高度上都是匹配父項。你可以看到,它現在正以某種方式:與密度1 設備:圖像高度:996圖像寬度:736 BLUEBOX POSY:473 - BlueBoxPOSX:119 重量%47.49 寬度%16.16 設備與1.5密度:圖片身高:469圖像寬度:432 BlueBox POSY:245 - BlueBox POSX:102 –

相關問題