Плохие патчи в 9-патч-файле - PullRequest
26 голосов
/ 15 сентября 2011

Я пытаюсь использовать инструмент Draw9Patch из Android SDK, но сразу после открытия моего изображения с помощью Draw9Patch он отображает всю область моего изображения в виде «Bad Patch». Я вручную нарисовал линии, которые определяют растягиваемые области, однако я не уверен, будет ли это работать правильно. Может ли кто-нибудь объяснить, почему это конкретное изображение не является «хорошим патчем»? Другие ответы Stackoverflow на этот вопрос, похоже, не соответствуют моей проблеме, или я их не понимаю.

Example of Draw9Patch Bad Patches Original Image

Ответы [ 6 ]

26 голосов
/ 25 ноября 2011

Старый, но у меня был тот же вопрос. «Плохой патч», безусловно, сбивает с толку, но не остановит работу вашего drawable. Сайты разработчиков говорят, что это в основном предупреждение о том, что эти участки исправлений "могут создавать артефакты на графике при растяжении" ‌ .

Если вы посмотрите на множество стандартных рисунков для Android, то увидите, что они содержат «плохие патчи». Так что просто протестируйте их, и если они будут хорошо выглядеть, я бы об этом не беспокоился.

15 голосов
/ 10 июня 2012

Поздний ответ, но кажется, что инструмент 9patch анализирует, изменяется ли ваша растянутая область в своих пикселях, что означает, что одна полоса отличается от других в растягиваемой области, что может привести к появлению уродливых артефактов растяжения, если они сделаны случайно.

Я сделал небольшой (некрасивый) пример для визуализации этого:
На первом изображении нет плохих патчей (кроме центрального, игнорируйте это).
Это потому, что растянутая область одного цвета, полосы пикселей одинаковы: No bad patches shown

Однако на втором изображении верхняя и нижняя части также помечены как плохие, потому что там начинается градиент, и горизонтальные полосы пикселей больше не совпадают с остальными (они содержат немного больше сине-красного цвета), что МОЖЕТ вызвать артефакты, если они используются нецеленаправленно: Bad patches created

11 голосов
/ 31 мая 2013

Я нашел лучший и самый простой ответ, чтобы сделать 9-патч изображение.

С ЗДЕСЬ вы можете сделать 9-патчовое изображение для всех разрешений - XHDPI, HDPI, MDPI и LDPI одним щелчком мыши.

Дайте мне знать, если у вас есть какие-либо вопросы, и проголосуйте, если это было полезно для вас.

enter image description here

3 голосов
/ 01 апреля 2016

Я только что опубликовал пост Medium о Bad Patches.Он объясняет основную логику для плохих патчей и содержит некоторые советы по их устранению.Не стесняйтесь проверить это:

9-патч: повсюду плохие патчи…

bad patches

2 голосов
/ 15 сентября 2011

Я думаю, что ваша граница, вероятно, является проблемой:

От developer.android.com:

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

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

Попробуйте сделать ЧЕРНУЮ рамку размером 1 пиксель вокруг вашего изображения.Поля заполнения являются необязательными, но их следует отделять от изображения несколькими прозрачными пикселями.

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

Надеюсь, это поможет.

1 голос
/ 22 марта 2012

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...