2011-09-12 14 views
11

Estoy trabajando en una aplicación de fondo de pantalla simple de algunas imágenes que tengo. Son archivos .png en carpetas dibujables.Android WallpaperManager crop image

Éstos son algunos fragmentos de código:

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

Sin importar el tamaño o resolución me parece que utilizar, cuando el fondo de pantalla se establece que recorta la imagen original. Cuando uso la misma imagen como fondo, tiene el tamaño correcto y muestra toda la imagen. Pensé que podría ser un problema con mi emulador, así que intenté ejecutarlo en un dispositivo real (HTC eris) y estoy teniendo el mismo problema. He hecho que la imagen tenga el tamaño y la resolución de la pantalla para el eris y todavía está recortando. Luego hice la imagen de solo una pulgada de alto y una resolución de 100 ppp. Estaba muy pixelado en el eris, pero aún recortaba la imagen.

Cualquier ayuda sería muy apreciada.

Intenté agregar algunas imágenes para mostrar el antes y el después, pero como usuario más nuevo no pude hacerlo.

Respuesta

1

Tuve el mismo problema. Hice una imagen que es del tamaño de la pantalla y agrego relleno a la imagen para que sea tan grande como WallpaperManager getDesiredMinimumWidth() y getDesiredMinimumHeight().

Parecía mejor tener algún código que agregara automáticamente el relleno así que eso es lo que he usado a continuación. Asegúrese de que la imagen tenga el mismo tamaño que la pantalla.

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