2015-02-17 32 views
0

林想知道是否有人可以幫助我的邏輯正確的關於我的程序這些原則。 我在其畫布上繪製出位圖的表面視圖。 我發現這塊代碼可以解決不同分辨率和屏幕密度下的位圖大小問題。像素,密度,屏幕分辨率 - 表面視圖上的位圖?

WindowManager wm = (WindowManager) context.getSystemService(Context.WINDOW_SERVICE); 
    Display display = wm.getDefaultDisplay(); 

    DisplayMetrics metrics = new DisplayMetrics(); 
    display.getMetrics(metrics); 
     Point size = new Point(); 
     display.getSize(size); 
     Log.e("XXX", "Display w/h: " +size.x + "/" + size.y); 

    bmp1 = BitmapFactory.decodeResource(getResources(), R.drawable.speedo); 
    int width = bmp1.getWidth(); 
    int height = bmp1.getHeight(); 
    Log.e("XXX", "w/h: " + width + "/" + height); 

    float scaleWidth = metrics.scaledDensity; 
    float scaleHeight = metrics.scaledDensity; 
    Log.e("XXX", "w/h: " + scaleWidth + "/" + scaleHeight); 

    // create a matrix for the manipulation 
    Matrix matrix = new Matrix(); 
    // resize the bit map 
    matrix.postScale(scaleWidth, scaleHeight); 

    // recreate the new Bitmap 
    bmp2 = Bitmap.createBitmap(bmp1, 0, 0, width, height, matrix, true); 

我在3個設備上記錄了我的值,在畫布上繪製出來之後。

  1. GenyMotion仿真器(598x360)[scale1.0]
  2. 了Lg Optimus2x(800×480)[scale1.5]
  3. OnePlus1(1980x1080)[scale3.0]

的圖像(位圖)我已(在Adobe)是由800像素179 @ 72像素/英寸

在GENYMOTION

=它在267×60

出現在了Lg =它出現在400×90

在OnePlus1 =它出現在800 * 179

我得到的尺寸根據規模如何變化,但在1plus1雖然它說,在長度800,它比長屏幕即1980年!?怎麼可能? 有人可以解釋我究竟發生了什麼邏輯嗎?

回答

0

是的,我發現原因: - 它是因爲我的一個RnD錯誤。

bmp2創建後,然後繪製,我沒有測量它。所以它實際上是800x3 = 2400這是> 1980(屏幕長度)!