Как изменить размер и позиционировать Drawables внутри LayerDrawable в Android - PullRequest
5 голосов
/ 19 июля 2011

У меня есть 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 из оригинального растрового изображения.
Что я пробовал:
1. Получение их из XML, вставка'dummy-drawable' внутри и замените его результатом, описанным выше.2. Создайте LayerDrawable внутри моей Программы, передавая все рисованные объекты внутри.Кажется, что setLayerInset не имеет никакого эффекта, или я вижу только Фон (который был Элементом 0 внутри моего Drawable Array)
3. Расширяя LayerDrawable и пытаюсь самостоятельно отслеживать что-либо без разумных результатов

1 Ответ

1 голос
/ 27 ноября 2011

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

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

...