2010-12-03 7 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()에서 SeekBar를 사용자 정의합니다. 여기
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); 

최대 SeekBar Color Gradient

+0

이 코드 조각에 대해 감사드립니다. 매력처럼 작동합니다. 하지만 어떻게 그 색상을 선택합니까? 내가 얻을 수있는 유일한 매개 변수는 진보입니다. 그렇다면 어떻게 진행 과정에 색상을 연결합니까? 감사합니다. –

+0

그게 어려운 부분입니다. 그래디언트가 기술적으로 선형이 아니기 때문에 선택 도구가 실제 색상이 진행 막대에있는 위치와 상관 관계가있는 고유 한 알고리즘을 작성해야합니다. – JPM

+0

'LinearGradient'의'x2' 매개 변수는 탐색 바의 너비를 기준으로 조정되거나 그래디언트가 전체 막대를 정확히 채울 필요가 있다고 생각합니다. 대신에'GradientDrawable'을 사용하면이 문제를 피할 수 있습니다 :'seekBar.setProgressDrawable (new GradientDrawable (GradientDrawable.Orientation.LEFT_RIGHT, new int [] {startColor, endColor}))' – hagabaka

7

이이 LinearGradient를 사용하여 제공되는 용액에 첨가되어 상기 현재 코드의 이미지이다. 진행 상황을 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가 주어지면 진보를 다시 얻을 수 있습니까? 두 번째 색상 선택기가 있고 이에 따라 슬라이더를 업데이트하려고합니다. – RealCasually

+0

문자열 16 진수 = String.format ("# % 02X % 02X % 02X", r, g, b); – user3219446