0

JAVAAndroid的搜索條定製拇指停留在開始

 @Override 
     public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) { 
      app.iMeter = progress; 

      Bitmap b = BitmapFactory.decodeResource(getResources(), R.drawable.slider_pad_2x).copy(Bitmap.Config.ARGB_8888, true); 

      float scale = getResources().getDisplayMetrics().density; 
      float x = (int) (17 * scale + 0.5f); 
      int y = (int) ((b.getHeight()/2-3) * scale + 0.5f); 

      if(seekBar.getProgress() > 9) { 
       x = (int) (14 * scale + 0.5f); 
      } 
      if(seekBar.getProgress() > 99) { 
       x = (int) (11 * scale + 0.5f); 
      } 

      Canvas canvas = new Canvas(b); 
      canvas.drawText(""+progress, x, y, paint); 
      BitmapDrawable bd = new BitmapDrawable(b); 

      bd.setBounds(0, 0, bd.getIntrinsicWidth(), bd.getIntrinsicHeight()); 

      seekBar.setThumb(bd); 
     } 

XML

 <SeekBar 
       android:id="@+id/seekBar1" 
       android:layout_width="match_parent" 
       android:layout_height="wrap_content" 
       android:layout_gravity="center_vertical" 
       android:layout_marginLeft="10dp" 
       android:background="@drawable/slider_background_2x" 
       android:max="200" 
       android:paddingLeft="17dp" 
       android:paddingRight="16dp" 
       android:progress="0" 
       android:progressDrawable="@drawable/transparant_dot" 
       android:thumb="@drawable/slider_pad_2x" /> 

我在2個不同版本的Android設備上測試:

  • 的Android 2.3.6
  • Android 4.2.2

在4.2.2上,它的工作原理應該如此。顯示可繪製的進度值。在2.3.6上,拇指被卡住了。當我嘗試移動它時,拇指上的值確實會改變,但它仍然卡住。

我可以刪除setBounds,它仍然可以在4.2.2上工作,但在2.3.6上,當我觸摸它時,拇指會完全消失。

任何想法?

+0

我也有同樣的問題。在Android版本> 4.0中工作正常,但在2.3.x中無法工作 – Dray

+0

您好Pim,我面臨同樣的問題,它不適用於Android 2.3.6。你解決了這個問題嗎?如果您解決了問題,請幫助我如何解決此問題 –

+0

嘿Murali,是的,我解決了問題,但我無法再訪問代碼(切換作業)......但這是可能的。如果您找到解決方案,請將其添加爲答案。祝你好運! –

回答

1

看起來像在Android上< 2.3.x當進度改變時,只更新了拇指的邊界,但在調用setThumb()時沒有更新。這就是爲什麼你必須在Drawable之前調用setBounds(),然後將其設置爲Thumb,以使其完全可見。但是,當你撥打

bd.setBounds(0, 0, bd.getIntrinsicWidth(), bd.getIntrinsicHeight()); 

你也設置位置,因此鎖定在開始。 在Android上> 4.0 setBounds()在本例中調用setThumb()時調用,因此在drawable上調用setBounds()不會執行任何操作。

要解決這個問題,你可以通過自己計算來給出正確的界限。以here爲例。

我有我自己的班級,它擴展了SeekBar,所以在設置好拇指後給super.onSizeChanged()解決了問題。

+0

謝謝!這個對我有用。我剛剛稱爲super.onSizeChanged(getWidth(),getHeight(),getWidth(),getHeight());設置新的拇指後。 – MistaGreen