Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/user-interface/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 如何获取宽度以正确设置线性半径_Android_User Interface_Seekbar_Linear Gradients - Fatal编程技术网

Android 如何获取宽度以正确设置线性半径

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创建一个颜色选择器。到目前为止,我已经成功地在onCreate()中替换了可绘制的进度,如下所示:

    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);