Изображение на обоях отображается не в правильном размере на всех устройствах

#android #image #scale #android-wallpaper

#Android #изображение #масштаб #android-обои

Вопрос:

Я создал приложение, которое устанавливает обои, используя несколько изображений png с заданными интервалами. Размер обоев, отображаемый на экране, неверен для всех устройств. На 9,7-дюймовом планшете идеальный размер, который включает в себя достаточно места для прокрутки влево и вправо. Однако на телефоне можно увидеть только небольшую часть каждого изображения. Похоже, что оно увеличено.

Какой код мне нужно указать Android для отображения изображений в правильном размере на всех устройствах?

Я предполагал, что WallpaperManager сделал это, но, похоже, я еще не знаю, как его использовать.

Вот как я меняю обои:

 myWallpaperManager.setResource(R.drawable.muzdalifah);
 

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

 public class AlarmReceiverChangeImage extends BroadcastReceiver {

@Override
public void onReceive(Context context, Intent intent) {

    /*
     * Make the settings available from the settings xml file.
     */
    SharedPreferences mySettings = PreferenceManager
            .getDefaultSharedPreferences(context);

    /*
     * Allow editing.
     */
    SharedPreferences.Editor editor = mySettings.edit();

    /*
     * Get the settings into variables.
     */
    boolean bln_checkbox_changing_is_activated = mySettings.getBoolean(
            "checkbox_changing_is_activated", false);

    String myCurrentImageName = mySettings.getString("current_image",
            "kabanight1");

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

    if (bln_checkbox_changing_is_activated == true) {

        if (myCurrentImageName.equals("tentcity")) {

            try {

                myWallpaperManager.setResource(R.drawable.kabacloseup);
                myCurrentImageName = "kabacloseup";

            } catch (IOException e) {
                e.printStackTrace();
            }

        } else if (myCurrentImageName.equals("kabacloseup")) {
            try {

                myWallpaperManager.setResource(R.drawable.kabanight1);
                myCurrentImageName = "kabanight1";

            } catch (IOException e) {
                e.printStackTrace();
            }

        } else if (myCurrentImageName.equals("kabanight1")) {
            try {

                myWallpaperManager.setResource(R.drawable.madina1);
                myCurrentImageName = "madina1";

            } catch (IOException e) {
                e.printStackTrace();
            }

        } else if (myCurrentImageName.equals("madina1")) {
            try {

                myWallpaperManager.setResource(R.drawable.madina2);
                myCurrentImageName = "madina2";

            } catch (IOException e) {
                e.printStackTrace();
            }

        } else if (myCurrentImageName.equals("madina2")) {
            try {

                myWallpaperManager.setResource(R.drawable.kabaday1);
                myCurrentImageName = "kabaday1";

            } catch (IOException e) {
                e.printStackTrace();
            }

        } else if (myCurrentImageName.equals("kabaday1")) {
            try {

                myWallpaperManager.setResource(R.drawable.uhud1);
                myCurrentImageName = "uhud1";

            } catch (IOException e) {
                e.printStackTrace();
            }

        } else if (myCurrentImageName.equals("uhud1")) {
            try {

                myWallpaperManager.setResource(R.drawable.bus);
                myCurrentImageName = "bus";

            } catch (IOException e) {
                e.printStackTrace();
            }

        } else if (myCurrentImageName.equals("bus")) {
            try {

                myWallpaperManager.setResource(R.drawable.muzdalifah);
                myCurrentImageName = "muzdalifah";

            } catch (IOException e) {
                e.printStackTrace();
            }

        } else if (myCurrentImageName.equals("muzdalifah")) {
            try {

                myWallpaperManager.setResource(R.drawable.tentcity);
                myCurrentImageName = "tentcity";

            } catch (IOException e) {
                e.printStackTrace();
            }

        } else {

            try {
                myWallpaperManager.setResource(R.drawable.madina1);
                myCurrentImageName = "madina1";

            } catch (IOException e) {
                e.printStackTrace();
            }
        } // End if myCurrentImageName.equals("kabaday1").
    } // End if bln_checkbox_changing_is_activated == true.

    editor.putString("current_image", myCurrentImageName); // value to store
    editor.commit();
} // End method onReceive.
 

Ответ №1:

Рендеринг вашего изображения зависит от следующих:

Размер экрана

Плотность экрана

Разрешение

Вам лучше полностью прочитать приведенный ниже документ, чтобы понять, как вы справляетесь с этой ситуацией: поддержка нескольких экранов

Комментарии:

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

2. Я узнал, что 9-patch не поддерживается в качестве обоев, поэтому, думаю, мне нужен другой способ сделать это. Android поставляется с этим приложением, которое позволяет импортировать изображения и создавать из них обои. Я хотел бы узнать секрет, который они используют, чтобы заставить его работать, потому что их приложение масштабирует изображение до нужного размера.

Ответ №2:

myWallpaperManager это изображение должно быть fill_parent. RU дает какой-либо фиксированный размер для этого?

Комментарии:

1. Нет фиксированного размера, но я отредактирую раздел кода, чтобы вы могли видеть весь код, который я использую для смены обоев.

Ответ №3:

добавить в манифест эти разрешения <uses-permission android:name="android.permission.SET_WALLPAPER_HINTS"/> <uses-permission android:name="android.permission.SET_WALLPAPER" />