2011-09-12 37 views
11

我正在處理一些簡單的壁紙應用程序,我有一些圖像。它們是可繪製文件夾中的.png文件。Android WallpaperManager作物圖像

下面是一些代碼片段:

WallpaperManager myWallpaperManager = WallpaperManager.getInstance(getApplicationContext()); 
.... 
myWallpaperManager.setResource(R.drawable.image1); 

不管我似乎什麼大小或分辨率來使用,當壁紙設置裁剪原始圖像。當我使用相同的圖像作爲背景時,它是正確的大小並顯示整個圖像。我認爲這可能是我的模擬器的一個問題,所以我已經嘗試在實際設備(HTC eris)上運行它,並且遇到同樣的問題。我已經將圖像製作成了eris的屏幕尺寸和分辨率,並且仍在裁剪它。然後,我製作的圖像只有一英寸高,分辨率爲100 dpi。它在eris上非常像素,但仍然裁剪了圖像。

任何幫助將不勝感激。

我試圖添加一些圖像來顯示之前和之後,但作爲一個新的用戶,我被阻止這樣做。

回答

1

我有同樣的問題。我製作了一個圖像,該圖像是屏幕的大小,併爲圖像添加填充以使其與WallpaperManager getDesiredMinimumWidth()和getDesiredMinimumHeight()一樣大。

有一些代碼自動添加填充,這是我在下面使用的似乎更好。確保圖像與屏幕大小相同。

private void setWallpaper() { 
    try { 
     WallpaperManager wallpaperManager = WallpaperManager.getInstance(this); 
     //import non-scaled bitmap wallpaper 
     BitmapFactory.Options options = new BitmapFactory.Options(); 
     options.inScaled = false; 
     Bitmap wallpaper = BitmapFactory.decodeResource(getResources(), R.drawable.wallpaper, options); 

     if (wallpaperManager.getDesiredMinimumWidth() > wallpaper.getWidth() && 
       wallpaperManager.getDesiredMinimumHeight() > wallpaper.getHeight()) { 
      //add padding to wallpaper so background image scales correctly 
      int xPadding = Math.max(0, wallpaperManager.getDesiredMinimumWidth() - wallpaper.getWidth())/2; 
      int yPadding = Math.max(0, wallpaperManager.getDesiredMinimumHeight() - wallpaper.getHeight())/2; 
      Bitmap paddedWallpaper = Bitmap.createBitmap(wallpaperManager.getDesiredMinimumWidth(), wallpaperManager.getDesiredMinimumHeight(), Bitmap.Config.ARGB_8888); 
      int[] pixels = new int[wallpaper.getWidth() * wallpaper.getHeight()]; 
      wallpaper.getPixels(pixels, 0, wallpaper.getWidth(), 0, 0, wallpaper.getWidth(), wallpaper.getHeight()); 
      paddedWallpaper.setPixels(pixels, 0, wallpaper.getWidth(), xPadding, yPadding, wallpaper.getWidth(), wallpaper.getHeight()); 

      wallpaperManager.setBitmap(paddedWallpaper); 
     } else { 
      wallpaperManager.setBitmap(wallpaper); 
     } 
    } catch (IOException e) { 
     Log.e(TAG,"failed to set wallpaper"); 
    } 
}