2013-08-20 3 views
2

Я намереваюсь создать пользовательскую панель поиска с собственным набором изображений для фона и достижений прогресса. Я сделал 2 9-патча изображения, по одному для фона и достижения прогресса. Вот код, я использую для progressDrawable:Андроид: пользовательский прогресс прокрутки отображается некорректно

<?xml version="1.0" encoding="utf-8"?> 
<layer-list xmlns:android="http://schemas.android.com/apk/res/android" > 

    <item android:id="@+id/background" 
     android:drawable="@drawable/experience_seekbar_background" /> 

    <item android:id="@+id/progress"> 
     <clip 
      android:clipOrientation="horizontal" 
      android:gravity="left|top" 
      android:drawable="@drawable/experience_seekbar_progress" /> 
    </item> 
</layer-list> 

Кроме того, здесь есть определение XML моего SeekBar:

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:orientation="vertical" 
    android:padding="5dp" > 

    <SeekBar 
     android:id="@+id/experienceSeekBar" 
     android:layout_width="match_parent" 
     android:layout_height="100dp" 
     android:max="2" 
     android:progress="1" 
     android:progressDrawable="@drawable/experience_seekbar" /> 
</LinearLayout> 

Проблема заключается в том, часть прогресс Drawable рисуется ниже вместо частичного перекрытия.

Ожидаемый/Желаемый: (http://i.imgur.com/C27dQZK.png)

Фактический выход: (http://i.imgur.com/ftNlMMI.png)

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

ответ

0

Оказалось, что здесь играли несколько вещей.

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

2) В списке слоев заполнение предметов складывается. Это означает, что если первый элемент в списке слоев имеет некоторое дополнение, это дополнение добавит до заполнения всех элементов после него, добавление второго элемента добавит до заполнения всех элементов под ним и т. Д.

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

Чтобы исправить это, я поменял 9-патч-изображения и установил линии заполнения на всю длину, т. Е. Я определил все изображение как область содержимого. Другого варианта не было, так как любое отступы приводили бы к удвоению пробега для достижения прогресса, вытесняя его из его предполагаемого положения (которое находится точно над фоном, пригодным для рисования).

Смежные вопросы