Можно ли установить обои так же, как это делается с приложением, которое поставляется с Android? - PullRequest
4 голосов
/ 15 октября 2011

В Android есть способ установить обои на домашний экран.Пользователь нажимает «меню», а затем выбирает «обои», чтобы установить обои из системы.Полученное изображение обоев должным образом масштабируется как в портретном, так и в альбомном режиме.

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

Я сделал это с изображениями png размером 1280x1084, а также попробовал то же самоевещь с изображениями размером 320x240, и все они отображаются одинакового размера, если они установлены в качестве обоев для домашнего экрана.

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

Я уверен, что должен быть какой-то параметр WallpaperManager для использования, но я не знаю, какой из нихиспользовать.

Заранее спасибо.

Вот код, который я использую для установки обоев:

/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);

    WallpaperManager myWallpaperManager = WallpaperManager
            .getInstance(getApplicationContext());

    try {
        myWallpaperManager.setResource(R.drawable.kabanight1);
    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
}

Действительно, Emad

1 Ответ

3 голосов
/ 13 декабря 2011

Я просто смотрю на это. Несмотря на то, что вы можете наблюдать фактические размеры файлов из изображений обоев в Launcher .apk, лучшим способом является запрос к WallpaperManager желаемого размера (который не зависит от ориентации).

final WallpaperManager wallpaperManager = WallpaperManager.getInstance(context);
final int fullWidth = wallpaperManager.getDesiredMinimumWidth();
final int fullHeight = wallpaperManager.getDesiredMinimumHeight();

На этом этапе я создаю новое растровое изображение требуемого размера точного и записываю в него свое собственное растровое изображение. Сложная часть - это вычисление заполнения и масштабирования, а также учет строки состояния. Однако, если вы напишите это изображение правильного размера в качестве обоев, оно должно работать точно так же, как системные обои.

Теперь недостаток - это изображение (с размерами больше, чем ваш экран) масштабируется правильно, но вы заметите, что оно обрезается по-разному в зависимости от вашей ориентации.

Я думаю, вам понадобятся живые обои, если вы хотите изменить размер изображения в зависимости от ориентации (чтобы максимизировать размер изображения, но не обрезать его).

...