2011-02-17 8 views
44

¿Cómo puedo mostrar un indicador de actividad en Android? ¿Hay algún método dado por la Biblioteca de Android? Si no, ¿por favor avíseme las técnicas usadas para mostrar el indicador de actividad en Android ?.Indicador de actividad de Android?

+0

quieres decir algo como indicador de progreso infinito independiente como uno usado en ProgressDialog (http://developer.android.com/guide/topics/ui/dialogs.html#ProgressDialog) – Olegas

+0

"Indicador de Actividad" es muy confuso con la clase y el concepto de "Actividad" en Android ... no tuve la idea de que este podría ser el diálogo/barra de progreso :-) Pero luego hay algunas cosas en Android, donde no sé cuál es el correcto nombre y, por lo tanto, no puedo googlearlo bien –

Respuesta

52

hacer algo como esto

ProgressDialog mDialog = new ProgressDialog(getApplicationContext()); 
      mDialog.setMessage("Please wait..."); 
      mDialog.setCancelable(false); 
      mDialog.show(); 
+0

Quiero mostrar un indicador de actividad como en iphone. ¿es posible mostrar una imagen ocupada? –

+0

sí, usando animación e imágenes personalizadas, pero eso no permitirá que el usuario deje de seleccionar, es decir, el usuario puede seleccionar un botón y dirigir a otra actividad mientras espera una respuesta – ingsaurabh

+2

Si termina obteniendo 'WindowManager $ BadTokenException', consulte http://stackoverflow.com/q/1561803/650233 –

18

Hay otras dos formas de mostrar indicador de actividad sin necesidad de utilizar modal ProgressDialog.

Puede usar ImageView en su diseño y aplicarle animación. Refer developer's site.

public void startAnimation() { 
    // Create an animation 
    RotateAnimation rotation = new RotateAnimation(
     0f, 
     360f, 
     Animation.RELATIVE_TO_SELF, 
     0.5f, 
     Animation.RELATIVE_TO_SELF, 
     0.5f); 
    rotation.setDuration(1200); 
    rotation.setInterpolator(new LinearInterpolator()); 
    rotation.setRepeatMode(Animation.RESTART); 
    rotation.setRepeatCount(Animation.INFINITE); 

    // and apply it to your imageview 
    findViewById(R.id.myActivityIndicator).startAnimation(rotation); 
} 

O puede utilizar XML-estirable para describir una imagen de fondo, lo que tendrá un poco de animación de rotación:

describen primer lugar un estirable (es decir, en /res/drawable/my-indicator.xml)

<animated-rotate xmlns:android="http://schemas.android.com/apk/res/android" 
    android:drawable="@drawable/spinner_black_76" 
    android:pivotX="50%" 
    android:pivotY="50%" 
    android:framesCount="12" 
    android:frameDuration="100" /> 

asentando después en el fondo de algún punto de vista

+1

¿Cómo se detiene la animación? –

+1

Simplemente tiene que usar view.setAnimation (null) en algún punto – Shlublu

79

el equivalente más directa del Indicador de Actividad de iOS en Android es el ProgressBar pero ajustado en indeterminada. De modo que puede colocar la vista en su diseño y le proporcionará una animación giratoria.

<ProgressBar 
    android:layout_height="wrap_content" 
    android:layout_width="wrap_content" 
    android:id="@+id/ctrlActivityIndicator" 
    android:indeterminateOnly="true" 
    android:keepScreenOn="true" 
    /> 

Puede utilizar esto para indicar alguna actividad de fondo al usuario.

+9

esta debería ser la respuesta correcta –

+2

cómo cambiar el color de la barra circular? –

+0

Para cambiar el color probablemente sea más fácil utilizar la respuesta de Olegas, entonces puede especificar su propio dibujo en cualquier color que desee. Othewise es posible que desee copiar el código fuente SDK para ProgressBar y proporcionarle su propio drawable. –

4
public class Mp3cutterActivity extends Activity { 

    MP3Class mp3obj = null; 
    TextView tv; 
    MP3Class mp3classobj = null; 

    /** Called when the activity is first created. */ 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     Context thiscontext = this.getApplicationContext(); 
     mp3classobj = new MP3Class(thiscontext); 
     setContentView(R.layout.main); 

     Button btn = (Button)findViewById(R.id.startbutton); 
     tv = (TextView)findViewById(R.id.textview1); 
     btn.setOnClickListener(new OnClickListener() { 

      @Override 
      public void onClick(View v) { 
       // TODO Auto-generated method stub 
       //show a wait indicator as well as the function that calls walkSdcard 

       try { 
        new SearchSdCard(Mp3cutterActivity.this).execute(); 
        // copyProtector.doCopyProtection(); 
       } catch (Exception e) { 
        System.out.println("in search SD card " + e.getMessage()); 
       } 
      } 

      private void domp3stuff() { 
       // TODO Auto-generated method stub 
      } 
     }); 
    } 
} 

class SearchSdCard extends AsyncTask<String, Void, Boolean> { 

    Context context;  

    public ProgressDialog dialog; 

    public SearchSdCard(Activity activity) { 
     this.context = activity; 
    } 

    protected void onPreExecute() { 
     dialog = new ProgressDialog(context); 
     dialog.setMessage("wait for a moment..."); 
     dialog.show(); 
    } 

    @Override 
    protected Boolean doInBackground(String... params) { 
     // TODO Auto-generated method stub 
     boolean retval = true; 
     mp3classobj.searchSdCard(); 
     return retval; 
    } 

    @Override 
    protected void onPostExecute(Boolean result) { 
     // TODO Auto-generated method stub 
     if (dialog.isShowing()) { 
      dialog.dismiss(); 
      tv.setText("mp3 cutter is an app which cuts down a chunk of memory \nfrom your sdcard by \ndeleting the .mp3 files and more \nyou were made a BAKRA :-)"); 
      if(!result){  
       tv.setText("error occured !!"); 
      } 
     } 
    } 
    //refer below comment for the MP3class.java file details 
} 
+1

clase pública MP3Class { \t \t private Context mcontext; \t \t MP3Class pública (contexto Contexto) { \t \t \t \t mcontext = contexto; \t} \t \t \t pública searchSdCard vacío() \t \t { \t \t \t \t estado String = Environment.getExternalStorageState(); \t \t si (Environment.MEDIA_MOUNTED.equals (estado)) \t \t {// \t mi función es aquí u puede agregar el suyo \t \t \t \t \t \t \t \t \t \t} \t \t \t \t \t} – sudatt

Cuestiones relacionadas