我正在从 SeekBar 创建一个颜色选择器。到目前为止,我已经成功替换了 onCreate() 中的进度drawable,如下所示:
SeekBar colorChooser = (SeekBar) findViewById(R.id.seekBarColorChooser);
LinearGradient rainbow = new LinearGradient(0f, 0f, 100f, 0f,
new int[] { 0xFFFF0000, 0xFFFFFF00, 0xFF00FF00,
0xFF00FFFF, 0xFF0000FF,
0xFFFF00FF, 0xFFFF0000}, null, TileMode.CLAMP);
RoundRectShape roundedRect = new RoundRectShape(new float [] {10f, 10f, 10f, 10f, 10f, 10f, 10f, 10f} , null, null);
ShapeDrawable shape = new ShapeDrawable(roundedRect);
shape.getPaint().setShader(rainbow);
colorChooser.setProgressDrawable((Drawable) shape);
这完美!结果正是我正在寻找的结果,但是,我关心的一件事是 LinearGradient 中的硬编码宽度(100f)。
由于此对话框尚未实现,因此 SeekBar 或 Dialog 似乎都没有任何宽度。换句话说,colorChooser.getWidth() 返回 0。
如果宽度太小,渐变在左侧被压缩。如果太大,只会出现一部分渐变。如何获得一个好的宽度值来设置线性渐变以正确显示?
谢谢!