2016-04-06 6 views
0

Ich stehe einige Schwierigkeiten bei der Arbeit mit benutzerdefinierten ProgressBars in Android. Ich habe nämlich zwei XML-Beschreibungen der benutzerdefinierten ProgressBar, die korrekt sind. Hier sie sind:Android benutzerdefinierte Progress Bar Manipulation

  1. custom_progress_bar_horizontal.xml:

    <?xml version="1.0" encoding="UTF-8"?> 
    <!-- @author : @ 
    
    --> 
    <layer-list 
    xmlns:android="http://schemas.android.com/apk/res/android"> 
    <item 
        android:id="@android:id/background"> 
        <shape> 
         <corners 
          android:radius="0dip" /> 
         <stroke 
          android:width="1dp" 
          android:color="#ff000000" /> 
         <gradient 
          android:startColor="#ffEEEEEE" 
          android:centerColor="#ffEEEEEE" 
          android:centerY="0.50" 
          android:endColor="#ffEEEEEE" 
          android:angle="270" /> 
        </shape> 
    </item> 
    
    <item 
        android:id="@android:id/progress"> 
        <clip> 
         <shape> 
          <corners 
           android:radius="0dip" /> 
          <stroke 
           android:width="1dip" 
           android:color="#ff000000" /> 
          <gradient 
           android:startColor="#ff86CF10" 
           android:endColor="#ff86CF10" 
           android:angle="90" /> 
         </shape> 
        </clip> 
    </item> 
    

  2. custom_progress_bar_hor_night.xml:

    <?xml version="1.0" encoding="UTF-8"?> 
    <!-- @author : @ 
    
    --> 
    <layer-list 
    xmlns:android="http://schemas.android.com/apk/res/android"> 
    <item 
        android:id="@android:id/background"> 
        <shape> 
         <corners 
          android:radius="0dip" /> 
         <stroke 
          android:width="1dp" 
          android:color="#ffffffff" /> 
         <gradient 
          android:startColor="#ff000000" 
          android:centerColor="#ff000000" 
          android:centerY="0.50" 
          android:endColor="#ff000000" 
          android:angle="270" /> 
        </shape> 
    </item> 
    
    <item 
        android:id="@android:id/progress"> 
        <clip> 
         <shape> 
          <corners 
           android:radius="0dip" /> 
          <stroke 
           android:width="1dip" 
           android:color="#ffffffff" /> 
          <gradient 
           android:startColor="#ff86CF10" 
           android:endColor="#ff86CF10" 
           android:angle="90" /> 
         </shape> 
        </clip> 
    </item> 
    

Wie Sie sehen können, unterscheiden sich diese benutzerdefinierten ProgressBars nur in der Hintergrundfarbe und der Farbe der Formlinie.

Nun, was ist der beste Weg, zwischen diesen beiden .xml-Dateien (ProgressBar-Designs) von der Android-App (Java-Code) zu wechseln? Eigentlich möchte ich das ProgressBar-Design wechseln, wenn die Schaltfläche auf dem App-Bildschirm gedrückt wird.

Sollte ich zwei ProgressBar-Instanzen übereinander haben und die Sichtbarkeit von ihnen ändern (eine sichtbare andere unsichtbare und umgekehrt), oder gibt es eine klügere Möglichkeit, mit einer einzigen ProgressBar-Instanz zu manipulieren?

EDIT:

ich für den Ansatz kennen beschrieben here. Der Benutzer wählt zwischen drei verschiedenen .xml Beschreibungen der ProgressBar auf Basis des aktuellen Fortschrittswert den folgenden Ansatz:

<?xml version="1.0" encoding="utf-8"?> 
<level-list xmlns:android="http://schemas.android.com/apk/res/android"> 
    <item android:maxLevel="2999" android:drawable="@drawable/progress_horizontal_red" /> 
    <item android:maxLevel="4999" android:drawable="@drawable/progress_horizontal_yellow" /> 
    <item android:maxLevel="10000" android:drawable="@drawable/progress_horizontal_green" /> 
</level-list> 

ich das ganz ähnlich, was erreichen will. Der einzige Unterschied ist, dass ich nicht möchte, dass der aktuelle Fortschrittswert mir die .xml Datei ändert, die auf dem Bildschirm sichtbar sein wird. Ich möchte das ProgressBar-Design per Knopfdruck ändern können. Ich denke, dass android:maxLevel="xxxx" Selektor mit etwas geändert werden sollte, die true oder false Werte annehmen kann. Ich würde diesen true/false Wert per Knopfdruck umschalten.

Jeder Rat würde sehr geschätzt werden.

Vielen Dank für Ihre Zeit und Mühe.

Mit freundlichen Grüßen, Bojan.

Antwort

0

Sie können einfach 10 in Code setProgressDrawable() aufrufen und es gibt keine Notwendigkeit für zwei Fortschrittsbalken.

progressBar.setProgressDrawable(context.getResources().getDrawable(R.drawable.custom_progress_bar_horizontal)); 

progressBar.setProgressDrawable(context.getResources().getDrawable(R.drawable.custom_progress_bar_hor_night)); 
+0

Mitten im Zentrum, Kumpel! Genau das habe ich gesucht. Du hast meinen Tag gemacht und viel Zeit für mich gespart. Vielen Dank! – bojankoce