我正在制作一个绘图应用,用户可以在其中选择自定义颜色。选择颜色后,customBtn会通过以下代码将其颜色更改为所选颜色:
customBtn.setBackgroundColor(Color.argb(alphaSeekBar.getProgress(), redSeekBar.getProgress(),
greenSeekBar.getProgress(), blueSeekBar.getProgress()));
然而,这使按钮成为方角。
我希望它是圆角,当按下时,它会变成灰色。
已经存在selector.xml
并显示如下,但我怎样才能将所有内容整合在一起,以便
<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);
选择自定义颜色之前的按钮完美显示圆角,在选择定制颜色后设置然后返回平方颜色,可能是因为setBackgroundColor行放在最后一个代码上。然而,我已经尝试过它,但仍然是平方的颜色。如何修改?
谢谢!
答案 0 :(得分:0)
由于您不支持全范围状态,如普通按钮(聚焦,禁用,按下,激活等),并且默认状态和按下状态之间的唯一区别是纯色。也许[PorterColorFilter][1]
可行。我认为您可以按原样设置按下状态,并将默认状态设置为白色。然后将颜色过滤器应用于具有设置自定义颜色的按钮。您可能需要尝试一些过滤模式,但我认为DST_ATOP
将取代白色,而不是黑色边框。并且当按钮上触发向下MotionEvent
时(或者称为触发的按下状态),您可能希望使用手势检测器来移除滤色器。
简短的回答是Android按钮不能很好地满足您的需求。它们往往需要静态可绘制的东西来定义它们在不同状态下的外观。
一个选项是限制颜色选择并为每种颜色创建一个drawable,并根据用户的选择设置drawable。我不知道您的按钮出现在哪种上下文中,但建议您按照正常按钮的触摸反馈示例来为用户提供一致性。
注意:setBackgroundColor
具有误导性,它只是将Button drawable设置为color drawable,它将替换圆角矩形drawable。这就是为什么当你这样做时它变成了一个矩形。