如何更改android中可绘制形状的颜色

我正在开发小型Android应用程序,我在其中设置可绘制资源作为线性布局的背景。 现在我想要做的是dynamic地改变线性布局的背景色,但是在可绘制的资源内。 我的代码如下所示:

// bcd.xml <selector xmlns:android="http://schemas.android.com/apk/res/android"> <item> <shape> <gradient android:endColor="#22000000" android:startColor="#22000000" android:angle="270" /> <stroke android:width="3dp" android:color="@color/white" /> <corners android:radius="3dp" /> <padding android:left="10dp" android:top="10dp" android:right="10dp" android:bottom="10dp" /> </shape> </item> 

 <LinearLayout android:id="@+id/lin_llt" android:layout_width="wrap_content" android:layout_height="wrap_content" > 

我在我的活动中设置线性布局的背景像这样…

 parentLayout = (LinearLayout) view.findViewById(R.id.lin_llt); parentLayout.setBackgroundResource(R.drawable.bcd); 

现在我想要做的,我想改变我的drawable资源的颜色,这意味着我的线性布局的变化颜色与圆angular和填充定义在drawable ..

我以下面的方式尝试了这个

 ShapeDrawable bgShape = (ShapeDrawable )parentLayout.getBackground(); bgShape.getPaint().setColor(Color.BLACK); 

但它不适合我 任何其他解决scheme

所以如何做到这一点…需要帮助…谢谢…

Solutions Collecting From Web of "如何更改android中可绘制形状的颜色"

dynamic更改布局颜色

 LinearLayout Layout = (LinearLayout) findViewById(R.layout.id); Layout.setBackgroundColor(Color.parseColor("#ffffff")); 

dynamic设置背景颜色渐变

 View layout = findViewById(R.id.mainlayout); GradientDrawable gd = new GradientDrawable( GradientDrawable.Orientation.TOP_BOTTOM, new int[] {0xFF616261,0xFF131313}); gd.setCornerRadius(0f); layout.setBackgroundDrawable(gd); 

你可以尝试这样的事情:

 Drawable sampleDrawable = context.getResources().getDrawable(R.drawable.balloons); sampleDrawable.setColorFilter(new PorterDuffColorFilter(0xffff00,PorterDuff.Mode.MULTIPLY)); 

更多的你可以参考:

如何在Android中更改Drawable的颜色?

以编程方式更改可绘制的颜色

Android:在运行时更改形状颜色

http://pastebin.com/Hd2aU4XC

你也可以试试这个:

 private static final int[] FROM_COLOR = new int[]{49, 179, 110}; private static final int THRESHOLD = 3; public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.test_colors); ImageView iv = (ImageView) findViewById(R.id.img); Drawable d = getResources().getDrawable(RES); iv.setImageDrawable(adjust(d)); } private Drawable adjust(Drawable d) { int to = Color.RED; //Need to copy to ensure that the bitmap is mutable. Bitmap src = ((BitmapDrawable) d).getBitmap(); Bitmap bitmap = src.copy(Bitmap.Config.ARGB_8888, true); for(int x = 0;x < bitmap.getWidth();x++) for(int y = 0;y < bitmap.getHeight();y++) if(match(bitmap.getPixel(x, y))) bitmap.setPixel(x, y, to); return new BitmapDrawable(bitmap); } private boolean match(int pixel) { //There may be a better way to match, but I wanted to do a comparison ignoring //transparency, so I couldn't just do a direct integer compare. return Math.abs(Color.red(pixel) - FROM_COLOR[0]) < THRESHOLD && Math.abs(Color.green(pixel) - FROM_COLOR[1]) < THRESHOLD && Math.abs(Color.blue(pixel) - FROM_COLOR[2]) < THRESHOLD; } 

如何在Android中更改Drawable的颜色?

一种方法是用第二种颜色创build第二个可绘制的XML,然后用第二个可绘制的元素改变布局的背景。

用这个..

 <solid android:color="#e1e1e1" /> <stroke android:width="2dp" android:color="#808080" /> <corners android:radius="10dp" /> <padding android:bottom="5dp" android:left="5dp" android:right="5dp" android:top="5dp" />