2012-07-13 33 views
0

我的問題只是在標題中。 我試圖把圖像放到我的佈局中,我用一個FrameLayout的背景與wrap_content寬度和高度一起嘗試了這一點,並嘗試使用imageView和所有可能的fitScale屬性。爲什麼我的720像素圖像在我的720像素星系S3中出現失真

我只是不能明白爲什麼我的720像素寬度圖像是成功的一半在我的手機屏幕的寬度,這是三星Galaxy S3擁有720個像素寬度....

我真正的問題:

什麼是確保我的應用程序的圖片不會出現任何扭曲的最佳方式?

+1

Galaxy S3是360dp的寬度,使用fill_parent來表示ImageView的寬度,scaleType = fitXY。將720px寬的圖像放在drawable-xhdpi文件夾中,可以將縮小的副本放在drawables和drawables-hdpi文件夾中。 – CSmith 2012-07-13 16:07:11

回答

3

首先,您需要考慮屏幕密度和傾角值,而不是像素。這意味着您正在處理一個「虛擬屏幕」,其中1個垂度(密度獨立像素)表示根據設備不同的實際屏幕像素數量。

對於可繪有以下類別得到任何屏幕上清晰的結果:

  • LDPI(比例係數0.75)
  • MDPI(默認/基準:比例係數1.0)
  • 華電國際(1.5)
  • xhdpi(2.0)

創建不同尺寸的versio根據這些比例因子生成的ns位圖可以在任何屏幕上獲得清晰的結果。你應該從最高分辨率的xhdpi開始,以避免因放大而造成的質量損失。

將這些不同的版本放入它們各自的可繪製文件夾(res/drawable-ldpi,res/drawable-mdpi ...)。這些不同版本的同一個位圖必須使用相同的文件名,否則不起作用。

其次,你不應該對設備屏幕的高度和寬度做出有力的假設。您需要佈局視圖和圖形,以便動態地利用整個屏幕而不知道確切的屏幕分辨率。然而,你可以對基於該configuration qualifiers

  • 正常
  • XLARGE

儘量避免固定的尺寸,根據您的觀點,這些屏幕分辨率弱假設任何假設。總是避免佈局XML文件中的「px」值。使用「dip」代替。

閱讀文檔Supporting Multiple Screens瞭解更多信息。

想要達到的效果聽起來像是希望圖像佔據屏幕的整個寬度。

如果您將圖像設置爲任何視圖的背景(例如FrameLayout),則圖像的顯示剪輯取決於該視圖的大小。

如果該視圖將layout_width/layout_height設置爲wrap_content,那麼其大小取決於其子視圖的尺寸和排列方式。 在FrameLayout的情況下,它取決於FrameLayout的單個子項的大小。

如果您使用ImageView,默認情況下圖像將被縮放以適合ImageView的大小。 ImageView的大小取決於其layout_width/layout_height值。如果您將這些值設置爲match_parent,並且如果ImageView有足夠的空間「增長」,您應該能夠在整個屏幕上看到圖像。

「增長空間」取決於ImageView在佈局中的上下文。它是否有鄰居佔用空間?父視圖是否太小(例如,因爲wrap_content)?尋找這些可能的問題。

+0

完美無瑕的答案。 – 2012-07-16 10:17:44

相關問題