我想将SeekBar(即旧式Java滑块)用于颜色渐变选取器。我看到过这样的例子,但他们都需要创建新的类和类。必须有一种方法来修改或重写原始类。或者只是用渐变替换背景。如何在SeekBar中创建颜色渐变?
1
A
回答
10
我想到了这里是你如何做到这一点。
您在XML中创建标准的seekbar。
<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);
这里是当前代码的向上以上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) {
}
});
相关问题
- 1. CSS创建颜色渐变
- 2. 如何在Python中创建颜色渐变?
- 3. 如何在svg背景中创建渐变颜色
- 4. 如何在iOS中使用渐变创建叠加颜色
- 5. 如何在Matlab中使用第三个变量创建颜色渐变?
- 6. d3.js:如何创建自定义颜色渐变图例?
- 7. 如何添加渐变颜色到使用UIBezierPath创建的CAShapeLayer
- 8. 如何使用颜色分区创建渐变效果?
- 9. 在bootstrap中创建四个颜色渐变mixin
- 10. Javascript颜色渐变
- 11. 颜色渐变(ColdFusion)
- 12. Android:使用seekbar逐渐改变多个imageview背景的颜色
- 13. 如何在vb.net中为背景颜色创建一个带渐变的按钮?
- 14. 用颜色制作颜色渐变:
- 15. 如何在XCode 6中为UISlider添加渐变色彩颜色?
- 16. 如何复制UINavigationBar的渐变颜色?
- 17. 如何动画渐变停止颜色?
- 18. 如何在Opera中创建CSS3渐变?
- 19. 如何在颜色变化的画布上在Android上绘制渐变颜色?
- 20. 如何更改Android中的seekbar颜色?
- 21. 使用CSS3在文本上创建双色渐变渐变
- 22. 如何在div边框上创建不带颜色的不透明渐变?
- 23. 逐渐改变颜色
- 24. 渐变颜色拉斐尔
- 25. FabricJS渐变颜色值
- 26. 生成颜色渐变
- 27. 颜色渐变的背景
- 28. 带颜色渐变的UIBeziepath
- 29. DarkGDK颜色渐变代码
- 30. Three.js行的颜色渐变
对这段代码非常感谢,它像一个魅力。 但是,你如何获得颜色选择呢? 我可以得到的唯一参数是进度,那么,如何将颜色与进度联系起来? 提前致谢! – 2011-01-25 19:50:41
是的,这是最难的部分。由于梯度在技术上不是线性的,因此您必须编写自己的算法来将拾取器与实际颜色在进度条上的位置关联起来。 – JPM 2011-01-27 00:11:16