1

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

     customBtn.setBackgroundColor(Color.argb(alphaSeekBar.getProgress(), redSeekBar.getProgress(), 
        greenSeekBar.getProgress(), blueSeekBar.getProgress()));

但是,这会使按钮变成方角。

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

已经存在selector.xml并显示如下,但是我怎么能将所有的东西合并在一起,这样

  1. 它会在未按下时显示自定义颜色,圆角,和
  2. 按下时它变成灰色(并保持圆角)?

选择器:

<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行放在最后一个代码。然而我已经尝试将它向上移动,但仍然是方形颜色。如何修改?

谢谢!

4

1 回答 1

0

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

简短的回答是,Android 按钮不能很好地满足您的需求。它们往往需要静态可绘制对象来定义它们在不同状态下的外观。

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

注意:setBackgroundColor具有误导性,它只是将 Button drawable 设置为 color drawable,它正在替换您的圆角矩形 drawable。这就是为什么当你这样做时它会变成一个矩形。

于 2013-02-02T20:17:55.157 回答