Android 如何获取宽度以正确设置线性半径
我正在从SeekBar创建一个颜色选择器。到目前为止,我已经成功地在onCreate()中替换了可绘制的进度,如下所示:Android 如何获取宽度以正确设置线性半径,android,user-interface,seekbar,linear-gradients,Android,User Interface,Seekbar,Linear Gradients,我正在从SeekBar创建一个颜色选择器。到目前为止,我已经成功地在onCreate()中替换了可绘制的进度,如下所示: SeekBar colorChooser = (SeekBar) findViewById(R.id.seekBarColorChooser); LinearGradient rainbow = new LinearGradient(0f, 0f, 100f, 0f, new int[] { 0xFFFF0000, 0xFFFFFF0
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或对话框似乎都没有任何宽度。换句话说,colorChooser.getWidth()返回0
如果宽度太小,则在左侧压实坡度。如果太大,则只显示渐变的一部分。如何获得一个好的宽度值来设置线性渐变以正确显示
谢谢大家! 您可以向资源中添加一个,当然,对于不同的屏幕,它可以有不同的值-如果您没有定义特定的dpi(例如),它也会适当地扩展。替换
LinearGradient rainbow = new LinearGradient(0f, 0f, 100f, 0f,
new int[] { 0xFFFF0000, 0xFFFFFF00, 0xFF00FF00,
0xFF00FFFF, 0xFF0000FF,
0xFFFF00FF, 0xFFFF0000}, null, TileMode.CLAMP);
与
谢谢你的主意。它仍然感觉有点像硬编码,但它确实有效。我相信,一旦我在另一个平台上进行测试,我的担忧就会得到缓解。非常感谢。好吧,不管怎样,在图形或包装内容之后,您都要调整组件的大小-因为您的progress drawable没有任何内容(我假设),所以您必须为它指定一个大小-最好是一个可以根据设备正确配置的大小。
LinearGradient rainbow = new LinearGradient(0f, 0f, 500f, 0f,
new int[] { 0xFFFF0000, 0xFFFFFF00, 0xFF00FF00,
0xFF00FFFF, 0xFF0000FF,
0xFFFF00FF, 0xFFFF0000}, null, TileMode.CLAMP);