web-dev-qa-db-fra.com

Je veux un cercle de progrès au lieu d'un dialogue de progrès

Je souhaite afficher un cercle de progression dans mon application lors du chargement de données. J'ai une activité et je passe d'une activité à une autre. J'analyse des données XML. Par conséquent, jusqu'à ce que l'analyse soit terminée, je souhaite afficher un effet de chargement circulaire.

19
ta54

Vous pouvez utiliser une barre de progression indéterminée pour l'effet de chargement circulaire. Voici comment vous le faites en XML:

<ProgressBar Android:indeterminate="true"
            Android:layout_width="50dp" Android:layout_height="50dp"
            Android:id="@+id/marker_progress" style="?android:attr/progressBarStyle"
            Android:layout_gravity="center_vertical|center_horizontal"/>

Vous pouvez changer la hauteur et la largeur pour que vous soyez. Une fois le chargement terminé, vous pouvez modifier sa visibilité en View.INVISIBLE ou View.GONE.

28
Abhinav

Vous devez créer un fichier xml d'animation dans le dossier res/anim et appeler startAnimation dans votre ImageView lorsque vous chargez des données et arrêterAnimation lorsque vous cessez de charger des données. Et définissez l'image de chargement sur ImageView, par exemple:

chargement http://bigod26.com/pics/loading.png

Ce code d'identification pour le fichier XML d'animation de cercle

<?xml version="1.0" encoding="UTF-8"?>
<rotate
    xmlns:Android="http://schemas.Android.com/apk/res/Android"
    Android:fromDegrees="0"
    Android:toDegrees="360"
    Android:pivotX="50%"
    Android:pivotY="50%"
    Android:repeatCount="infinite"
    Android:duration="1200" 
    Android:interpolator="@Android:anim/linear_interpolator" />
17
RomaTTi

Insérer ceci entre deux balises View

<ProgressBar Android:id="@+id/loading_spinner"
        style="?android:progressBarStyleLarge"
        Android:layout_width="wrap_content"
        Android:layout_height="wrap_content"
        Android:layout_gravity="center" />
4
Romain Pellerin

Pourquoi ne pas utiliser l'interface utilisateur Progressbar

myProgressDialog = ProgressDialog.show(ListingPage.this,"Please Wait", "Loading Date", true);

dan

3
papachan

Utilisez AsyncTask pour le chargement et l'analyse:

 /**
   * Background task that fetched the content from server and parses the content.
   */
  private class BackgroundLoadingTask extends AsyncTask<InputStream, Void, Boolean> {

    @Override
    protected void onPreExecute() {
      // show the progress bar
      Activity.this.requestWindowFeature(Window.FEATURE_INDETERMINATE_PROGRESS);
      Activity.this.requestWindowFeature(Window.PROGRESS_VISIBILITY_ON);
    }

    @Override
    protected Boolean doInBackground(InputStream... params) {

      // try to load XML from HTTP server and parse

      return true;
    }


    @Override
    protected void onPostExecute(Boolean parsingError) {
      // hide the progress bar
      Activity.this.requestWindowFeature(Window.PROGRESS_VISIBILITY_OFF);


    }
  }
2
peceps

Comme dans la boîte de dialogue de progression, utilisez plutôt une animation avec une tâche asynchrone. Rendez-la visible lors de la prexécution et masquez-la à nouveau.

1
trgraglia

Pour développer un peu la réponse de trgraglia, vous pouvez créer une barre de progression indéterminée (comportement: cycle) et définir la visibilité sur false. Pendant AsyncTask preExecute (), rendez-le visible, et pendant AsyncTask onPostExecute (), revenez à invisible (à condition que vous conserviez la même activité ou le même cas, le cas échéant). Cela élimine le besoin de créer une animation.

1
Brandon Ward