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

青春须早为,岂能长少年。这篇文章主要讲述如何在android中改变可绘制形状的颜色相关的知识,希望能为你提供帮助。
【如何在android中改变可绘制形状的颜色】我正在开发小型android应用程序,其中我将drawable资源设置为线性布局的背景。现在,我想要做的是动态地改变线性布局的背景颜色,但是在可绘制资源中。我的代码如下:

//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 ..
我按照以下方式尝试了这个
ShapeDrawable bgShape = (ShapeDrawable )parentLayout.getBackground(); bgShape.getPaint().setColor(Color.BLACK);

但它不适合我。任何其他解决方案
那怎么办......需要帮助......谢谢......
答案动态更改布局颜色
LinearLayout Layout = (LinearLayout) findViewById(R.layout.id); Layout.setBackgroundColor(Color.parseColor("#ffffff"));

动态设置背景颜色渐变
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));

而且你可以参考:
How to change colors of a Drawable in Android?
Change drawable color programmatically
Android: Change Shape Color in runtime
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 = https://www.songbingjia.com/android/((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; }

如How to change colors of a Drawable in Android?所示
另一答案用这个..

< 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" />


另一答案一种方法是使用第二种颜色创建第二个可绘制XML,然后使用第二个drawable更改布局的背景。
另一答案以下工作非常适合以编程方式设置可绘制的颜色而不更改其形状:
parentLayout.getBackground().setColorFilter( Color.BLACK, PorterDuff.Mode.SRC_ATOP );


    推荐阅读