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

Dieses Thema im Forum "Android App Entwicklung" wurde erstellt von funk, 17.03.2010.

  1. funk, 17.03.2010 #1
    funk

    funk Threadstarter Android-Hilfe.de Mitglied

    Beiträge:
    53
    Erhaltene Danke:
    1
    Registriert seit:
    21.12.2009
    Phone:
    Motorola Milestone
    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
     
  2. Shinigami, 17.03.2010 #2
    Shinigami

    Shinigami Fortgeschrittenes Mitglied

    Beiträge:
    436
    Erhaltene Danke:
    69
    Registriert seit:
    08.04.2009
    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
     
  3. DieGoldeneMitte, 17.03.2010 #3
    DieGoldeneMitte

    DieGoldeneMitte Android-Lexikon

    Beiträge:
    1,230
    Erhaltene Danke:
    256
    Registriert seit:
    05.02.2010
    Phone:
    Nexus 5X
    Tablet:
    Nexus 7 (2013)
    Man könnte auch ein FrameLayout nehmen und dann im hinteren View herummalen.
     
  4. funk, 17.03.2010 #4
    funk

    funk Threadstarter Android-Hilfe.de Mitglied

    Beiträge:
    53
    Erhaltene Danke:
    1
    Registriert seit:
    21.12.2009
    Phone:
    Motorola Milestone
    @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
     
  5. Shinigami, 17.03.2010 #5
    Shinigami

    Shinigami Fortgeschrittenes Mitglied

    Beiträge:
    436
    Erhaltene Danke:
    69
    Registriert seit:
    08.04.2009
    Hi,

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

    Gruß,
    Shini
     
  6. DieGoldeneMitte, 17.03.2010 #6
    DieGoldeneMitte

    DieGoldeneMitte Android-Lexikon

    Beiträge:
    1,230
    Erhaltene Danke:
    256
    Registriert seit:
    05.02.2010
    Phone:
    Nexus 5X
    Tablet:
    Nexus 7 (2013)
    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: 17.03.2010
  7. funk, 17.03.2010 #7
    funk

    funk Threadstarter Android-Hilfe.de Mitglied

    Beiträge:
    53
    Erhaltene Danke:
    1
    Registriert seit:
    21.12.2009
    Phone:
    Motorola Milestone
    @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: 17.03.2010
  8. DieGoldeneMitte, 18.03.2010 #8
    DieGoldeneMitte

    DieGoldeneMitte Android-Lexikon

    Beiträge:
    1,230
    Erhaltene Danke:
    256
    Registriert seit:
    05.02.2010
    Phone:
    Nexus 5X
    Tablet:
    Nexus 7 (2013)
    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...
     
  9. Fr4gg0r, 18.03.2010 #9
    Fr4gg0r

    Fr4gg0r App-Anbieter (Werbung)

    Beiträge:
    2,506
    Erhaltene Danke:
    447
    Registriert seit:
    21.12.2009

    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.
     
  10. funk, 19.03.2010 #10
    funk

    funk Threadstarter Android-Hilfe.de Mitglied

    Beiträge:
    53
    Erhaltene Danke:
    1
    Registriert seit:
    21.12.2009
    Phone:
    Motorola Milestone
    @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
     
  11. ko5tik, 21.03.2010 #11
    ko5tik

    ko5tik Android-Experte

    Beiträge:
    620
    Erhaltene Danke:
    40
    Registriert seit:
    14.10.2009
    Phone:
    HTC Hero
    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 ;)
     

Diese Seite empfehlen