2011-09-12 33 views
11

Tôi đang làm việc trên một ứng dụng hình nền đơn giản của một số hình ảnh mà tôi có. Chúng là các tệp .png trong các thư mục có thể kéo.Android WallpaperManager crop image

Dưới đây là một số đoạn mã:

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

Không có vấn đề gì kích thước hay độ phân giải tôi dường như để sử dụng, khi hình nền được thiết lập nó cắt một phần ảnh gốc. Khi tôi sử dụng cùng một hình ảnh làm nền, đó là kích thước chính xác và hiển thị toàn bộ hình ảnh. Tôi nghĩ rằng nó có thể là một vấn đề với giả lập của tôi vì vậy tôi đã cố gắng chạy nó trên một thiết bị thực tế (HTC eris) và tôi có cùng một vấn đề. Tôi đã làm cho hình ảnh kích thước màn hình và độ phân giải cho eris và nó vẫn còn xén nó. Sau đó tôi làm cho hình ảnh chỉ cao một inch và độ phân giải 100 dpi. Nó đã được rất pixelated trên eris, nhưng vẫn cắt hình ảnh.

Mọi trợ giúp sẽ được đánh giá cao.

Tôi đã cố gắng thêm một số hình ảnh để hiển thị trước và sau, nhưng với tư cách là người dùng mới hơn, tôi đã bị ngăn không cho làm như vậy.

Trả lời

1

Tôi đã gặp vấn đề tương tự. Tôi đã tạo một hình ảnh có kích thước của màn hình và thêm phần đệm vào hình ảnh sao cho nó lớn bằng phần mềm WallpaperManager getDesiredMinimumWidth() và getDesiredMinimumHeight().

Có vẻ như tốt hơn nên để một số mã tự động thêm phần đệm vào đó là những gì tôi đã sử dụng bên dưới. Đảm bảo hình ảnh có cùng kích thước với màn hình.

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