У меня есть LayerDrawable, который должен отображать 5 растровых изображений. 1 фон и 4 значка (который может быть различным для каждого LayerDrawable), как сетка. К сожалению, эти значки не имеют той же ширины, что и высота. Моя проблема состоит в том, чтобы изменять их размеры, сохраняя их соотношение и помещая их в свою позицию (1-4 значка, 5 фона):
================== | | | | | 1 | | 2 | |------.5 .------| |------. .------| | 3 | | 4 | | | | | ==================
Если я Gravity.CENTER
размер этих растровых изображений, дайте им Gravity.CENTER
они больше не будут помещаться внутри границ прямоугольника фона. Если я покину Gravity.CENTER
они, похоже, будут перемасштабированы, как только я вызову layerDrawable.setLayerInset(numlayer, left, top, right, bottom)
. Каков правильный способ сделать это? Как я могу сохранить их соотношение при правильном размещении? То, что я также не мог понять до сих пор, заключается в том, почему getIntrinsicWidth / Height из BitmapDrawable возвращает что-то еще (меньше), чем getWidth / Height из исходного растрового изображения.
То, что я пробовал:
1. Получая их из XML, помещая внутри себя «фиктивный чертеж» и заменяя его результатом, описанным выше. 2. Создайте LayerDrawable внутри моей Программы, передавая все чертежи внутри. Кажется, что setLayerInset не влияет, или я вижу только Background (который был элементом 0 внутри моего Drawable Array)
3. Расширение LayerDrawable и попытка отслеживать что угодно самостоятельно без разумных результатов
BitmapDrawable
, dy default, заполняет его границы заданным Bitmap
. Если вы начнете использовать Gravity
, Bitmap
будет находиться в соответствии с данным Gravity
. Я полагаю, что в вашем случае лучший выбор – создать свой собственный Drawable
.
Что касается методов getIntrinsic [Height | Width], они возвращают фактический размер базового Bitmap
который может отличаться, если система изменила его размер при загрузке (например, изображение hdpi, загруженное на экран mdpi).