2011-09-12 13 views
11

Sto lavorando ad una semplice applicazione per lo sfondo di alcune immagini che ho. Sono file .png in cartelle disegnabili.Android WallpaperManager crops image

Ecco alcuni frammenti di codice:

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

Indipendentemente dalle dimensioni o la risoluzione mi sembra di usare, quando lo sfondo è impostato si ritaglia l'immagine originale. Quando uso la stessa immagine di uno sfondo, è la dimensione corretta e mostra l'intera immagine. Ho pensato che potrebbe essere un problema con il mio emulatore, quindi ho provato a eseguirlo su un dispositivo reale (HTC eris) e sto avendo lo stesso problema. Ho reso l'immagine la dimensione e la risoluzione dello schermo per l'eris e lo sta ancora ritagliando. Ho quindi reso l'immagine alta solo un pollice e una risoluzione di 100 dpi. Era molto pixelato sull'ere, ma ritagliava ancora l'immagine.

Qualsiasi aiuto sarebbe molto apprezzato.

Ho tentato di aggiungere alcune immagini per mostrare il prima e il dopo, ma come utente più recente mi è stato impedito di farlo.

risposta

1

Ho avuto lo stesso problema. Ho creato un'immagine che è la dimensione dello schermo e aggiungendo il riempimento all'immagine in modo che sia grande quanto il desktopManager getDesiredMinimumWidth() e getDesiredMinimumHeight().

Sembrava meglio avere del codice che aggiungesse automaticamente il padding in modo che fosse quello che ho usato sotto. Assicurati che l'immagine abbia le stesse dimensioni dello schermo.

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"); 
    } 
}