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
Ответы
Ответ 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 для правого и нижнего (не будут масштабироваться).
![введите описание изображения здесь]()