我在GIMP中爲我的應用程序創建了背景.png。它的分辨率是640x480,它來自Google搜索,似乎是默認模擬器的分辨率。我的問題是,當我將RelativeLayout
的背景應用於android:[email protected]/bg
並運行它時,圖像中出現很多僞像。彷彿模擬器無法提供足夠的顏色來正確顯示.png。這裏發生了什麼?RelativeLayout中的背景圖像有文物
P.S.這個圖像沒什麼特別,只是簡單的線條和徑向漸變。
我在GIMP中爲我的應用程序創建了背景.png。它的分辨率是640x480,它來自Google搜索,似乎是默認模擬器的分辨率。我的問題是,當我將RelativeLayout
的背景應用於android:[email protected]/bg
並運行它時,圖像中出現很多僞像。彷彿模擬器無法提供足夠的顏色來正確顯示.png。這裏發生了什麼?RelativeLayout中的背景圖像有文物
P.S.這個圖像沒什麼特別,只是簡單的線條和徑向漸變。
它的分辨率是640×480,它從 google搜索,似乎是默認的模擬器
640×480分辨率 甚至沒有在Android的官方支持的分辨率,更何況是一個「默認」一。以下是supported resolutions的列表。
此外,你想看你的顏色深度。我忘記了細節,但由於LCD的侷限性,並非所有東西都可以處理24位顏色。
我收集了3級可能的解決方案:
對你有,創建並在XML使用位圖繪製每個有問題的圖像。
缺點是你創建了多個文件。我測試了其他特殊標誌(包括代碼更改),並沒有注意到任何區別。
RES /抽拉/ image_file.xml
<?xml version="1.0" encoding="utf-8"?> <bitmap xmlns:android="http://schemas.android.com/apk/res/android" android:src="@drawable/problematic_image" />
把有問題的圖像中的可繪製-nodpi文件夾。缺點是它會以這種方式使用更多的RAM,因爲它不會根據密度進行縮減。類似的方法可以在代碼來完成:
final BitmapFactory.Options options = new BitmapFactory.Options(); options.inDensity = 1; options.inSampleSize = 1; options.inTargetDensity = 1; options.inJustDecodeBounds = false; final Bitmap bitmap = BitmapFactory.decodeResource(getResources(), R.drawable.problematic_image, options); imageView.setImageBitmap(bitmap);
如果該文件是PNG文件,採取的像素即至少noticable(例如左下),並改變其不透明度爲254代替255.
這種方法的缺點是它使圖像佔用更多空間,並改變圖像本身。
所有的方法都可以在galaxy s和galaxy s2上使用android 2.3.x。
Android似乎只支持16位顏色。 – dfetter88 2010-07-14 22:40:37
另外,如果圖像放置在/ res/raw /中而不是res/drawable /,它將不會在構建時進行優化。這爲圖像質量提供了一些改進。 – dfetter88 2010-07-15 02:36:20
@ dfetter88:這聽起來像是你正在經歷不同屏幕密度的圖像自動調整大小。理想情況下,你提供每個密度的原始圖像。如果沒有,使用'raw/drawable-nodpi /'來繪製一個不會被重新縮放的drawable資源。 – CommonsWare 2010-07-15 12:12:17