2012-08-28 50 views
6

我有兩個文件夾繪製:繪製-MDPI和繪製,LDPIAndroid:從特定的-dpi文件夾訪問drawable?

我想保持這種結構(即我不」希望我的圖片移動到/資產),從而使Android將自動挑選合適藝術品取決於設備密度,但有時我需要訪問較小設備上較大的可繪製版本。

有沒有辦法從代碼訪問drawable-ldpi文件夾?我認爲以下可能的答案,但它沒有工作:

Uri path = Uri.parse("android.resource://com.example.test/res/drawable-ldpi/icon"); 
    imageview.setImageURI(path); //assume imageview is already initialized etc. 

我得到一個java.io.FileNotFoundException(沒有這樣的文件或目錄)警告(它不會崩潰,但它只是沒有按」也可以加載)。

非常感謝您的幫助!

+1

不, –

+0

因此,我最好的選擇是將我的所有圖像加載到資源文件夾中,而不是使用內置檢測的android,手動檢測屏幕密度,並加載相應的圖像。至少我可以根據需要訪問hdpi版本? – romamnmlst

回答

0

一般來說,如果您需要使用HDPI版本,只保留圖像的HDPI版本,而較低密度的手機將自動使用HDPI繪圖,因爲它沒有選擇(例如具有該繪圖的較低分辨率圖像名稱不存在)。

如果您確實需要在hdpi和mdpi版本之間切換,我建議使用不同的文件名並以編程方式交換,或者如果您喜歡這樣做,則顯示/隱藏XML元素......但是這似乎有點沉重 - 手。

+0

我真的需要使用mdpi,因爲我正在加載很多圖像,並且使用hdpi會導致VM OOM錯誤。 – romamnmlst

+0

那麼,您希望在什麼情況下使用HDPI圖像?爲什麼不簡單地使用兩個drawable,並在需要使用mdpi的情況下交換它們? –

+0

我想用較小的圖像加載屏幕。選擇圖像時,我想顯示該圖像的較大版本。如果我加載hdpi版本並縮小尺寸以適應較小的屏幕,則會出現OOM錯誤。 – romamnmlst

-1
ImageView image = (ImageView)findViewById(R.id.imageView); 
Bitmap bm = BitmapFactory.decodeResource(getResources(),R.drawable.abc); 
image.setImageBitmap(bm); 

嘗試閱讀THIS LINK也爲更多的研究在華電國際和MDPI概念

+0

這將使用系統的正常資源分辨率,所以不會給你更大的圖像。 – Ridcully

2

可能沒有太大的幫助,但有Resources.getDrawableForDensity(),但是這是API 15 :-(

相關問題