Плохие "патчи" в 9-патч файле
Я пытаюсь использовать инструмент Draw9Patch из Android SDK, но сразу после открытия моего изображения с помощью Draw9Patch он отображает всю мою область изображения как "Плохой патч". Я вручную рисовал линии, которые определяют растяжимые области, однако я не уверен, что это будет работать должным образом. Может ли кто-нибудь объяснить, почему этот конкретный образ не является "хорошим патчем"? Другие ответы Stackoverflow на этот вопрос, похоже, не коррелируют с моей проблемой или я их не понимаю.
![Example of Draw9Patch Bad Patches]()
![Original Image]()
Ответы
Ответ 1
Старый, но у меня был тот же вопрос. "Плохой патч" вещь определенно запутанна, но не остановит вашу работу от работы. Сайты разработчиков сообщают, что это в основном предупреждение о том, что эти патч-сайты "могут создавать артефакты в графике при растяжении" .
Если вы посмотрите на множество вывесок Android, вы увидите, что они содержат "плохие патчи". Так что просто проверьте их, и если они будут выглядеть хорошо, я бы не стал беспокоиться об этом.
Ответ 2
Поздний ответ, но кажется, что инструмент 9patch анализирует, изменяется ли ваша растянутая область в пикселях, что означает, что одна полоса отличается от других в растяжимой области, что может привести к уродливым растягивающим артефактам, если это произойдет случайно.
Я сделал небольшой (уродливый) пример, чтобы визуализировать это:
На первом изображении нет плохих патчей (кроме центрального, игнорируйте это).
Это связано с тем, что растянутая область имеет одинаковый цвет, пиксельные полосы - одинаковые:
![No bad patches shown]()
Во втором изображении верхняя и нижняя части также отмечены как плохие, потому что градиент начинается там, а горизонтальные полосы пикселей не такие же, как остальные (они содержат немного больше синего/красного), которые МОГУТ вызывать артефакты, если они используются нецелесообразно:
![Bad patches created]()
Ответ 3
Я нашел лучший и самый простой ответ, чтобы сделать 9-патч-образ.
Из ЗДЕСЬ вы можете сделать 9-патч-образ для всех разрешений - XHDPI, HDPI, MDPI и LDPI всего за один клик.
Сообщите мне, если у вас есть какие-либо вопросы, и сделайте это, если это было вам полезно.
![enter image description here]()
Ответ 4
Я думаю, что ваша граница, скорее всего, будет проблемой:
От developer.android.com:
"Граница используется для определения растяжимых и статических областей изображения. Вы указываете растяжимый раздел, рисуя одну (или более) черную линию в 1 пикселе в левой и верхней части границы (другие пиксели границы должны быть полностью прозрачными или белыми). Вы можете иметь столько растяжимых секций, сколько хотите: их относительный размер остается таким же, поэтому самые большие разделы всегда остаются самыми большими.
Похоже, у вас есть поля для заполнения, но без пространства между вашим изображением и ящиками. Это означает, что Android, вероятно, интерпретирует их как границы, а не как дополнения (я считаю).
Попробуйте сделать 1-пиксельную ЧЕРНУЮ рамку вокруг вашего изображения. Ящики для заполнения являются необязательными, но должны быть отделены от изображения некоторыми прозрачными пикселями.
В основном, я рекомендую попробовать приблизиться к примерам, которые вы найдете здесь, насколько это возможно.
Надеюсь, что это поможет.
Ответ 5
Я только что опубликовал средний пост о Bad Patches. Он объясняет основную логику для плохих патчей и содержит некоторые советы по их победе. Не стесняйтесь проверить:
![плохие патчи]()
Ответ 6
Вы должны попытаться определить область протяженности одного пикселя на вашей кнопке. У вас нет эффекта градиента, поэтому результат будет таким же. Плохой патч обычно генерируется определением растяжения левой стороны.