Подтвердить что ты не робот

Android/9-patch PNG: Что, если мне нужно что-то вроде 11-патча PNG?

В Draw 9-patch все выглядит отлично. Тем не менее, мой SDK говорит, что 9-патч png искажен. Потому что у меня есть что-то вроде 11-patch png. Потому что я не хочу, чтобы небольшая область захвата была масштабирована. Как заставить его работать? Снимок экрана описывает все:

alt text

Ошибка Meassage в консоли:

ERROR: 9-patch image /res/drawable-hdpi/top_complete.9.png malformed.
        Can't have more than one marked region along edge.
        Found at pixel #10 along bottom edge.
ERROR: Failure processing PNG image /res/drawable-hdpi/top_complete.9.png
4b9b3361

Ответ 1

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

Установите флажок, чтобы показывать область содержимого и играть с ним, чтобы узнать, о чем я говорю.

alt text

Ответ 2

Я бы не разделил его налево и вправо, я бы удалил == в 9-патче и использовал его как отдельное изображение с центральной и нижней гравитацией, так что всегда будет оставаться посередине, где вы хотите.

Просто подсказка: я всегда уменьшаю "масштабированную" часть до ширины/высоты 1 пикселя, чтобы получить уменьшенное изображение.

Ответ 3

alt text

9-патч PNG без граббера

alt text

XML кнопки:

<Button
  android:layout_width="wrap_content"
  android:layout_height="wrap_content"
  android:textColor="#FFFFFF"
  android:textStyle="bold"
  android:textSize="11sp"
  android:id="@+id/ButtonTop"
  android:background="@drawable/top_just_bg"
  android:drawableBottom="@drawable/top_dropper"
  android:gravity="center"
  android:paddingLeft="15sp"
  android:paddingRight="15sp"
  android:paddingTop="3sp"
  android:text="There we go! It working... ;)"></Button>

Используется ли Padding и sp-Values?

Ответ 4

Поскольку исходная проблема еще не решена: вы можете разбить изображение на два слоя, один NinePatchDrawable для растягиваемой части и сплошной (в центре) для вашего статического изображения. Затем просто используйте LayerDrawable, чтобы нарисовать их друг над другом. Здесь - хороший пример того, как использовать соответствующий тег <layer-list>. Это как сделать правильный путь.; -)

Ответ 5

Разделите исходное изображение на две части и используйте их.

Ответ 6

Это изображение выше выглядит отлично, и предварительный просмотр показывает, что он выглядит нормально.

Что сообщение об ошибке с устройства, когда вы пытаетесь его использовать?

Вы уверены, что каждый пиксель на краю либо полностью белый, либо черный?
Даже малейшая прозрачность на краю может нарушить Android.


Edit:
Ах, сообщение об ошибке показывает проблему.
Только верхний край изображения определяет, какие области будут растянуты.

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

В противном случае просто заполните центральный зазор в нижнем крае, чтобы текстовое содержимое отображалось в фиолетовой области.

Ответ 7

Просмотрите все границы... Два в верхней и левой частях (будут масштабированы) и 1 для правого и нижнего (не будут масштабироваться).

введите описание изображения здесь