2011-12-20 29 views
4

開發一個圖形應用程序,應該對任何屏幕大小的工作需要一些思考 通常我創建高分辨率的圖形,並以適合屏幕的規模。Android的位圖 - 最佳實踐

我見過的建議,以避免使用「實像素」 我試圖與密度和DP的工作,但它似乎更復雜然後用我用 與解決找不到更好的方式來擴展其他我的圖形然後使用該設備屏幕(實像素)

我創造了這個類來擴展我的圖片(基於真實像素) 這解決了我的大部分問題(仍然有一些設備具有不同的縱橫比) ,似乎做工精細。

public class BitmapHelper { 
    // Scale and keep aspect ratio 
    static public Bitmap scaleToFitWidth(Bitmap b, int width) { 
     float factor = width/(float) b.getWidth(); 
     return Bitmap.createScaledBitmap(b, width, (int) (b.getHeight() * factor), false); 
    } 

    // Scale and keep aspect ratio  
    static public Bitmap scaleToFitHeight(Bitmap b, int height) { 
     float factor = height/(float) b.getHeight(); 
     return Bitmap.createScaledBitmap(b, (int) (b.getWidth() * factor), height, false); 
    } 

    // Scale and keep aspect ratio 
    static public Bitmap scaleToFill(Bitmap b, int width, int height) { 
     float factorH = height/(float) b.getWidth(); 
     float factorW = width/(float) b.getWidth(); 
     float factorToUse = (factorH > factorW) ? factorW : factorH; 
     return Bitmap.createScaledBitmap(b, (int) (b.getWidth() * factorToUse), (int) (b.getHeight() * factorToUse), false); 
    } 

    // Scale and dont keep aspect ratio 
    static public Bitmap strechToFill(Bitmap b, int width, int height) { 
     float factorH = height/(float) b.getHeight(); 
     float factorW = width/(float) b.getWidth(); 
     return Bitmap.createScaledBitmap(b, (int) (b.getWidth() * factorW), (int) (b.getHeight() * factorH), false); 
    } 
} 

和我的問題是:

  1. 爲什麼避免 「實像素」 建議?
  2. 什麼是縮放位圖到屏幕的最佳實踐(教程 的好文章更然後歡迎)
  3. 什麼是使用我使用的方法或者我應該知道使用這種方法
  4. 時的利弊

感謝您的意見

[編輯] 我忘了提,我通常使用SurfaceView我的應用程序(如果這有什麼區別)

+0

另請參見[this](http ://stackoverflow.com/a/823966/556337)。這將是有益的爲你的智能解碼的ByteArray的問題,以位圖 – teoREtik 2011-12-20 17:50:38

回答

0
  1. 永遠不要讓你的應用程序像素完美。它不適用於其他決議。處理圖像大小的方式並不是必需的,因爲當您製作出可擴展的可擴展布局時,Android會爲您執行此操作。你應該使圖像的所有dpi的類型和使用資源預選賽它們分開你的資源(繪製-LDP文件夾,繪製-MDP文件夾,..等)
  2. 請勿自行擴展位圖,正如我所說,Android將爲你做這個。您可以影響Android的擴展你的位圖的方式,請參閱http://developer.android.com/reference/android/widget/ImageView.html#attr_android:scaleType
  3. Android將計算出正確的大小爲您服務。通過這種方式,您無需自己完成所有的數學運算,即可在屏幕上顯示所有內容。構建一個運行在所有類型設備上的好應用需要努力製作多套可繪製設備,可能需要多套佈局(風景/人像,小型/大型屏幕)等。
+0

一想,我忘了提..我目前使用SurfaceView。它是否會影響? – Nir 2011-12-20 17:12:55

+0

好吧,我明白「永遠不會讓應用像素完美」。我不確定我是否理解正確的方法。例如,我創建了一個圖像800x480,這是我的設備的分辨率。然後我用DecodeBitmap(),但「機器人」自動縮放我的圖像1200x720這在我看來是錯誤的決定加載它。爲什麼?我怎樣才能相信自動縮放? – Nir 2011-12-21 11:10:33

+0

800x480非常適合您的屏幕,但不適用於其他手機和平板電腦。在你的XML佈局中,你應該使用不同類型的佈局類型(RelativeLayout,LinearLayout,TableLayout等),並在DP中提供尺寸或使用fill_parent或wrap_content。如果你需要,你可以增加一些重量。請閱讀以下文章: http://developer.android.com/reference/android/view/View.html – Jordi 2011-12-21 14:25:43