以编程方式更改可绘制时SeekBar thumb drawable的大小

时间:2016-09-09 01:58:00

标签: android size drawable seekbar

我正在尝试创建一个类似于Uber应用程序中的SeekBar,用于在我的应用程序中选择搜索类型。为此,我相信SeekBar中的拇指绘制应该以编程方式进行更改。截至目前,drawable在应该更改时会更改,但drawable的大小不会与我的资源文件中定义的相同。 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

现在,当我的片段的onStart方法被调用时,它会在SeekBar中正确显示。但是,当我尝试以编程方式更改拇指可绘制时,看起来圆的大小会缩小以匹配图标的高度和宽度(如下所示)。

enter image description here

我觉得这与我在运行时检索drawable的方式有关。我已经尝试了各种方法,并继续得到相同的结果,一个缩小的可绘制。

以下是我访问drawable的方法:

我在类中声明了一个drawable对象:

    private Drawable BARS_DEFAULT;
  1. 创建位图并将其用于drawable

    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);
    
  4. 当达到适当的SeekBar值时,一旦更改了drawable,所有这些尝试都会导致图标缩小。

    最后一点,drawable的更改是在setOnSeekBarChangeListener接口的onStopTrackingTouch方法中进行的。

1 个答案:

答案 0 :(得分:0)

我最终找到了解决方法。出于某种原因,图标的大小并没有保持不变,因为我在图层列表中使用dimen值来表示图标的大小。当我将其更改为圆形大小的硬编码dp值时,图标在运行时不再缩小。