Ich entwickle eine kleine Android-Anwendung, in der ich als Hintergrund für das lineare Layout eine drawable Ressource eingestellt habe. Nun möchte ich die Hintergrundfarbe des linearen Layouts dynamisch ändern, aber innerhalb der Ressource "Drawable" .. .. Mein Code sieht folgendermaßen aus:
// 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"
>
und ich setze den Hintergrund für das lineare Layout in meiner Aktivität wie folgt ...
parentLayout = (LinearLayout) view.findViewById(R.id.lin_llt);
parentLayout.setBackgroundResource(R.drawable.bcd);
Nun, was ich tun möchte, möchte ich die Farbe meiner Ressource ändern, die die Farbänderung meines linearen Layouts mit abgerundeten Ecken und Polsterung definiert.
Ich habe dies auf folgende Weise versucht
ShapeDrawable bgShape = (ShapeDrawable )parentLayout.getBackground();
bgShape.getPaint().setColor(Color.BLACK);
aber es funktioniert nicht für mich. jede andere Lösung.
So, wie es geht ... Brauchen Sie Hilfe ... Danke ...
Ändern Sie die Layoutfarbe dynamisch
LinearLayout Layout = (LinearLayout) findViewById(R.layout.id);
Layout.setBackgroundColor(Color.parseColor("#ffffff"));
Legen Sie den Hintergrundfarbverlauf dynamisch fest
View layout = findViewById(R.id.mainlayout);
GradientDrawable Gd = new GradientDrawable(
GradientDrawable.Orientation.TOP_BOTTOM,
new int[] {0xFF616261,0xFF131313});
Gd.setCornerRadius(0f);
layout.setBackgroundDrawable(Gd);
Sie könnten so etwas versuchen:
Drawable sampleDrawable = context.getResources().getDrawable(R.drawable.balloons);
sampleDrawable.setColorFilter(new PorterDuffColorFilter(0xffff00,PorterDuff.Mode.MULTIPLY));
und für mehr können Sie sich auf Folgendes beziehen:
Wie kann ich die Farben eines Drawable in Android ändern?
Zeichnungsfarbe programmgesteuert ändern
Android: Formfarbe zur Laufzeit ändern
Sie könnten dies auch versuchen:
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;
}
wie in Wie kann ich die Farben eines Drawable in Android ändern?
benutze das..
<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" />
Ein Ansatz wäre, ein zweites zeichnbares XML mit der zweiten Farbe zu erstellen und dann den Hintergrund des Layouts mit dem zweiten Zeichen zu ändern.
Das Folgende eignet sich hervorragend zum Einstellen der Farbe des Zeichnungsprogramms ohne seine Form zu ändern:
parentLayout.getBackground().setColorFilter(
Color.BLACK,
PorterDuff.Mode.SRC_ATOP
);