android按钮定制颜色和圆角
我正在制作一个绘图应用程序,用户可以在其中选择自定义颜色。选择颜色后,customBtn将通过以下代码将其颜色更改为所选颜色:android按钮定制颜色和圆角,android,button,colors,Android,Button,Colors,我正在制作一个绘图应用程序,用户可以在其中选择自定义颜色。选择颜色后,customBtn将通过以下代码将其颜色更改为所选颜色: customBtn.setBackgroundColor(Color.argb(alphaSeekBar.getProgress(), redSeekBar.getProgress(), greenSeekBar.getProgress(), blueSeekBar.getProgress())); 但是,这会使按钮成为直角 我希望它是圆形
customBtn.setBackgroundColor(Color.argb(alphaSeekBar.getProgress(), redSeekBar.getProgress(),
greenSeekBar.getProgress(), blueSeekBar.getProgress()));
但是,这会使按钮成为直角
我希望它是圆形的,当按下时,它会变成灰色
已经存在selector.xml
,如下所示,但是如何将所有内容合并在一起,以便
谢谢 由于您不支持像普通按钮那样的全范围状态(聚焦、禁用、按下、激活等),因此默认状态和按下状态之间的唯一区别是纯色。也许一个
[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);