Я пытаюсь создать 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>
Предполагается, что он должен отображать круг с рамкой и вектором, пригодным для вектора, центрированным по кругу. Мой предварительный просмотр дает мне следующие изображения:
Теперь это отображается правильно в SeekBar, когда вызывается метод onStart моего фрагмента. Однако, когда я пытаюсь изменить программный снимок большого пальца, это выглядит так, что размер круга уменьшается, чтобы соответствовать высоте и ширине значка (показано ниже).
У меня есть ощущение, что это должно делать с тем, как я извлекая вытяжку во время выполнения. Я пробовал различные подходы и продолжаю приводить к одному и тому же результату, сокращенному.
Вот подходы, которые я сделал, чтобы получить доступ к вытяжке:
Я объявил растяжимый объект в классе:
private Drawable BARS_DEFAULT;
Создание растрового изображения и использовать, что для вытяжки
Bitmap bitmap1 = BitmapFactory.decodeResource(resources,R.drawable.bg_bars_default); BARS_DEFAULT = new BitmapDrawable(getActivity().getResources(), bitmap1); _seekbar.setThumb(BARS_DEFAULT);
(Устаревший) Получение прямого ресурса
BARS_DEFAULT = getActivity().getResources().getDrawable(R.drawable.bg_bars_default); _seekbar.setThumb(BARS_DEFAULT);
Использование ContextCompat
BARS_DEFAULT = ContextCompat.getDrawable(getActivity().getApplicationContext(), R.drawable.bg_bars_default); _seekbar.setThumb(BARS_DEFAULT);
Все эти попытки приводят к иконе сейчас сжимается когда рисуем изменяется при достижении соответствующего значения SeekBar.
Последнее, что изменение drawable сделано в методе onStopTrackingTouch из интерфейса setOnSeekBarChangeListener.