2016-09-09 42 views
0

我想創建一個SeekBar類似於在我的應用程序中選擇搜索類型的優步應用程序。爲此,我相信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

現在,當我的片段的onStart方法被調用時,這在SeekBar中正確顯示。但是,當我嘗試以編程方式更改可繪製的拇指時,它看起來像圓的大小收縮以匹配圖標的高度和寬度(如下所示)。

enter image description here

我有一種感覺,這與運行過程中,我檢索繪製的方式做。我嘗試了各種方法,並繼續以相同的結果,一個縮小的drawable。

這裏是我做訪問方法提拉:

我已經宣佈在類的可繪製對象:

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); 
    

所有這些嘗試導致圖標一旦達到合適的搜索欄值時,繪製改變正在縮小。

最後一件事,可繪製的變化是在setOnSeekBarChangeListener接口的onStopTrackingTouch方法中進行的。

回答

0

我最終找出瞭解決辦法。出於某種原因,圖標的大小不會保持不變,因爲我正在使用dimen值來表示圖層列表中圖標的大小。當我將其更改爲硬編碼的圓圈大小的dp值時,該圖標在運行時不再縮小。

相關問題