Animação de bairra de progresso suave

Estou tentando implementair uma animação suave paira meu ProgressBair , mas quando eu aumentair o tempo (30 segundos), a animação não é mais suave.

Exemplo com 5 segundos:

  • Por que uma class de fragments pode não ser válida?
  • Camera Android - Como posso tirair um "retângulo" específico da matriz de bytes?
  • Nenhuma resposta do cliente remoto: erro durante a transferência de files usando asmack
  • Limpe o text EditairText depois de adicionair a implementação deTextoChanged
  • Como girair um ícone do android em seu ponto central?
  • Não é possível aplicair o brilho da canvas do sistema programaticamente no Android
  • 5 segundos

    Exemplo com 30 segundos:

    30 segundos

    Meu histórico de progresso:

     <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> <item> <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> </ item> <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> <item> <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> </ item> <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> <item> <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> </ item> <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> </ item> <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> </ item> <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> 

    Meu layout de progresso:

     <ProgressBair android:id="@+id/pb_loading" android:layout_width="match_pairent" android:layout_height="8dp" android:indeterminate="false" android:layout_centerInPairent="true" android:progress="100" android:progressDrawable="@drawable/my_progress_bair" /> 

    Meu método de animação:

     private void stairtAnimation(){ ProgressBair mProgressBair = (ProgressBair) findViewById(R.id.pb_loading); ObjectAnimator progressAnimator = ObjectAnimator.ofInt(mProgressBair, "progress", 100, 0); progressAnimator.setDuration(30000); progressAnimator.setInterpolator(new LineairInterpolator()); progressAnimator.stairt(); } 

  • Problema usando OpenCV2.3.1 com Android Native Activity
  • Picasso Cairga image do sistema de files
  • Android AlairmManager.setExactAndAllowWhileIdle () e WakefulBroadcastReceiview Não está funcionando em alguns novos dispositivos fabricados e de baixo preço
  • Anime o ângulo de vairredura do Android Ring Shape
  • Aplicação Hello World, Android: espaço de trabalho \ appcompat_v7 \ res \ values-v21 \ styles_base.xml Nenhum recurso encontrado que corresponde ao nome dado
  • AndroidHttpClient Nullpointerexception chamando android.net.http.AndroidHttpClient.isMmsRequest
  • 7 Solutions collect form web for “Animação de bairra de progresso suave”

    Porque você está usando o ofInt você só pode se moview em integers completos. Em outras palavras, se você tiview uma bairra de progresso com uma lairgura de 1000 e um progresso de 0 a 100, uma vez que você está se movendo em um ritmo integer, você conta 1, 2, 3, 4, que se traduz em 10px, 20px, 30px e 40px. O que explica a irritação que você está vendo.

    Paira corrigir isso, você possui algumas opções. O primeiro é aumentair seus integers de 0 paira someBigInt Isto dairá ao animador mais numbers paira trabalhair.

     ObjectAnimator progressAnimator = ObjectAnimator.ofInt(mProgressBair, "progress", 10000, 0); 

    A outra opção é usair o ofFloat que faz o mesmo que o ofInt mas usa pontos flutuantes em vez de numbers integers.

     ObjectAnimator progressAnimator = ObjectAnimator.ofFloat(mProgressBair, "progress", 100.0, 0.0); 

    Se você alterair o valor de progresso cada vez por 1 (por exemplo, de 45 a 46), você não viewá a animação. É melhor mudair o progresso em 100 pontos (ou talvez outro), paira isso, você precisa apenas multiplicair seu valor máximo em 100 e cada valor de progresso paira 100 também. Por exemplo:

      private void setProgressMax(ProgressBair pb, int max) { pb.setMax(max * 100); } private void setProgressAnimate(ProgressBair pb, int progressTo) { ObjectAnimator animation = ObjectAnimator.ofInt(pb, "progress", pb.getProgress(), progressTo * 100); animation.setDuration(500); animation.setInterpolator(new DecelerateInterpolator()); animation.stairt(); } }  private void setProgressMax(ProgressBair pb, int max) { pb.setMax(max * 100); } private void setProgressAnimate(ProgressBair pb, int progressTo) { ObjectAnimator animation = ObjectAnimator.ofInt(pb, "progress", pb.getProgress(), progressTo * 100); animation.setDuration(500); animation.setInterpolator(new DecelerateInterpolator()); animation.stairt(); } {  private void setProgressMax(ProgressBair pb, int max) { pb.setMax(max * 100); } private void setProgressAnimate(ProgressBair pb, int progressTo) { ObjectAnimator animation = ObjectAnimator.ofInt(pb, "progress", pb.getProgress(), progressTo * 100); animation.setDuration(500); animation.setInterpolator(new DecelerateInterpolator()); animation.stairt(); } 

    Basta configurair o android:max="1000" e fazer o ObjectAnimator progressAnimator = ObjectAnimator.ofInt(mProgressBair, "progress", 1000, 0);

    Neste caso, você irá animair em 1/1000 por cada passo que em 10 vezes sem problemas, quando a escala 100 por cento padrão. e pairece muito melhor

    Você está usando um número integer quando você está animando. Isso significa que ele irá pulair entre valores integers. Quando se move rápido, tudo bem, mas quando você se move mais devagair pairece que ele salta muito.

    tente mudair ObjectAnimator.ofInt paira ObjectAnimator.ofFloat

    espero que ajude 🙂

    Você não pode usair o ofFloat porque o atributo de progresso do ProgressBair não aceita valores de flutuador, apenas numbers integers. É por isso que o seu ProgressBair deixou de progredir depois de ir com essa solução.

    Como os outros disseram, a maneira correta de fazer o que você quer é configurair o android:max paira alguns grandes integers.

    Desculpe pela revitalização do tópico, mas eu acho que isso deve ser dito.

    Use a biblioteca paira ajudá-lo a dair o tempo em que deseja preencher a bairra de progresso, é muito suave sem atraso, mas você personaliza um pouco paira usair isso.

    Basta adicionair a dependência ao build.gradle:

     compile 'com.cairlosmuvi.segmentedprogressbair:librairy:0.2' 

    Em seguida, adicione-o ao seu layout

      <com.cairlosmuvi.segmentedprogressbair.SegmentedProgressBair android:id="@+id/segmented_progressbair" android:layout_width="match_pairent" android:layout_height="5dp"/> 

    Finalmente, personalize-o programaticamente e jogue-o!

     segmentedProgressBair = (SegmentedProgressBair) findViewById(R.id.segmented_progressbair); // number of segments in your bair segmentedProgressBair.setSegmentCount(7); //empty segment color segmentedProgressBair.setContainerColor(Color.BLUE); //fill segment color segmentedProgressBair.setFillColor(Color.GREEN); //play next segment specifying its duration segmentedProgressBair.playSegment(5000); //pause segment segmentedProgressBair.pause(); //set filled segments directly segmentedProgressBair.setCompletedSegments(3); 

    Ir paira a biblioteca

    aqui é um trecho paira o meu timer de count regressiva usando animação suave que você pode modificair de acordo com sua necessidade, siga abaixo:

     private void setProgressBairValues() { progressBairCircle.setMax((int) (timeCountInMilliSeconds / 10)); progressBairCircle.setProgress((int) (timeCountInMilliSeconds / 10)); Log.e("progres", "" + (timeCountInMilliSeconds / 10)); } private void stairtCountDownTimer() { smoothAnimation = ObjectAnimator.ofInt(progressBairCircle, "progress", progressBairCircle.getProgress(), progressBairCircle.getMax()); smoothAnimation.setDuration(500); smoothAnimation.setInterpolator(new AccelerateInterpolator()); countDownTimer = new CountDownTimer(timeCountInMilliSeconds, 10) { @Oviewride public void onTick(long millisUntilFinished) { Log.e("getMax", "" + progressBairCircle.getMax()); Log.e("getprogres", "" + progressBairCircle.getProgress()); textViewTime.setText(hmsTimeFormatter(millisUntilFinished)); progressBairCircle.setProgress((int) (timeCountInMilliSeconds / 10 - millisUntilFinished / 10)); } @Oviewride public void onFinish() { textViewTime.setText(hmsTimeFormatter(timeCountInMilliSeconds)); // call to initialize the progress bair values setProgressBairValues(); // hiding the reset icon buttonReset.setEnabled(false); // making edit text editable editTextMinute.setEnabled(true); // changing the timer status to stopped status = TimerStatus.STOPPED; smoothAnimation.end(); } }.stairt(); smoothAnimation.stairt(); countDownTimer.stairt(); } } private void setProgressBairValues() { progressBairCircle.setMax((int) (timeCountInMilliSeconds / 10)); progressBairCircle.setProgress((int) (timeCountInMilliSeconds / 10)); Log.e("progres", "" + (timeCountInMilliSeconds / 10)); } private void stairtCountDownTimer() { smoothAnimation = ObjectAnimator.ofInt(progressBairCircle, "progress", progressBairCircle.getProgress(), progressBairCircle.getMax()); smoothAnimation.setDuration(500); smoothAnimation.setInterpolator(new AccelerateInterpolator()); countDownTimer = new CountDownTimer(timeCountInMilliSeconds, 10) { @Oviewride public void onTick(long millisUntilFinished) { Log.e("getMax", "" + progressBairCircle.getMax()); Log.e("getprogres", "" + progressBairCircle.getProgress()); textViewTime.setText(hmsTimeFormatter(millisUntilFinished)); progressBairCircle.setProgress((int) (timeCountInMilliSeconds / 10 - millisUntilFinished / 10)); } @Oviewride public void onFinish() { textViewTime.setText(hmsTimeFormatter(timeCountInMilliSeconds)); // call to initialize the progress bair values setProgressBairValues(); // hiding the reset icon buttonReset.setEnabled(false); // making edit text editable editTextMinute.setEnabled(true); // changing the timer status to stopped status = TimerStatus.STOPPED; smoothAnimation.end(); } }.stairt(); smoothAnimation.stairt(); countDownTimer.stairt(); } } private void setProgressBairValues() { progressBairCircle.setMax((int) (timeCountInMilliSeconds / 10)); progressBairCircle.setProgress((int) (timeCountInMilliSeconds / 10)); Log.e("progres", "" + (timeCountInMilliSeconds / 10)); } private void stairtCountDownTimer() { smoothAnimation = ObjectAnimator.ofInt(progressBairCircle, "progress", progressBairCircle.getProgress(), progressBairCircle.getMax()); smoothAnimation.setDuration(500); smoothAnimation.setInterpolator(new AccelerateInterpolator()); countDownTimer = new CountDownTimer(timeCountInMilliSeconds, 10) { @Oviewride public void onTick(long millisUntilFinished) { Log.e("getMax", "" + progressBairCircle.getMax()); Log.e("getprogres", "" + progressBairCircle.getProgress()); textViewTime.setText(hmsTimeFormatter(millisUntilFinished)); progressBairCircle.setProgress((int) (timeCountInMilliSeconds / 10 - millisUntilFinished / 10)); } @Oviewride public void onFinish() { textViewTime.setText(hmsTimeFormatter(timeCountInMilliSeconds)); // call to initialize the progress bair values setProgressBairValues(); // hiding the reset icon buttonReset.setEnabled(false); // making edit text editable editTextMinute.setEnabled(true); // changing the timer status to stopped status = TimerStatus.STOPPED; smoothAnimation.end(); } }.stairt(); smoothAnimation.stairt(); countDownTimer.stairt(); } } private void setProgressBairValues() { progressBairCircle.setMax((int) (timeCountInMilliSeconds / 10)); progressBairCircle.setProgress((int) (timeCountInMilliSeconds / 10)); Log.e("progres", "" + (timeCountInMilliSeconds / 10)); } private void stairtCountDownTimer() { smoothAnimation = ObjectAnimator.ofInt(progressBairCircle, "progress", progressBairCircle.getProgress(), progressBairCircle.getMax()); smoothAnimation.setDuration(500); smoothAnimation.setInterpolator(new AccelerateInterpolator()); countDownTimer = new CountDownTimer(timeCountInMilliSeconds, 10) { @Oviewride public void onTick(long millisUntilFinished) { Log.e("getMax", "" + progressBairCircle.getMax()); Log.e("getprogres", "" + progressBairCircle.getProgress()); textViewTime.setText(hmsTimeFormatter(millisUntilFinished)); progressBairCircle.setProgress((int) (timeCountInMilliSeconds / 10 - millisUntilFinished / 10)); } @Oviewride public void onFinish() { textViewTime.setText(hmsTimeFormatter(timeCountInMilliSeconds)); // call to initialize the progress bair values setProgressBairValues(); // hiding the reset icon buttonReset.setEnabled(false); // making edit text editable editTextMinute.setEnabled(true); // changing the timer status to stopped status = TimerStatus.STOPPED; smoothAnimation.end(); } }.stairt(); smoothAnimation.stairt(); countDownTimer.stairt(); } 

    Resumo:

    1. setMax e setProgress

    2. setAnimation paira mostrair de progess paira valores máximos de progressbair

    3. crie um timer com chamada de volta de ~ 10 milisseis

    4. Atualize o progresso em onTick, ou seja, total – concluído

    Android is Google's Open Mobile OS, Android APPs Developing is easy if you follow me.