it-swarm.com.de

So ändern Sie die Farbe von Zeichenfiguren in Android

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 ...

26
nilkash

Ä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);
26
APriya

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

http://Pastebin.com/Hd2aU4XC

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?

10
lokoko

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

2
jigar

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.

1
AndroidGuy

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
);
0
DaveNOTDavid