2010-12-03 17 views
1

色勾配ピッカーにSeekBar(旧式のJavaスライダー)を使用したいと考えています。私はこのようないくつかの例を見てきましたが、新しいクラスなどを作る必要があります。元のクラスを変更または上書きする方法が必要です。または、グラデーションで背景を置き換えてください。SeekBarでカラーグラデーションを作成するには?

答えて

10

私はここにあなたがそれをやっている方法を理解しました。

XMLで標準のシークバーを作成します。

<SeekBar 
     android:id="@+id/seekbar_font" 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" 
     android:layout_margin="10px" 
     android:layout_below="@id/color_font_text" 
     android:max="100" 
     android:progress="50"></SeekBar> 

は、その後、あなたはboxShapeを作成し、その中てLinearGradientを強制してのonCreate()でシークバーをカスタマイズします。ここ

LinearGradient test = new LinearGradient(0.f, 0.f, 300.f, 0.0f, 

     new int[] { 0xFF000000, 0xFF0000FF, 0xFF00FF00, 0xFF00FFFF, 
     0xFFFF0000, 0xFFFF00FF, 0xFFFFFF00, 0xFFFFFFFF}, 
     null, TileMode.CLAMP); 
ShapeDrawable shape = new ShapeDrawable(new RectShape()); 
shape.getPaint().setShader(test); 

SeekBar seekBarFont = (SeekBar)findViewById(R.id.seekbar_font); 
seekBarFont.setProgressDrawable((Drawable)shape); 

これは溶液がてLinearGradientを使用して提供に加えて、あるSeekBar Color Gradient

+0

このコードをお寄せいただきありがとうございます。魅力的です。 しかし、どのように色を選んだのですか? 私が得ることができる唯一のパラメターは進歩です、そして、どのように進歩に色をリンクしますか? ありがとうございます! –

+0

それは難しい部分です。グラデーションは技術的に線形ではないので、ピッカーの位置と実際の色がプログレスバーにどのような相関があるかを独自のアルゴリズムで記述する必要があります。 – JPM

+0

'LinearGradient'の' x2'パラメータは、シークバーの幅に基づいて調整するか、グラデーションがバー全体を正確に埋めるように調整する必要があると思います。 'GradientDrawable'(GradientDrawable.Orientation.LEFT_RIGHT、new int [] {startColor、endColor}))' – hagabaka

7

上記の現在のコードまでの画像です。進捗状況をrgbに変換するにはこのロジックを試してください。

lineColorSeekbar.setMax(256*7-1); 
     lineColorSeekbar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() { 
      @Override 
      public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) { 
       if(fromUser){ 
        int r = 0; 
        int g = 0; 
        int b = 0; 

        if(progress < 256){ 
         b = progress; 
        } else if(progress < 256*2) { 
         g = progress%256; 
         b = 256 - progress%256; 
        } else if(progress < 256*3) { 
         g = 255; 
         b = progress%256; 
        } else if(progress < 256*4) { 
         r = progress%256; 
         g = 256 - progress%256; 
         b = 256 - progress%256; 
        } else if(progress < 256*5) { 
         r = 255; 
         g = 0; 
         b = progress%256; 
        } else if(progress < 256*6) { 
         r = 255; 
         g = progress%256; 
         b = 256 - progress%256; 
        } else if(progress < 256*7) { 
         r = 255; 
         g = 255; 
         b = progress%256; 
        } 

        lineColorSeekbar.setBackgroundColor(Color.argb(255, r, g, b)); 
       } 
      } 

      @Override 
      public void onStartTrackingTouch(SeekBar seekBar) { 

      } 

      @Override 
      public void onStopTrackingTouch(SeekBar seekBar) { 

      } 
     }); 
+0

これはうまくいきました。どのようにr、g、b与えられた進歩を得ることができますか? 2番目のカラーピッカーがあり、それに応じてスライダを更新する必要があります。 – RealCasually

+0

文字列hex = String.format( "#%02X%02X%02X"、r、g、b); – user3219446

関連する問題