О представлении, фоне, растровом изображении и масштабировании - PullRequest
0 голосов
/ 16 декабря 2011

Я пытаюсь создать представление (LinearLayout), которое бы заполнило весь экран, а затем загрузить какое-то пользовательское фоновое изображение (bmp, png, jpg).Во время выполнения я хотел бы посмотреть пиксель и определенные координаты для их цвета.Поскольку есть много разных устройств, я должен поддерживать разные разрешения.Мое решение состоит в том, чтобы иметь одно изображение для фона и позволить ему масштабироваться до нужного размера экрана.Проблема в том, что хотя изображение заполняет весь экран, как и должно быть, фоновые растровые изображения масштабируются до ложного размера.Это мешает мне проверять цвета пикселей в растровом изображении, поскольку мои координаты возвращают ложный пиксель из растрового изображения.

У меня есть следующий макет xml:

<LinearLayout
    android:id="@+id/viewWithBackground"
    android:visibility="invisible"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical" >
</LinearLayout>

В res / drawable у меня background_320x480.PNG.Это изображение должно быть масштабировано до размера экрана.

В событии onCreate действия я делаю следующее:

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    requestWindowFeature(Window.FEATURE_INDETERMINATE_PROGRESS);
    setContentView(R.layout.activity_main);
    viewWithBackground = findViewById(R.id.viewWithbackground);





//the problem is that the width and height of the bitmap are not correct. Following log entries show sizes
    Log.d(TAG, "viewWithBackground - width: " + viewWithBackground.getWidth() + ", height: " + viewWithBackground.getHeight());
    Log.d(TAG, "viewWithBackground.getBackground() - intrinsicWidth: " + viewWithBackground.getBackground().getIntrinsicWidth() + " intrinsicHeight: " + viewWithBackground.getBackground().getIntrinsicHeight());
    Log.d(TAG, "((BitmapDrawable)viewWithBackground.getBackground()).getBitmap() - width: " + ((BitmapDrawable)viewWithBackground.getBackground()).getBitmap().getWidth() + ", height:" + ((BitmapDrawable)viewWithBackground.getBackground()).getBitmap().getHeight());
}

Например: Размер дисплея устройства составляет 480x800.Размер изображения в формате res / drawable - 32x x 480, растровые изображения и BitmapDrawable - 480x720.Это не имеет смысла.

Мой вопрос: Как получить фоновое растровое изображение с тем же размером пикселя, который отображается на экране?

1 Ответ

1 голос
/ 16 декабря 2011
  1. Если дисплей устройства имеет разрешение 480x800 и вы не используете полноэкранную тему, высота окна вашего приложения будет равна 800 - высота панели уведомлений
  2. Класс Drawable имеет метод getBounds, который возвращает прямоугольник, в котором будет отображаться содержимое DrawB
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...