2011-03-10 6 views
19

Je souhaite afficher un cercle de progression dans mon application pendant le chargement des données. J'ai une activité et en passant d'une activité à une autre, je suis en train d'analyser des données xml, donc pour l'instant, jusqu'à ce que l'analyse soit terminée, je veux montrer un effet de chargement circulaire.Je veux un cercle de progression au lieu de la boîte de dialogue de progression

+2

Voici comment je l'ai fait http://stackoverflow.com/questions/19655715/progress-dialog-is-closed-when-touch-on-screen/ 22939109 # 22939109 – Ali

Répondre

3

Pourquoi ne pas utiliser l'interface utilisateur progressbar

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

dan

+0

Je ne peux pas utiliser ce progrèsDialog parce que mon client ne veut pas ce qu'il veut l'effet de chargement circulaire. – ta54

+0

*** ProgressDialog est maintenant obsolète. – Digitalsa1nt

17

Vous devez créer une animation fichier xml dans res/dossier anim et appelez DebuterAnimation dans votre ImageView lorsque vous chargez des données et stopAnimation lorsque vous arrêtez de charger les données. Et l'image de chargement mis à ImageView, par exemple:

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

Ce code d'identification pour le fichier xml d'animation 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" /> 
+0

J'utilise une vue Liste avec un adaptateur personnalisé. et je veux montrer l'effet de chargement dans cette vue de liste. Comment puis-je obtenir cette analyse est fait et nous pouvons arrêter cette animation – ta54

+0

J'utilise la vue Liste aussi. Et quand un autre thread analyse xml, j'ai mis à l'affichage spécial perdu loadAdapter qui retourne une seule vue. Cette vue est imageView qui remplit tous les parents et adapte l'image au centre. Lors de l'analyse du thread, j'arrête l'analyse pour ne plus voir mon autre adaptateur personnalisé qui fournit des éléments d'interface utilisateur. – RomaTTi

+0

Pouvez-vous me donner un exemple l'utiliser. Merci! –

1

Tout comme vous la boîte de dialogue de progression, utilisez une animation à la place avec la tâche async et il suffit de le rendre visible lors de la pré-exécution et de le masquer à nouveau sur le message.

2

Utilisation AsyncTask pour le chargement et l'analyse syntaxique:

/** 
    * 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); 


    } 
    } 
+1

Attention, toutes ces fonctionnalités ne fonctionneront pas si vous êtes passé en mode plein écran ou si vous avez masqué la barre de titre. – trgraglia

+0

'android.util.AndroidRuntimeException: requestFeature() doit être appelé avant d'ajouter du contenu' – dentex

28

Vous pouvez utiliser un ProgressBar indéterminé 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 modifier la hauteur et la largeur pour être ce que vous voulez. Lorsque vous avez terminé le chargement, vous pouvez changer sa visibilité en View.INVISIBLE ou View.GONE

1

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(), retournez-le à invisible (à condition que vous restiez sur la même activité ou w/e cas que vous pourriez avoir besoin). Cela élimine le besoin de créer une animation.

4

Insérer ce beetween deux Voir les tags

<ProgressBar android:id="@+id/loading_spinner" 
     style="?android:progressBarStyleLarge" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_gravity="center" /> 
Questions connexes