Android WallpaperManager кадрирует изображение - PullRequest
11 голосов
/ 12 сентября 2011

Я работаю над простым приложением обоев, которое у меня есть.Это файлы .png в папках для рисования.

Вот некоторые фрагменты кода:

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

Независимо от того, какой размер или разрешение я использую, при установке обоев обрезается оригинал.образ.Когда я использую одно и то же изображение в качестве фона, он имеет правильный размер и показывает все изображение.Я подумал, что это может быть проблема с моим эмулятором, поэтому я попытался запустить его на реальном устройстве (HTC eris), и у меня возникла та же проблема.Я сделал изображение размером экрана и разрешением для eris, и оно все еще обрезается.Затем я сделал изображение высотой всего один дюйм и разрешением 100 точек на дюйм.Это было очень неровно на eris, но все еще обрезало изображение.

Любая помощь будет принята с благодарностью.

Я попытался добавить несколько изображений, чтобы показать до и после, но, как новый пользователь, я не смог этого сделать.

Ответы [ 3 ]

2 голосов
/ 22 мая 2012

Проверьте значения, возвращаемые http://developer.android.com/reference/android/app/WallpaperManager.html#getDesiredMinimumWidth() и http://developer.android.com/reference/android/app/WallpaperManager.html#getDesiredMinimumHeight() и попробуйте использовать эти значения в качестве размеров ваших обоев.

1 голос
/ 12 июля 2012

У меня была такая же проблема. Я сделал изображение размером с экран и добавил к нему отступы, чтобы они были такими же, как 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");
    }
}
0 голосов
/ 28 января 2019

Может быть, я могу помочь.


// 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, а затем позвонить getDesiredMinimumWidth и getDesiredMinimumHeight, чтобы получить размер для масштабирования.

...