Зачем нам нужен 9-патч?

java android nine-patch

1634 просмотра

4 ответа

1229 Репутация автора

Мой вопрос как заголовок говорит: зачем нам 9-патч-изображения? Они действительно так важны? На самом деле, что они действительно делают? Я не понимаю концепцию изображений с 9 патчами.

Я знаю, что 9-патч изображения являются масштабируемыми. Допустим, у меня есть кнопка с изображением, которая идеально подходит для моего устройства ldpi. С помощью инструмента Draw 9-patch (входит в состав Android SDK) я могу пометить масштабируемые области, и это изображение будет отлично вписываться в устройства hdpi и даже xhdpi. Края будут красивыми и гладкими.

Но действительно ли это хорошая практика или просто альтернатива? Должен ли я создавать каждое изображение для устройств ldpi, mdpi, hdpi и xhdpi или я могу просто использовать Android SDK "Draw 9-patch" на одном изображении и позволить Android обрабатывать различные устройства?

Я не то, что о краях, а фактическое содержание картины. Является ли контент тоже масштабируемым?

Автор: rootpanthera Источник Размещён: 13.05.2013 12:02

Ответы (4)


6 плюса

9696 Репутация автора

Решение

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

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

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

Рассмотрим заставку для приложения Kindle на Android, на которой изображен силуэт мальчика, читающего на дереве. В упрощенном варианте земля может быть масштабирована по горизонтали до бесконечности, но если бы мальчик был масштабирован, он выглядел бы перекошенным. Таким образом, вы можете использовать девять патчей и указать раздел, который можно масштабировать и в каком направлении.

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

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

-

http://developer.android.com/guide/topics/graphics/2d-graphics.html#nine-patch

Автор: ataulm Размещён: 13.05.2013 12:08

0 плюса

8044 Репутация автора

В Android 9-патч используется, когда вы хотите, чтобы части вашего изображения масштабировались, а другие части сохраняли свои исходные размеры. первое приложение приходит на ум это углы, как вы заявили. Таким образом, вы используете их в этом случае.

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

Посмотрите здесь: Поддержка экрана

Автор: Mr.Me Размещён: 13.05.2013 12:10

1 плюс

26512 Репутация автора

Логика патча 9 заключается в том, что вы не масштабируете углы.

Автор: Damian Leszczyński - Vash Размещён: 13.05.2013 12:10

0 плюса

610 Репутация автора

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

Концепция существует на других языках. iOS, CSS3, блочная модель W3C являются такими примерами. Тем не менее, 9-патч-изображения просты и гибки в использовании, потому что:

  1. несколько областей могут быть расширены вместо одной для других языков;
  2. масштабируемые области определяются на изображении, а не в коде.
Автор: Futal Размещён: 13.05.2013 12:20
Вопросы из категории :
32x32