2012-11-11 16 views
8

voglio cambiare l'animazione di default di un ProgressBar, così ho aggiunto uno stile personalizzato nel mio tema:Android personalizzato ProgressBar non rotante

styles.xml

<style name="ProgressTheme" parent="@android:style/Widget.ProgressBar.Large"> 
    <item name="android:indeterminateDrawable">@drawable/spinner_holo_light</item> 
</style> 

io chiamo questo stile dentro la mia ProgressBar con il seguente:

ProgressBar.xml

<ProgressBar 
    android:id="@+id/loadingProgressBar" 
    style="@style/ProgressTheme" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" /> 

Il problema risiede all'interno del spinner_holo_light.xml:

Se uso il seguente, tutto funziona bene su dispositivi con OS 3.0+, ma i progressi non ruota su vecchie versioni del sistema operativo:

spinner_holo_light.xml

<rotate xmlns:android="http://schemas.android.com/apk/res/android" 
    android:drawable="@drawable/spinner_76_inner_holo" 
    android:fromDegrees="720" 
    android:pivotX="50%" 
    android:pivotY="50%" 
    android:toDegrees="0" /> 

Ma se uso animate-rotate invece, l'animazione funziona su ogni versione os, ma il risultato è un'animazione molto lenta.

<animated-rotate xmlns:android="http://schemas.android.com/apk/res/android" 
    android:drawable="@drawable/spinner_76_inner_holo" 
    android:fromDegrees="720" 
    android:pivotX="50%" 
    android:pivotY="50%" 
    android:toDegrees="0" /> 

Cosa ne pensi? Sto facendo qualcosa di sbagliato qui?

risposta

11

Su dispositivi precedenti è un problema quando android:fromDegrees è maggiore di android:toDegress in <rotate>. Provare a scambiare i valori:

<rotate xmlns:android="http://schemas.android.com/apk/res/android" 
    android:drawable="@drawable/spinner_76_inner_holo" 
    android:fromDegrees="0" 
    android:pivotX="50%" 
    android:pivotY="50%" 
    android:toDegrees="720" /> 

In alternativa, si può provare a impostare come infinita:

<rotate xmlns:android="http://schemas.android.com/apk/res/android" 
    android:drawable="@drawable/spinner_76_inner_holo" 
    android:pivotX="50%" 
    android:pivotY="50%" 
    android:repeatCount="infinite" /> 

L'animazione potrebbe essere lag sui vecchi dispositivi. Per risolvere questo problema aggiungere android:animationResolution allo stile:

<style name="ProgressTheme" parent="@android:style/Widget.ProgressBar.Large"> 
    <item name="android:indeterminateDrawable">@drawable/spinner_holo_light</item> 
    <item name="android:animationResolution">33</item> 
</style> 
+0

Beh, grazie, non l'avrei mai capito. Funziona abbastanza bene ora. – astazed

Problemi correlati