2012-10-01 60 views
0

我的代碼來設置壁紙(需要android.permission.SET_WALLPAPER)安卓:設置壁紙,以適應屏幕

// this is inside activity 
WallpaperManager wallpaperManager = WallpaperManager.getInstance(this); 
wallpaperManager.setBitmap(bitmap); 

我的問題是,我怎麼能爲了設置調整此代碼壁紙適合屏幕兩種選擇:

  1. 如果圖像分辨率低於屏幕分辨率 - 拉伸 它。
  2. 如果圖像分辨率高於屏幕分辨率 - 將其縮小。

注意:我已經嘗試將位圖縮放到屏幕的分辨率,然後將其設置爲牆紙,但實際上它看起來甚至比無縮放更值得。

+0

也許調整位圖以適應屏幕?位圖resizedBitmap = Bitmap.createScaledBitmap(bitmap,newWidth,newHeight,true); –

+0

坦米爾,我已經嘗試過,將位圖縮放到屏幕的分辨率,但它看起來甚至值得...這真的很奇怪。 – Genry

+0

你想讓圖像填滿屏幕或將圖像完全放入屏幕邊界內嗎? –

回答

0

我做了一個應用程序來設置壁紙和我tryed的很多事情......在一個真正爲我工作的這個方法:

// Crop or inflate bitmap to desired device height and/or width 
public Bitmap prepareBitmap(final Bitmap sampleBitmap, 
          final WallpaperManager wallpaperManager) { 
    Bitmap changedBitmap = null; 
    final int heightBm = sampleBitmap.getHeight(); 
    final int widthBm = sampleBitmap.getWidth(); 
    final int heightDh = wallpaperManager.getDesiredMinimumHeight(); 
    final int widthDh = wallpaperManager.getDesiredMinimumWidth(); 
    if (widthDh > widthBm || heightDh > heightBm) { 
     final int xPadding = Math.max(0, widthDh - widthBm)/2; 
     final int yPadding = Math.max(0, heightDh - heightBm)/2; 
     changedBitmap = Bitmap.createBitmap(widthDh, heightDh, 
       Bitmap.Config.ARGB_8888); 
     final int[] pixels = new int[widthBm * heightBm]; 
     sampleBitmap.getPixels(pixels, 0, widthBm, 0, 0, widthBm, heightBm); 
     changedBitmap.setPixels(pixels, 0, widthBm, xPadding, yPadding, 
       widthBm, heightBm); 
    } else if (widthBm > widthDh || heightBm > heightDh) { 
     changedBitmap = Bitmap.createBitmap(widthDh, heightDh, 
       Bitmap.Config.ARGB_8888); 
     int cutLeft = 0; 
     int cutTop = 0; 
     int cutRight = 0; 
     int cutBottom = 0; 
     final Rect desRect = new Rect(0, 0, widthDh, heightDh); 
     Rect srcRect = new Rect(); 
     if (widthBm > widthDh) { // crop width (left and right) 
      cutLeft = (widthBm - widthDh)/2; 
      cutRight = (widthBm - widthDh)/2; 
      srcRect = new Rect(cutLeft, 0, widthBm - cutRight, heightBm); 
     } else if (heightBm > heightDh) { // crop height (top and bottom) 
      cutTop = (heightBm - heightDh)/2; 
      cutBottom = (heightBm - heightDh)/2; 
      srcRect = new Rect(0, cutTop, widthBm, heightBm - cutBottom); 
     } 
     final Canvas canvas = new Canvas(changedBitmap); 
     canvas.drawBitmap(sampleBitmap, srcRect, desRect, null); 

    } else { 
     changedBitmap = sampleBitmap; 
    } 
    return changedBitmap; 
} 

this manual的代碼,你會發現更多的方法來適當調整圖像大小。