12

カラー ピッカーには、色相、彩度、明度の 3 つの SeekBars があります。これらの SeekBars で setProgressDrawable を呼び出すと、onCreate からの初期化時に一度だけ機能します。ユーザーが色相 SeekBar を更新するとき、Saturation と Value SeekBars の setProgressDrawable を呼び出して、新しい色相の色の選択肢をユーザーに表示します。

ただし、 setProgressDrawable へのすべての呼び出し ( からの最初の呼び出しの後onCreate) により、SeekBar が空白になります。

ユーザー入力に基づいて SeekBars の背景グラデーションを更新するにはどうすればよいですか?

4

2 に答える 2

43

私が見つけたのは、 setprogressdrawable が呼び出されたときにドローアブルがサイズを認識していないことです。最初にセットアップするとき、それはサイズを知っています。これは、シークバーに設定された新しいドローアブルがあることを意味しますが、ドローアブルのサイズは 0 であり、何も表示されません。

解決策は、最初に現在のドローアブルの境界を取得してから、新しいドローアブルを設定し、最後に境界を再度設定することです。

Rect bounds = mySeekBar.getProgressDrawable().getBounds();
mySeekBar.setProgressDrawable(newSeekBarBackground);
mySeekBar.getProgressDrawable().setBounds(bounds);
于 2011-01-12T21:19:38.043 に答える
1

これに対する解決策がわかりました。最初に setProgresssDrawable(drawable) を呼び出してドローアブルを ProgressBar に設定してから、値を設定する必要があります。その逆はありません。それはうまくいくでしょう。

プログレス ドローアブルを設定するには:

次のような描画可能な xml ファイルを使用します。

<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<item android:id="@android:id/background">
    <shape>
        <corners android:radius="5dip" />
        <gradient android:startColor="#00CCCC"
            android:centerColor="#00CCCC" android:centerY="0.75"
            android:endColor="#00CCCC" android:angle="270" />
    </shape>
</item>
<item android:id="@android:id/secondaryProgress">
    <clip>
        <shape>
            <corners android:radius="5dip" />
            <gradient android:startColor="#00CCCC"
                android:centerColor="#00CCCC" android:centerY="0.75"
                android:endColor="#00CCCC" android:angle="270" />
        </shape>
    </clip>
</item>
<item android:id="@android:id/progress">
    <clip>
        <shape>
            <corners android:radius="5dip" />
            <gradient android:startColor="#00CCCC" android:centerColor="#00CCCC"
                android:centerY="0.75" android:endColor="#00CCCC" android:angle="270" />
        </shape>
    </clip>
</item>

これを /drawable フォルダーに保存し、 setProgressDrawable(drawable) 関数で使用します

于 2010-06-10T12:39:55.550 に答える