相關問題here on stackoverflow。
如果您的圖像是從互聯網下載的,.getIntrinsicWidth()
和.getIntrinsicHeight()
確實會給出圖像的「真實」寬度和高度。
它被稱爲內在的,因爲它只取決於圖像和其他任何東西(比如你的手機)。
唉,你得到的東西在所有情況下都不是內在的 - 不幸的是,它取決於圖像以外的東西。
這裏是你得到一個錯誤的(即非內在的)結果。假設您使用的是默認啓動器圖標,那麼
Log.i("", "ic_launcher intrinsic width " + getResources().getDrawable(R.drawable.ic_launcher).getIntrinsicWidth());
會告訴您啓動器圖標的寬度(以像素爲單位)。但是哪一個呢? - 你有幾個,一個在drawable-xhdpi文件夾中,一個在drawable-hdpi文件夾中,等等。好吧,如果你的設備是xhdpi,它會給你96,這的確是像素寬度的版本啓動器圖標駐留在drawable-xhdpi文件夾中。現在,刪除drawable-xhdpi文件夾中的圖標,然後再次運行(仍使用xhdpi設備(真實或模擬))。將使用的圖像將來自drawable-hdpi文件夾,因爲這與xhdpi版本「最接近」。該圖標的像素寬度爲72.但上面的代碼仍然會給你96!
這顯然不是「內在的」(在正確的意義上來說),因爲它不僅僅取決於使用的圖像。因此,如果你像我一樣懶惰,並且因此不會生成每個資源圖標/圖像的4個版本(但是僅使用1或2,並且用手來縮放它們),則必須提防提及的androidal名不副實。
正確的答案在這裏http://stackoverflow.com/questions/6536418/android-why-are-the-width-height-of-the-drawable-in-imageview-wrong – mathheadinclouds