13 Out, 2010 18:22

Como criar seu próprio ProgressDialog em Android

Criação

Primeiramente, precisamos criar o nosso arquivo dialog.xml com o layout do nosso dialog. Segue o código abaixo:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout android:id="@+id/LinearLayout01"
    android:layout_height="fill_parent" xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical" android:gravity="center" android:layout_width="fill_parent">

    <ImageView android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/imagem"></ImageView>
    <Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginTop="10dip"
        android:id="@+id/cancelar" android:background="@drawable/botao"></Button>

</LinearLayout>

Agora, criaremos a nossa classe MeuDialog.java que extenderá de Dialog:

public class MeuDialog extends Dialog implements OnClickListener {
    Button cancelar;
    AnimationDrawable animacao;
    boolean cancelado;

    public CustomizeDialog(Context context) {
        super(context);
    }

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        requestWindowFeature(Window.FEATURE_NO_TITLE);
        setContentView(R.layout.dialog);

        cancelar = (Button) findViewById(R.id.cancelar);
        cancelar.setOnClickListener(this);

        ImageView imagem = (ImageView) findViewById(R.id.imagem);
        imagem.setBackgroundResource(R.drawable.animacao);

        animacao = (AnimationDrawable) imagem.getBackground();      
        imagem.post(new Runnable() {
            public void run() {
                animacao.start();
            }
        });

        cancelado = false;
    }

    public void onClick(View v) {
        if (v == cancelar) {
            animacao.stop();
            dismiss();
            cancelado = true;
        }
    }

    public boolean isCancelado() {
        return cancelado;
    }

    public void setCancelado(boolean cancelado) {
        this.cancelado = cancelado;
    }
}

Podemos observar que o nosso dialog tem uma imagem e um botão. A imagem é uma animação tipo spinner. Mais a frente mostrarei o código xml da animação.

A função do botão cancelar é sumir com o dialog e informar que foi cancelado. Mas para que serve? Se você precisar cancelar alguma ação que está rodando em background, por exemplo, é só consultar o seu dialog.

Dá para perceber que a classe é bem simples. É óbvio que mais componentes podem ser inseridos, mas o exemplo é para ser simples mesmo.

Segue o código de animacao.xml:

<animation-list xmlns:android="http://schemas.android.com/apk/res/android" android:oneshot="false">
    <item android:drawable="@drawable/frame1" android:duration="200" />
    <item android:drawable="@drawable/frame2" android:duration="200" />
    <item android:drawable="@drawable/frame3" android:duration="200" />
    <item android:drawable="@drawable/frame4" android:duration="200" />    
</animation-list>

É importante ressaltar que esse arquivo deve ficar na pasta res/drawable.

Utilização

Depois de criado o dialog, precisamos saber como utilizá-lo em nossas activities. Segue um exemplo:

MeuDialog dialog = new MeuDialog(this);
dialog.show();

É bem simples! Basta instanciar e chamar o método show(). Para sumir com o dialog, basta chamar o método dismiss().

Pronto, espero que esse exemplo ajude bastante! Até :)

POSTS RELACIONADOS:

Ao navegar neste site, você consente o uso de cookies nossos e de terceiros, que coletam informações anônimas e são essenciais para melhorar sua experiência em nosso site.