在android活动类中动态更改可绘制的起始颜色和结束颜色

时间:2013-07-15 09:07:17

标签: android background drawable

您好我正在开发一个Android应用程序,其中我可绘制资源来设置按钮的背景。我想以编程方式更改可绘制的开始和结束颜色,即在按钮单击侦听器内的活动类中。我的绘画看起来像:

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
  android:shape="rectangle">
  <gradient android:startColor="#be584c" 
    android:endColor="#be584c"
    android:angle="270" />
  <corners android:radius="2dp" />
  <stroke android:width="1px"/>
</shape>

我将其设置为xml文件中按钮的背景。 android:background="@drawable/download_button"

我希望在活动类中更改此drawable的开始颜色和结束颜色如何执行此操作。有没有办法f =这样做。需要帮忙。谢谢。

3 个答案:

答案 0 :(得分:9)

是的,有可能。您应该使用 GradientDrawable 来执行此操作。

int colors[] = { 0xff255779, 0xffa6c0cd };

GradientDrawable gradientDrawable = new GradientDrawable(
        GradientDrawable.Orientation.TOP_BOTTOM, colors);

view.setBackgroundDrawable(gradientDrawable);

根据您的要求更改颜色代码。虽然我使用Color.parseColor("color code"),但它不起作用。

方向有一些选项,如下所示。

GradientDrawable.Orientation.BOTTOM_TOP;
GradientDrawable.Orientation.LEFT_RIGHT;
GradientDrawable.Orientation.RIGHT_LEFT;

答案 1 :(得分:0)

Chintan的解决方案足够好,如果您不愿意再次创建GradientDrawable,但是如果您只是想更改颜色而又不涉及填充等其他属性,则可以只需使用setColors。在以下情况下,它显示了如何更改startColorcenterColorendColor

int color = screenshot.getPixel(x, y);
GradientDrawable drawable = (GradientDrawable)binding.layoutStation.getBackground();
int colors[] = { color, 0xffffffff, color };
drawable.setColors(colors);

答案 2 :(得分:-1)

new GradientDrawable(GradientDrawable.Orientation.TL_BR,new int [] {0xFF141a24,0xFF293f49,0xFF72554c})