Lisse De La Barre De Progression De L'Animation
Je suis en train de mettre en œuvre une animation fluide pour mon ProgressBar
, mais quand j'augmente le temps (30 secondes), l'animation n'est pas lisse.
Exemple avec 5 secondes:
Exemple, avec 30 secondes:
Ma progression en arrière-plan:
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<item>
<shape>
<padding android:top="1dp" />
<solid android:color="#10444444" />
</shape>
</item>
<item>
<shape>
<padding android:top="1dp" />
<solid android:color="#20444444" />
</shape>
</item>
<item>
<shape>
<padding android:top="1dp" />
<solid android:color="#30444444" />
</shape>
</item>
<item android:id="@android:id/background">
<shape>
<solid android:color="@color/black_thirty" />
</shape>
</item>
<item android:id="@android:id/progress">
<clip>
<shape>
<solid android:color="#3500D0" />
</shape>
</clip>
</item>
</layer-list>
Mes progrès mise en page:
<ProgressBar
android:id="@+id/pb_loading"
android:layout_width="match_parent"
android:layout_height="8dp"
android:indeterminate="false"
android:layout_centerInParent="true"
android:progress="100"
android:progressDrawable="@drawable/my_progress_bar" />
Mon animation méthode:
private void startAnimation(){
ProgressBar mProgressBar = (ProgressBar) findViewById(R.id.pb_loading);
ObjectAnimator progressAnimator = ObjectAnimator.ofInt(mProgressBar, "progress", 100, 0);
progressAnimator.setDuration(30000);
progressAnimator.setInterpolator(new LinearInterpolator());
progressAnimator.start();
}
InformationsquelleAutor rsicarelli | 2015-06-10
Vous devez vous connecter pour publier un commentaire.
Parce que vous êtes à l'aide de
ofInt
vous ne pouvez déplacer à pleine entiers. En d'autres termes, si vous avez une barre de progression avec une largeur de 1000 et une progression de 0 à 100, puisque vous vous déplacez à un entier rythme de compter 1, 2, 3, 4 qui se traduit par de 10px, 20px, 30px et 40px. Ce qui explique l'irrégularité que vous voyez.Pour corriger cela, vous avez quelques options. La première est à votre entiers de 0 à
someBigInt
Cela donnera à l'animation de plusieurs numéros de travailler avec.L'autre option est d'utiliser
ofFloat
qui fait la même chose queofInt
mais utilise floating points au lieu de nombres entiers.ObjectAnimator.ofFloat(mProgressBar, "progress", 100.0f, 0.0f);
, l'animation n'est pas commencé.mProgressBar.invalidate();
après votreprogressAnimator.start();
Si vous changez la valeur de progression à chaque fois de 1 (par exemple de 45 à 46), vous ne voyez pas l'animation. Vous feriez mieux de changer de progression de 100 points (ou peut-être d'autres), pour cela il vous suffit de multiplier votre valeur max de 100 et chaque progrès de la valeur à 100 trop. Par exemple:
Venez de définir
android:max="1000"
et ne
ObjectAnimator progressAnimator = ObjectAnimator.ofInt(mProgressBar, "progress", 1000, 0);
dans ce cas, vous animez sur 1/1000 par chaque étape de 10 moment de douceur lorsque l'option par défaut de 100% de l'échelle. et il est beaucoup mieux
XML
JAVA
Vous pouvez pas utiliser le
ofFloat
parce que la ProgressBar les progrès de l'attribut n'accepte pas les valeurs flottantes, seulement un entier. C'est pourquoi votre ProgressBar cessé de progresser après avoir essayé cette solution.Comme les autres l'ont dit, la façon correcte de faire ce que vous voulez est de mettre en
android:max
certaines grosses entier.Désolé de relancer le fil, mais j'ai l'impression que cela devait être dit.
Utiliser la bibliothèque peut son vous aider à donner le temps dans lequel vous voulez remplir la barre de progression de son très bon avec pas de lag, mais vous avez peu de personnaliser les utiliser.
Il suffit d'ajouter la dépendance de votre construction.gradle:
Prochain, l'ajouter à votre disposition
Enfin, de le personnaliser par programmation et de jouer!
GoToLibrary
ici est extrait de mon compte à rebours à l'aide de l'animation en douceur, vous pouvez modifier selon votre besoin, veuillez suivre ci-dessous :
Résumé:
setMax et setProgress
setAnimation de montrer à partir de progression à max les valeurs de la progressbar
créer un timer avec le retour d'appel de ~10 millisec
mise à jour des progrès dans onTick je.e total - finis
Vous pouvez faire de la coutume clas comme ceci :
Si vous avez Android N et ci-dessus, vous pouvez utiliser :
Docs:
https://developer.android.com/reference/android/widget/ProgressBar.html#setProgress(int,%20boolean)