2011-09-12 3 views
11

Je travaille sur une simple application de fond d'écran de certaines images que j'ai. Ce sont des fichiers .png dans des dossiers pouvant être dessinés.Android WallpaperManager cultures image

Voici quelques extraits de code:

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

Peu importe la taille ou la résolution me semble utiliser, quand le fond d'écran est défini, il recadre l'image originale. Lorsque j'utilise la même image en arrière-plan, la taille est correcte et l'image entière s'affiche. Je pensais que cela pourrait être un problème avec mon émulateur, donc j'ai essayé de l'exécuter sur un appareil réel (HTC Eris) et j'ai le même problème. J'ai fait l'image la taille de l'écran et la résolution pour les eris et il recadre toujours. J'ai ensuite fait l'image seulement un pouce de haut et une résolution de 100 dpi. Il était très pixellisé sur l'Eris, mais il recadrait quand même l'image.

Toute aide serait grandement appréciée.

J'ai essayé d'ajouter quelques images pour montrer l'avant et après, mais en tant qu'utilisateur plus récent, j'ai été empêché de le faire.

Répondre

1

J'ai eu le même problème. J'ai fait une image qui est la taille de l'écran et en ajoutant un remplissage à l'image de sorte qu'il est aussi grand que le WallpaperManager getDesiredMinimumWidth() et getDesiredMinimumHeight().

Il m'a semblé préférable d'ajouter un peu de code pour ajouter automatiquement le remplissage, c'est ce que j'ai utilisé ci-dessous. Assurez-vous que l'image a la même taille que l'écran.

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