Обработка различных разрешений экрана для фоновых изображений в Android - PullRequest
8 голосов
/ 03 сентября 2010

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

Однако это также проблема, поскольку android: фон всегда растягивается до размеров экрана. В результате фоновые изображения выглядят очень плохо, если проигрыватель переключается между портретным и ландшафтным режимами. И что еще хуже, многие устройства имеют очень разные пропорции (например, 320x480 точек на дюйм, 480x800 точек на дюйм и 480x852 точек на дюйм), и еще больше вариаций.

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

Ответы [ 3 ]

5 голосов
/ 03 сентября 2010

Первый шаг - получить высоту и ширину экрана самого устройства, затем растянуть / сжать или дополнить растровое изображение по мере необходимости. Этот SO ответ имеет источник, который должен помочь, скопирован ниже. Реквизиты Йозеф для оригинального ответа.

Display display = getWindowManager().getDefaultDisplay(); 
int width = display.getWidth();
int height = display.getHeight();

Вот общий источник получения ориентации.

int orientation = display.getOrientation(); 

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

public int getscrOrientation()
{
  Display getOrient = getWindowManager().getDefaultDisplay();

  int orientation = getOrient.getOrientation();

  // Sometimes you may get undefined orientation Value is 0
  // simple logic solves the problem compare the screen
  // X,Y Co-ordinates and determine the Orientation in such cases
  if(orientation==Configuration.ORIENTATION_UNDEFINED){

      Configuration config = getResources().getConfiguration();
      orientation = config.orientation;

      if(orientation==Configuration.ORIENTATION_UNDEFINED){
        //if height and widht of screen are equal then
        // it is square orientation
            if(getOrient.getWidth()==getOrient.getHeight()){
            orientation = Configuration.ORIENTATION_SQUARE;
            }else{ //if widht is less than height than it is portrait

                if(getOrient.getWidth() < getOrient.getHeight()){
                orientation = Configuration.ORIENTATION_PORTRAIT;
                }else{ // if it is not any of the above it will defineitly be landscape
                orientation = Configuration.ORIENTATION_LANDSCAPE;
                }
            }
       }
  }
  return orientation; // return value 1 is portrait and 2 is Landscape Mode
}
2 голосов
/ 03 сентября 2010

Может быть, вы могли бы создать фоновые изображения в виде NinePatch изображений, чтобы вы лучше контролировали их растяжение?

В противном случае вы можете просто предотвратить растяжение ваших изображений (или, по крайней мере, сохранить правильное соотношение сторон), установив атрибут scaleType , например. android:scaleType="center".

2 голосов
/ 03 сентября 2010

Я бы посоветовал вам получить ширину и высоту вашего текущего вида.Прямо сейчас я не уверен, какие функции дадут вам эти значения, но я уверен, что это возможно.После этого вы можете рассчитать соотношение сторон.Я сделал бы изображения размером примерно 1000x1000 и просто показал бы определенную часть изображения, чтобы соотношение сторон не было неправильным.
У меня такая же проблема с камерой.Поэтому мое решение состояло в том, чтобы выбрать одно из двух значений, ширину или высоту, как фиксированное, и вычислить правильное другое значение в соответствии с соотношением сторон.Я не уверен, что уже есть функции, позволяющие просто показать часть изображения, но я уверен, что вы могли бы написать что-то, чтобы скопировать только часть изображения и показать эту часть.

НедостатокКонечно, вы будете показывать только часть фона.Поскольку общее соотношение сторон телефонов составляет от 1: 1,3 до 1: 1,8, думаю, это не будет слишком большой проблемой.Я, например, предпочел бы правильно видеть часть изображения, чем смотреть на уродливое растянутое изображение.

...