색 그라디언트 선택 도구로 SeekBar (예 : 구식 Java 슬라이더)를 사용하고 싶습니다. 나는 이와 같은 몇 가지 예를 보았지만 모두 새로운 수업을 만들어야합니다. 원래 클래스를 수정하거나 재정의 할 수있는 방법이 있어야합니다. 또는 배경을 그라데이션으로 바꿉니다.SeekBar에서 색상 그라디언트를 만드는 방법은 무엇입니까?
1
A
답변
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
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
이 코드 조각에 대해 감사드립니다. 매력처럼 작동합니다. 하지만 어떻게 그 색상을 선택합니까? 내가 얻을 수있는 유일한 매개 변수는 진보입니다. 그렇다면 어떻게 진행 과정에 색상을 연결합니까? 감사합니다. –
그게 어려운 부분입니다. 그래디언트가 기술적으로 선형이 아니기 때문에 선택 도구가 실제 색상이 진행 막대에있는 위치와 상관 관계가있는 고유 한 알고리즘을 작성해야합니다. – JPM
'LinearGradient'의'x2' 매개 변수는 탐색 바의 너비를 기준으로 조정되거나 그래디언트가 전체 막대를 정확히 채울 필요가 있다고 생각합니다. 대신에'GradientDrawable'을 사용하면이 문제를 피할 수 있습니다 :'seekBar.setProgressDrawable (new GradientDrawable (GradientDrawable.Orientation.LEFT_RIGHT, new int [] {startColor, endColor}))' – hagabaka