Zwei unterschiedliche Farben in einer View - Batterie-Laden-Effekt

F

funk

Ambitioniertes Mitglied
2
Hallo,

ich habe in meiner App eine if-Abfrage, die dafür sorgt dass die App
100mal auf die Antwort eines Bluetooth-Senders wartet.
Jetzt möchte ich das Ganze auch noch grafisch etwas schöner machen
(vor allem, da ich das bisher mit Discoverys mache und die einfach ne
zeitlang dauern..).

Dabei hab ich mir das so vorgestellt, dass ich entweder
eine Textview nehme und darin die Anzahl der Durchläufe darstelle.
Alternativ ein ShapeDrawable mit gerundeten Ecken...weils schee macht!

Der Hintergrund soll dabei [Anzahl_der_Durchläufe]% grün von unten her
sein und der Rest weiß. Damit ist es dann beim 100sten Durchlauf komplett
grün (in meiner Vorstellung).

Leider hab ich keine Ahnung, wie ich einen zweifarbigen Hintergrund
ohne Bild hin bekomme!

Bin für jede Anregung dankbar!

Gruß,
Frank
 
Views haben doch eine Methode setBackgroundDrawable(...), sollte man damit nicht in der Lage sein selbst erzeugte Drawables (in Deinem Fall mit dem farblichen Verlauf) als Hintergrund zu verwenden?

Gruß,
Shini
 
Shinigami schrieb:
Views haben doch eine Methode setBackgroundDrawable(...), sollte man damit nicht in der Lage sein selbst erzeugte Drawables (in Deinem Fall mit dem farblichen Verlauf) als Hintergrund zu verwenden?

Man könnte auch ein FrameLayout nehmen und dann im hinteren View herummalen.
 
@Shinigami: Dann müsste ich aber wieder die drawables vorbereiten
und schon davor in meinen /res ordner setzen (was immer noch die
Frage offen lässt, wie ich den Hintergrund zweifarbig ohne Verlauf
hinbekomm...) ... kommt im Endeffekt aufs Gleiche raus, wie Bilder
vorbereiten und in den /res Ordner zu packen, oder?

@DieGoldeneMitte: Das FrameLayout hilft mir doch da noch nicht viel!?
Das was du ansprichst ist ja nur die Tatsache, dass Child-Objekte des
Layouts sich überschreiben...danach müsste ich ja mit Shinigamis Idee
weiter machen um den Hintergrund zu verändern. Oder versteh ich da
was am FrameLayout nicht?

Gruß,
Frank
 
Hi,

nein selbst programmtechnisch ein Drawable erstellen, nicht aus den Ressourcen lesen.

Gruß,
Shini
 
Mein Gedanke war, dass Du im FrameLayout ein bel. View Objekt zu einem Hintergrund des Objektes machen kannst, dass davor liegt.

Shinigamis Ansatz mit dem Drawable ist da natürlich direkter, hat nur dann einen leichten Nachteil, wenn man mit einem eigenen Background auch die Widgetdekoration (Stichwort padding) selber machen muss.

(Habe gerade gelernt, dass sowas in Arbeit ausarten kann :))
 
Zuletzt bearbeitet:
@Shini: Ok, stimmt: das kann man natürlich auch in Code lösen! Bleibt die
Frage, wie ich ein drawable mache, dass zu XX% die eine Farbe und zu
(100-XX)% die andere Farbe hat...

@DGM: Dein Ansatz wäre dann das "hinten" liegende View-Objekt anhand
der Anzahl der Durchläufe nach oben zu bewegen?

Danke schon mal und Gruß,
Frank

EDIT: Könnte es vielleicht doch mit einem 9-Patch funktionieren? So wie
bei der Batterie-Ladeanzeige und dann doch mit der FrameLayout
Variante von DieGoldeneMitte (siehe http://androiddrawableexplorer.appspot.com/ )
 
Zuletzt bearbeitet:
Ich dachte eigentlich an sowas wie einen View, in dem
man stumpf mittels onDraw( Canvas c ) herummalt.

Kann sein, dass das eine dumme Idee ist...
 
funk schrieb:
Hallo,

Der Hintergrund soll dabei [Anzahl_der_Durchläufe]% grün von unten her
sein und der Rest weiß. Damit ist es dann beim 100sten Durchlauf komplett
grün (in meiner Vorstellung).

Leider hab ich keine Ahnung, wie ich einen zweifarbigen Hintergrund
ohne Bild hin bekomme!

Bin für jede Anregung dankbar!

Gruß,
Frank


ich würde eine eigene View vorschlagen:
Code:
public fortschritt = height;
onDraw(Canvas c){
Paint p = new Paint();
p.setColor(Color.GREEN);
c.drawColor(Color.GRAY);
c.drawRect(0, getWidth(), fortschritt, getHeight(), p);
Thread.sleep(50);
fortschritt--;
}
invalidate();

Du würdest dann natürlich fortschritt bei jedem Durchlauf um einen gewissen Teil reduzieren und dann invalidate(); aufrufen.
 
@Fr4gg0r: Das muss ich mal ausprobieren...hört sich gut an! Ich würde in
dem Fall dann halt noch

Code:
public hoehe = height;
public teil = hoehe/100;
fortschritt = durchlauf*teil;
anstatt

Code:
public fortschritt = height;
einfügen. Wobei "durchlauf" von meiner App hochgezählt wird und
dann tatsächlich den prozentualen Fortschritt meiner 100 Durchläufe
anzeigen würde.

Gruß,
Frank
 
Schon mal über Animationen nachgedacht? Alles schon deklarativ, aber natürlich nur von
Hapttread zu benutzen:


Code:
<!-- emerge drawable  out of nothing -->
<set xmlns:android="http://schemas.android.com/apk/res/android">
    <alpha android:fromAlpha="0.0" android:toAlpha="1.0" android:duration="150"
           android:interpolator="@android:anim/accelerate_interpolator"/>

    <scale
            android:interpolator="@android:anim/accelerate_interpolator"
            android:fromXScale="0.01" android:toXScale="1.0"
            android:fromYScale="0.01" android:toYScale="1.0"
            android:pivotX="50%"
            android:pivotY="50%"
            android:zAdjustment="normal"
            android:fillBefore="false"
            android:fillEnabled="true"
            android:fillAfter="true"
            android:duration="150"/>
    
</set>

Und dann:

Code:
    void appear(Drawable image) {
        setImageDrawable(image);
        startAnimation(emerge);
    }
(wie es aussieht demonstriert link in meinen signatur)
Leider wie ziemlich alles bei Android nur id dem Source-Code ausreichend dokumentiert ;)
 

Ähnliche Themen

D
  • Data2006
Antworten
14
Aufrufe
450
jogimuc
J
OnkelLon
Antworten
13
Aufrufe
1.926
OnkelLon
OnkelLon
Zurück
Oben Unten