Wie Sie programmgesteuert erstellen oder ändern Sie ein drawable aus Linien in verschiedenen Farben

Habe ich zum zeichnen eines 3dp-Linie zur Darstellung einer Ebene Abschluss in einem quizz-Spiel.

Diese Linie muß von 2 Farben. Zum Beispiel, wenn der Benutzer abgeschlossen hat, 40% der Ebene, die Linie wird rot für die ersten 40% von der Linie, die anderen 60% Grau.

Ich habe es geschafft, das zu tun, mit einem drawable :

<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
    <item>
        <shape android:shape="line" >
            <size android:height="3dp" android:width="40dp"/>
            <stroke
                android:width="1dp"
                android:color="#FFFC10" />
        </shape>
    </item>
    <item android:left="40dp">
        <shape android:shape="line" >
            <size android:height="3dp" android:width="60dp" />
            <stroke
                android:width="1dp"
                android:color="#DDDDDD" />
        </shape>
    </item>
</layer-list>

Und dann zeige ich es mit einer Bildansicht :

<ImageView
                android:id="@+id/row_completion_bar"
                android:src="@drawable/completion_bar"
                android:layout_width="100dp"
                android:layout_height="3dp" />

... aber jetzt muss ich natürlich in der Lage sein, dies zu ändern, 40%/60% der ration abhängig von den jeweiligen Benutzer-Abschluss.

Erste Frage: was ist die beste, die effizienteste Weg, es zu tun ? Ändern Sie den drawable zur Laufzeit ? oder erstellen Sie ein neues drawable zur Laufzeit in Java ?

Zweite Frage: wie ist es zu tun ? Ich habe beide Wege ausprobiert (neu dieses drawable in java-code /alter der drawable xml zur Laufzeit) und leider nicht gelungen 🙁

Jede Hilfe wird sehr geschätzt.

ich würde erstellen Sie eine benutzerdefinierte Drawable wie diese Klasse LineDrawable extends Drawable { ....
Danke für deine Antwort. Wie machen Sie das genau?
nur überschreiben alle Drawable - abstrakte Methoden - draw(Canvas), insbesondere
Schließlich fand ich einen einfacheren Weg, es zu tun mit ImageViews Hintergrundfarben und ein relative layout. Ich kann nicht die Lösung posten jetzt, weil ich nicht genug Ruf, um Antwort auf meine eigene Frage, bevor 8Stunden. Wird tun, sobald ich kann.

InformationsquelleAutor Stéphane | 2013-07-30

Schreibe einen Kommentar