Отсекаются девять патчей, которые можно нарисовать

#android #drawable

#Android #можно нарисовать

Вопрос:

Я немного растерялся с этим, у меня есть возможность отрисовки девяти исправлений (см. прилагаемое), которое работает в draw9Patch tool, не содержит плохих исправлений, отлично работает при начальной загрузке приложения для ldpi, mdpi, hdpi 1.6 — 2.3.3.

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

Я просмотрел макет, изменив любой из nine patch, который можно нарисовать, чтобы убедиться, что это не один изгойский патч nine, вызывающий проблему с остальными. Я позаботился о том, чтобы у каждого экрана с плотностью пикселей был свой собственный набор ресурсов, и я собираюсь попробовать переместить селекторы состояния xml для кнопки в каждую из соответствующих папок с возможностью отрисовки.

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

Выводимый патч является:

Проблема девятого патча

Левая часть результирующего изображения выглядит следующим образом (обратите внимание, что нет закругленных краев):

Исправленная проблема девятого патча

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

В расположении кнопки нет ничего необычного:

 <Button
    android:layout_width="fill_parent" android:layout_height="wrap_content"
    android:layout_marginTop="10dp"
    android:text="@string/some_text"></Button>
  

Я могу установить layout_height на фиксированную высоту (т. Е. 50dp), и это, кажется, останавливает сворачивание nine patch на себя / отсечение.

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

Приветствую, Мэтт

Решение:

Моя проблема заключалась в том, чтобы использовать следующие логические параметры в селекторе списка состояний:

android: constantSize=»true» android: dither= «false» android: variablePadding=»false»

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

Комментарии:

1. временным исправлением, похоже, является установка фиксированной высоты или заполнения, которые не позволяют nine patch сворачиваться, но у меня создалось впечатление, что wrap-content не вызывал такого «уменьшающего» поведения в nine patch

2. Как насчет увеличения области вертикального растяжения? Это позволило бы использовать более короткие кнопки без полного искажения градиента. (Я ожидал бы обрезки, но не ее кажущейся случайности. Есть идеи по этому поводу?)

3. Я только что понял, что это было (см. Решение, приложенное к концу сообщения)

4. @GauntFace: Пожалуйста, добавьте свое решение в качестве ответа.

Ответ №1:

Моя проблема заключалась в том, чтобы использовать следующие логические параметры в селекторе списка состояний:

 android:constantSize="true" 
android:dither="false" 
android:variablePadding="false"
  

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