【问题标题】:Android WallpaperManager crops imageAndroid WallpaperManager 裁剪图像
【发布时间】:2011-11-15 01:12:29
【问题描述】:

我正在开发一个简单的壁纸应用程序,其中包含我拥有的一些图像。它们是可绘制文件夹中的 .png 文件。

这里有一些代码sn-ps:

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

无论我使用什么尺寸或分辨率,设置壁纸时都会裁剪原始图像。当我使用相同的图像作为背景时,它的大小是正确的并显示了整个图像。我认为这可能是我的模拟器的问题,所以我尝试在实际设备(HTC eris)上运行它,但我遇到了同样的问题。我已将图像设置为 eris 的屏幕尺寸和分辨率,但它仍在裁剪它。然后我使图像只有一英寸高,分辨率为 100 dpi。它在 eris 上非常像素化,但仍然裁剪了图像。

任何帮助将不胜感激。

我尝试添加一些图像来显示之前和之后,但作为一个新用户,我被阻止这样做。

【问题讨论】:

    标签: android size screen crop wallpaper


    【解决方案1】:
    【解决方案2】:

    也许我可以帮忙。

    
    // 1. Get screen size.
    DisplayMetrics metrics = new DisplayMetrics();
    Display display = getWindowManager().getDefaultDisplay();
    display.getMetrics(metrics);
    final int screenWidth  = metrics.widthPixels;
    final int screenHeight = metrics.heightPixels;
    
    // 2. Make the wallpaperManager fit the screen size.
    final WallpaperManager wallpaperManager = WallpaperManager.getInstance(ViewWallpaperActivity.this);
    wallpaperManager.suggestDesiredDimensions(screenWidth, screenHeight);
    
    // 3. Get the desired size.
    final int width = wallpaperManager.getDesiredMinimumWidth();
    final int height = wallpaperManager.getDesiredMinimumHeight();
    
     // 4. Scale the wallpaper.
    Bitmap bitmap = getBitmap(); // getBitmap(): Get the image to be set as wallpaper.
    Bitmap wallpaper = Bitmap.createScaledBitmap(bitmap, width, height, true);
    
    // 5. Set the image as wallpaper.
    try {
      wallpaperManager.setBitmap(wallpaper);
    } catch (IOException e) {
      e.printStackTrace();
    }
    

    请注意,您应该调用suggestDesiredDimensions,然后调用getDesiredMinimumWidthgetDesiredMinimumHeight 以获取要缩放到的大小。

    【讨论】:

      【解决方案3】:

      我遇到了同样的问题。我制作了一个屏幕大小的图像,并为图像添加了填充,使其与 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");
          }
      }
      

      【讨论】:

        猜你喜欢
        • 2015-02-02
        • 2018-09-20
        • 1970-01-01
        • 1970-01-01
        • 2016-05-04
        • 2013-09-26
        • 2016-12-27
        • 2017-12-17
        • 1970-01-01
        相关资源
        最近更新 更多