私は小さいAndroid線形レイアウトの背景として描画可能なリソースを設定するアプリケーションを開発しています。 :
// 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);
今、私がやりたいことは、描画可能なリソースの色を変更することです.
私はこれを次の方法で試しました
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));
そして、あなたは参照することができます:
これを試すこともできます:
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;
}
これを使って..
<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" />
1つの方法は、2番目の色で2番目のドロウアブルXMLを作成し、2番目のドロウアブルでレイアウトの背景を変更することです。
次は、ドローアブルの色をプログラムで設定するのに最適ですwithout形状を変更します:
parentLayout.getBackground().setColorFilter(
Color.BLACK,
PorterDuff.Mode.SRC_ATOP
);