2016-09-09 15 views
0

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

Вот мой файл ресурсов списка слоев, который я использую для рисования большого пальца. seekbar_thumb_size = 16dp.

<layer-list 
    xmlns:android="http://schemas.android.com/apk/res/android"> 

    <item> 
     <shape android:shape="oval" android:innerRadius="@dimen/seekbar_thumb_size"> 
      <solid android:color="#ffffff"/> 

      <size 
       android:width="@dimen/seekbar_thumb_size" 
       android:height="@dimen/seekbar_thumb_size"/> 

      <stroke 
       android:width="1dp" 
       android:color="@color/colorPrimary"/> 
     </shape> 
    </item> 

    <item android:drawable="@drawable/ic_bars" android:gravity="center"/> 

</layer-list> 

Предполагается, что он должен отображать круг с рамкой и вектором, пригодным для вектора, центрированным по кругу. Мой предварительный просмотр дает мне следующие изображения: enter image description here

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

enter image description here

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

Вот подходы, которые я сделал, чтобы получить доступ к вытяжке:

Я объявил растяжимый объект в классе:

private Drawable BARS_DEFAULT; 
  1. Создание растрового изображения и использовать, что для вытяжки

    Bitmap bitmap1 =   
        BitmapFactory.decodeResource(resources,R.drawable.bg_bars_default); 
    
    BARS_DEFAULT = new BitmapDrawable(getActivity().getResources(), bitmap1); 
    
    _seekbar.setThumb(BARS_DEFAULT); 
    
  2. (Устаревший) Получение прямого ресурса

    BARS_DEFAULT = getActivity().getResources().getDrawable(R.drawable.bg_bars_default); 
    
    _seekbar.setThumb(BARS_DEFAULT); 
    
  3. Использование ContextCompat

    BARS_DEFAULT = ContextCompat.getDrawable(getActivity().getApplicationContext(), R.drawable.bg_bars_default); 
    
    _seekbar.setThumb(BARS_DEFAULT); 
    

Все эти попытки приводят к иконе сейчас сжимается когда рисуем изменяется при достижении соответствующего значения SeekBar.

Последнее, что изменение drawable сделано в методе onStopTrackingTouch из интерфейса setOnSeekBarChangeListener.

ответ

0

В итоге я выяснил, как работает. По какой-то причине размер значка не остался прежним, потому что я использовал значение dimen для размера значка в списке слоев. Когда я изменил его на hardcoded dp-value для размера круга, значок больше не сокращался во время выполнения.