как изменить размер и положение Drawables внутри LayerDrawable в Android

У меня есть LayerDrawable, который должен отображать 5 растровых изображений. 1 фон и 4 значка (которые могут быть разными для каждого LayerDrawable), такие как сетка. К сожалению, ширина этих иконок отличается от высоты. Моя проблема состоит в том, чтобы изменить их размер, сохранив их соотношение и поместив их в свою позицию (1-4 значка, 5 фон):

==================
|      |  |      |
|   1  |  |   2  |
|------.5 .------|
|------.  .------|
|   3  |  |   4  |
|      |  |      |
==================

Если я изменю размер этих растровых изображений, дам им Gravity.CENTER, они больше не будут помещаться внутри границ фонового прямоугольника. Если я оставлю Gravity.CENTER, они, кажется, будут перемасштабированы, как только я вызову layerDrawable.setLayerInset(numlayer, left, top, right, bottom). Как правильно это сделать? Как я могу сохранить их соотношение при правильном размещении? Чего я также не мог понять до сих пор, так это почему getIntrinsicWidth/Height из BitmapDrawable возвращает что-то другое (меньшее), чем getWidth/Height из исходного Bitmap.
Что я пробовал:
1. Получение их из XML, добавление 'dummy-drawable' внутри и замените его результатом, описанным выше. 2. Создайте LayerDrawable внутри моей программы, передав все чертежи внутри. Кажется, что setLayerInset не имеет никакого влияния, или я вижу только фон (который был элементом 0 внутри моего массива Drawable)
3. Расширение LayerDrawable и попытка отслеживать что-либо самостоятельно без разумных результатов.


person Rafael T    schedule 19.07.2011    source источник


Ответы (1)


BitmapDrawable по умолчанию заполняет свои границы заданным Bitmap. Если вы начнете использовать Gravity, Bitmap будет располагаться в соответствии с заданным Gravity. Я полагаю, что в вашем случае лучший выбор — создать свой собственный Drawable.

Что касается методов getIntrinsic[Height|Width], они возвращают фактический размер вашего базового Bitmap, который может отличаться, если система изменила его размер при загрузке (например, изображение hdpi, загруженное на экран mdpi).

person Cyril Mottier    schedule 27.11.2011