2010-10-19 25 views
2

可能重複:
Android app loading images from /drawables-nodpi/ with scaling的Android /繪製-nodpi /加載縮放

我最近重建我的Android項目的目標從2.1 2.2。

在舊項目中,我沒有指定目標SDK(該清單不包含類似於:android:minSdkVersion =「8」)。這在運行時在控制檯中給了我一個錯誤,但一切正常,所以我沒有騙過它。

新項目現在在清單中使用android:minSdkVersion =「8」。

但是現在我的/ drawable-nodpi /文件夾中的drawable會加載縮放,使它們變得更小並且顯着改變所需的視覺效果。

如果我從清單中刪除標籤,它們會正確加載而不縮放。

即使加載我的圖片像這樣:

 BitmapFactory.Options opts = new BitmapFactory.Options(); 
     opts.inScaled = false; 
     Bitmap bm = BitmapFactory.decodeResource(_resources, resId, opts); 

當我宣佈清單中的最低SDK他們仍然縮放,但如果我刪除標籤不進行縮放。

這是怎麼發生的?如何在不擴展的情況下加載它們,同時仍然聲明最小的SDK?

回答

0

當你設置minsdkversion時,你告訴Android應用程序可以從Android 8的API級別8工作。之前,由於您沒有指定,Android知道如何處理資產,但現在使用清單中的minsdkversion行,您正在提供指導方針。

請閱讀Android herehere中如何實施所有資產和資產層次結構。這可能不是您想要的快速解決方案,但它可以幫助您更好地瞭解Android平臺。

+0

謝謝你的迴應 - 我花了大量的時間閱讀這兩個頁面已經試圖解決這個問題。它甚至特別提到將文件放置在我已經完成的/ drawable-nodpi /文件夾中,以避免縮放。它們仍在縮小。爲什麼android:minSdkVersion =「8」會導致它決定應該縮放nodpi文件夾中的圖像,即使所有文檔都表示它們不會是? – jjj 2010-10-19 16:56:37

+0

我能想到的一件事是,您在hdpi/mdpi/ldpi文件夾中以及在nodpi文件夾中擁有相同的資產。根據Android處理文件夾層次結構的方式,它可能會這樣做。 – omermuhammed 2010-10-19 19:27:46

+2

我的所有圖形資源都獨佔在nodpi文件夾中。我正在製作一個以編程方式在表面上繪製位圖的遊戲,並且沒有任何應該縮放DPI的情況。我一直無法找到任何解決方案......我是否可以將minSdkVersion標籤從我的清單中刪除,或者我在發佈時遇到問題? – jjj 2010-10-19 22:33:17

0

我知道這是一個古老的問題,答案可能對你今天來說意義不大,但是因爲我只是爲了一天半的努力而摔跤,我想我會爲其他人拋出答案。

不管我做了什麼,我的圖片都會從資源中以奇怪的比例加載。我嘗試了所有的方法,從使用Options.inScaled = false設置inDensity = 160,甚至使用InputStream並解碼流中的位圖。沒有任何工作......原始尺寸爲340x480的圖像總是裝載像321x481這樣的奇怪尺寸,無論如何。

我去看看源圖像本身,看看它保存在什麼dpi/ppi。圖像是以正確的尺寸創建的,但其內部的ppi爲72.我將圖像更改爲160ppi(渲染尺寸),然後將尺寸縮小到原始像素。使用這個新的源圖像,與160dpi的顯示器匹配的160ppi,其渲染效果與預期一致,沒有任何奇怪的縮放。因此,請記住,如果您的源圖像根本無法進行縮放,則應確保將它們設置爲與您的密度相匹配的ppi,或者當您從bitmapfactory解碼位圖時選擇指定ppi圖像本身是爲了填充而創建的。

1

沒有給出here另一種解釋:

「如果你不指定<支持屏>或minSdk,那麼你的應用程序將在兼容模式下運行,這意味着它給了HVGA(240×320)」虛擬屏幕「,然後將其作爲一個整體縮放,因此您的圖像將被縮放。」

原來的海報因此在此兼容模式下運行他們的應用程序,圖像自動從HVGA擴展到實際的屏幕分辨率;通過添加minSdkVersion,圖像不再縮放,因此顯得更小。