2011-12-22 33 views
0

我從SeekBar創建顏色選擇器。到目前爲止,我已經成功地替換了onCreate()中繪製的進度,如下所示:如何獲取寬度以正確設置LinearGradient

SeekBar colorChooser = (SeekBar) findViewById(R.id.seekBarColorChooser); 

    LinearGradient rainbow = new LinearGradient(0f, 0f, 100f, 0f, 
      new int[] { 0xFFFF0000, 0xFFFFFF00, 0xFF00FF00, 
            0xFF00FFFF, 0xFF0000FF, 
            0xFFFF00FF, 0xFFFF0000}, null, TileMode.CLAMP); 

    RoundRectShape roundedRect = new RoundRectShape(new float [] {10f, 10f, 10f, 10f, 10f, 10f, 10f, 10f} , null, null); 

    ShapeDrawable shape = new ShapeDrawable(roundedRect); 
    shape.getPaint().setShader(rainbow); 

    colorChooser.setProgressDrawable((Drawable) shape); 

這很好用!結果正是我所尋找的,但是,我關心的一件事是LinearGradient中的硬編碼寬度(100f)。

由於此對話框尚未實現,因此SeekBar或對話框都沒有任何寬度。換句話說,colorChooser.getWidth()返回0.

如果寬度太小,則漸變在左側被壓縮。如果太大,只會出現一部分漸變。如何獲得良好的寬度值以設置線性漸變以正確顯示?

謝謝!

回答

1

您可以將dimension添加到您的資源中,當然,這些資源對於不同的屏幕可以有不同的值 - 如果沒有定義特定的dpi(例如),它也可以適當縮放。

+0

感謝您的想法。它仍然有點像硬編碼,但它確實有效。我確信一旦我在另一個平臺上測試,我的擔憂就會消失。謝謝! – Chris 2011-12-22 17:38:27

+0

好吧,無論如何,您在圖形或包裝內容之後調整組件的大小 - 因爲您的進度可繪製沒有任何內容(我假設)您將不得不爲它指定大小 - 更好是一個大小可根據設備正確配置。 – Jens 2011-12-23 08:02:49

1

更換

LinearGradient rainbow = new LinearGradient(0f, 0f, 100f, 0f, 
     new int[] { 0xFFFF0000, 0xFFFFFF00, 0xFF00FF00, 
           0xFF00FFFF, 0xFF0000FF, 
           0xFFFF00FF, 0xFFFF0000}, null, TileMode.CLAMP); 

LinearGradient rainbow = new LinearGradient(0f, 0f, 500f, 0f, 
     new int[] { 0xFFFF0000, 0xFFFFFF00, 0xFF00FF00, 
           0xFF00FFFF, 0xFF0000FF, 
           0xFFFF00FF, 0xFFFF0000}, null, TileMode.CLAMP); 
相關問題