2012-01-16 25 views
1

私のアプリケーションにうまく収まる簡単なhsvカラーピッカーを実装したいと思います。既知のフォームカラーピッカーのように、他のseekBarsの値に従ってseekBarsの背景を変更したいと思います。SeekBar:ProgressDrawableは最初の進捗の後にのみ表示されます。

しかし、私は活動を開始したとき、私はこの見ています:レイアウト滞在seekBarsの1、私はこの結果を得る(関係なく)の最初のタッチ後と最初のタッチの後

enter image description here

をこのように、さらにタッチで変更されません(私は私のレイアウトに応じて期待しているだろうかでもある、上部の2 seekBarsは20dipであり、以下の図1は、親指ほど高いです):

enter image description here

2番目の画像に見られるように、私はseekBarを最初から持っていたいと思います。ここで

私のレイアウト:onProgressChanged(中OnSeekBarChangeListenerで

<SeekBar 
    android:id="@+id/SbColorPickerHue" 
    android:layout_width="match_parent" 
    android:layout_height="20dip" 
    android:max="360" 
    android:thumb="@drawable/colorpickerthumb" /> 
<SeekBar 
    android:id="@+id/SbColorPickerSaturation" 
    android:layout_width="match_parent" 
    android:layout_height="20dip" 
    android:max="255" 
    android:thumb="@drawable/colorpickerthumb"/> 
<SeekBar 
    android:id="@+id/SbColorPickerValue" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:max="255" 
    android:thumb="@drawable/colorpickerthumb"/> 

)と私は安全なあなたに(次の関数を呼び出しています(seekBarsをinitalizeする)のonCreate内のコースの多くのコードのみ色相グラデーション)が示されている:私はすでに多くの異なるものを試してみました

private void setGradients() { 
     mHueGradient = new GradientDrawable(GradientDrawable.Orientation.LEFT_RIGHT,mColors); 
     mHueGradient.setGradientType(GradientDrawable.LINEAR_GRADIENT); 
     mHueGradient.setCornerRadius(mRadius); 
     mHueGradient.setStroke(mStrokeWidth, mStrokeColor); 
     mSbHue.setBackgroundDrawable(mHueGradient); 
    } 

  • セット目を私はwrap_contentするために一定の高さ(20dp)等にシークバーのいくつかを設定したレイアウトXMLに見られるように倍のonCreate
  • の電子勾配はonRescume
  • 再び勾配を設定します。行動は少し変わった(写真に見られるように)。しかし、まだ満足していない。
  • フォースレイアウト
  • シークバーやDrawableの
  • のどちらかを無効に描画可能

結果は常に同じである測定します。

私はここで間違っていますか?私は何かが欠けていますか?

編集1:次のように

はシークバーとのChangeListenerが定義されています

mSbHue = (SeekBar)findViewById(R.id.SbColorPickerHue); 
    setGradients(); 
    mSbHue.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() { 
     public void onStopTrackingTouch(SeekBar seekBar) { 
     } 

     public void onStartTrackingTouch(SeekBar seekBar) { 
     } 

     public void onProgressChanged(SeekBar seekBar, int progress, 
       boolean fromUser) { 
      setGradients(); 
     } 
    }); 
+0

シークバー、リスナー、リスナーコードを宣言するコードを投稿できますか? – slayton

+0

質問に追加しました。 – KarlKarlsom

+0

いくつかのことを試しました。スレッドによってoncreateしてから1秒後にdrawableを更新します。変更はありません。 seekbarをプログラムでビューに追加します。変更はありません。今は完全にアイデアです... – KarlKarlsom

答えて

1

あなたはそれが動作リスナー後setGradients()を移動する場合。

mSbHue = (SeekBar)findViewById(R.id.SbColorPickerHue); 
mSbHue.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() { 
    public void onStopTrackingTouch(SeekBar seekBar) { 
    } 

    public void onStartTrackingTouch(SeekBar seekBar) { 
    } 

    public void onProgressChanged(SeekBar seekBar, int progress, 
      boolean fromUser) { 
     setGradients(); 
    } 
}); 
setGradients(); 
+0

いいえ、私は最初にそれを持っていました。次に、リスナーの後にsetGradients()と言ったようにしてみました。それから私は一度、一度、一度試しました。何も変わりませんでした。 – KarlKarlsom

+0

まあ...私は最初からあなたと同じ問題を抱えていました。その後、私はsetGradientsを移動しました。おそらく私はあなたのテストプロジェクトを公開して、それが実際に動作するのを見ることができますか? – Gomoku7

+0

私はあなたの答えを拒否したいと思うのではない:)もし私が色のピッカークラスをアップロードすることができます任意のヘルプです。 – KarlKarlsom

関連する問題