Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/219.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_Button_Colors - Fatal编程技术网

android按钮定制颜色和圆角

android按钮定制颜色和圆角,android,button,colors,Android,Button,Colors,我正在制作一个绘图应用程序,用户可以在其中选择自定义颜色。选择颜色后,customBtn将通过以下代码将其颜色更改为所选颜色: customBtn.setBackgroundColor(Color.argb(alphaSeekBar.getProgress(), redSeekBar.getProgress(), greenSeekBar.getProgress(), blueSeekBar.getProgress())); 但是,这会使按钮成为直角 我希望它是圆形

我正在制作一个绘图应用程序,用户可以在其中选择自定义颜色。选择颜色后,customBtn将通过以下代码将其颜色更改为所选颜色:

     customBtn.setBackgroundColor(Color.argb(alphaSeekBar.getProgress(), redSeekBar.getProgress(), 
        greenSeekBar.getProgress(), blueSeekBar.getProgress()));
但是,这会使按钮成为直角

我希望它是圆形的,当按下时,它会变成灰色

已经存在
selector.xml
,如下所示,但是如何将所有内容合并在一起,以便

  • 未按下时,它将显示自定义颜色、圆角和
  • 按下时,它会变成灰色(并保持圆角)
  • 选择器:

    编程问题: 选择自定义颜色前的按钮完美地显示圆角,选择自定义颜色后设置,然后返回到方形颜色,可能是因为setBackgroundColor行位于最后一个代码处。然而我试着把它向上移动,但仍然是正方形的颜色。如何修改


    谢谢

    由于您不支持像普通按钮那样的全范围状态(聚焦、禁用、按下、激活等),因此默认状态和按下状态之间的唯一区别是纯色。也许一个
    [PorterColorFilter][1]
    可以工作。我认为您可以将按下的状态设置为原样,并将默认状态设置为白色。然后将颜色过滤器应用于设置了自定义颜色的按钮。您可能需要尝试一些过滤模式,但我认为
    DST_top
    将替换白色边框,而不是黑色边框。当按钮上触发向下
    MotionEvent
    时(也称为触发按下状态),您可能需要使用手势检测器移除颜色过滤器

    简单的回答是,Android按钮不能很好地满足您的需求。它们往往需要静态绘图,以定义它们在不同状态下的外观

    一个选项是限制颜色选择并为每种颜色创建可绘制,并根据用户的选择设置可绘制。我不知道您的按钮出现在什么上下文中,但建议按照触摸反馈示例使用普通按钮,以便为用户提供一致性


    注意:
    setBackgroundColor
    有误导性,它只是将按钮drawable设置为颜色drawable,这将取代圆角矩形drawable。这就是为什么当你这样做的时候它会变成一个矩形

    我见过一些按程序设置的示例。我已经用上面的代码编辑了代码。该按钮可以在设置自定义颜色之前显示角。然而,在选择了定制的颜色后,它又变成了方形的角落。您知道如何以编程方式进一步修改吗?谢谢我在最后一段举例说明为什么它变成正方形<代码>setBackgroundColor==
    setBackgroundDrawable
    ,其中drawable是一个
    ColorDrawable
    。换句话说,它将替换您在
    setBackgroundDrawable
    中设置的可绘制文件。此外,
    视图
    s是屏幕的矩形区域,
    可着色
    将仅用其颜色填充该区域。您必须使圆角矩形成为所需的颜色,而不是设置圆角矩形形状,然后应用背景色。这意味着您可以在创建矩形时设置颜色,也可以在其顶部使用颜色过滤器。
    <item android:state_pressed="true" >         
        <shape xmlns:android="http://schemas.android.com/apk/res/android"> 
            <stroke android:width="2dp" android:color="@color/black" />
            <solid android:color="@color/grey"/>
            <padding android:left="5dp" android:top="2dp" 
                android:right="5dp" android:bottom="2dp" /> 
            <corners android:radius="5dp" /> 
        </shape>    
    </item>
    
    <item>
        <shape xmlns:android="http://schemas.android.com/apk/res/android"> 
            <stroke android:width="2dp" android:color="@color/black" />
            <solid android:color="@color/???-- how to amend---??"/>
            <padding android:left="5dp" android:top="2dp" 
                android:right="5dp" android:bottom="2dp" /> 
            <corners android:radius="5dp" /> 
        </shape>
    </item>
    
     customColorCode = Color.argb(alphaSeekBar.getProgress(), redSeekBar.getProgress(), 
             greenSeekBar.getProgress(), blueSeekBar.getProgress());         
    
    
    
     RoundRectShape rs = new RoundRectShape(new float[] { 10, 10, 10, 10, 10, 10, 10, 10}, null, null);
     ShapeDrawable sd = new ShapeDrawable(rs);
     customBtn.setBackgroundDrawable(sd);
     customBtn.setBackgroundColor(customColorCode);