2012-04-18 9 views
1

私は進行状況ダイアログが必要なプロジェクトに取り組んでいます。しかし、私はprogressdialogのスタイルを簡単に見つける方法が見つからなかったので、私は考えていました。最も簡単な方法は、独自のスタイルとフレームアニメーションのカスタムダイアログボックスクラスを作成し、代わりに表示することです。ここに私のコードは次のとおりです。アニメーションリストは単に開始しません

ダイアログのXMLレイアウト:ここで

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:background="@drawable/dialog_background" 
    android:gravity="center" 
    android:orientation="horizontal" 
    android:padding="10dp" > 

    <ImageView 
     android:id="@+id/loaddialog_animation" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:src="@drawable/loadanimation" 
     android:layout_marginRight="10dp" /> 

    <TextView 
     android:id="@+id/loaddialog_text" 
     style="@style/SmallText" 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" /> 

</LinearLayout> 

は私のダイアログクラスです:

public class LoadDialog extends Dialog 
{ 
    private TextView message; 
    ImageView image; 
    AnimationDrawable animation; 

    public LoadDialog(Context context) 
    { 
     super(context, R.style.Dialog); 
     requestWindowFeature(Window.FEATURE_NO_TITLE); 
     setContentView(R.layout.load_dialog); 

     message = (TextView) findViewById(R.id.loaddialog_text); 

     image = (ImageView) findViewById(R.id.loaddialog_animation); 
     image.setBackgroundResource(R.drawable.loadanimation); 
     animation = (AnimationDrawable) image.getBackground(); 
    } 

    public void setText(String msg) 
    { 
     message.setText(msg); 
    } 

    @Override 
    public void show() 
    { 
     super.show(); 
     animation.start(); 
    } 

    @Override 
    public void dismiss() 
    { 
     animation.stop(); 
     super.dismiss(); 
    } 
} 

とアニメーションリソース:

<?xml version="1.0" encoding="utf-8"?> 
<animation-list xmlns:android="http://schemas.android.com/apk/res/android" android:oneshot="true" > 
    <item android:drawable="@drawable/loadbar_01" android:duration="50" /> 
    <item android:drawable="@drawable/loadbar_02" android:duration="50" /> 
    <item android:drawable="@drawable/loadbar_03" android:duration="50"/> 
</animation-list> 

問題私はそれを表示しようとすると、アニメーションが開始されないということです。私は私がしようとしていることを、事をこの問題に関するトピックがたくさんある、知っているが、ここでは、次のとおりです。

  1. は、ダイアログが()私の活動のさまざまな部分で示し入れ:onResume()とのonCreate()を。 ダイアログを表示したいので、onWindowFocusChanged()はオプションではありません。表示されるダイアログ - >フォーカスの変更、ダイアログの解除 - >フォーカスの変更 - >無限のダイアログボックスが表示されます。
  2. 私はanimation.setCallback(image)、animation.setVisible(true、true)、animation.invalidateSelf()のどれも動作させてみました。
  3. 私はimage.post()を試して、そこにパラメータとしてrunnableを入れ、アニメーションを起動するrunメソッドでは不運です。

この時点で、私はオプションを使い始めています。私は、ダイアログが消されるまで、3つの画像を変えて表示しようとしています。もしあなたが知っていれば、何が間違っているのか、何か別のものが私に教えてください!

ありがとうございます!

+0

タイトルのスペルミスのため申し訳ありません! –

答えて

0

android:oneshot = "true"をandroid:oneshot = "false"に変更して繰り返します。現在のところ、1つのサイクルを行うだけで、あなたのショータイムが50であるので、それは本当に速いです。また、私はまた

<?xml version="1.0" encoding="utf-8"?> 
<animation-list xmlns:android="http://schemas.android.com/apk/res/android" android:oneshot="false" > 
<item android:drawable="@drawable/loadbar_01" android:duration="200" /> 
<item android:drawable="@drawable/loadbar_02" android:duration="200" /> 
<item android:drawable="@drawable/loadbar_03" android:duration="200"/> 
</animation-list> 

、あなたのxmlレイアウトに画像を設定している...ので、多分200かにそれを変更するが、背景をアニメーションので、あなたはこれにXMLのレイアウトを変更するか必要があります:

<ImageView   android:id="@+id/loaddialog_animation"   android:layout_width="wrap_content" 
android:layout_height="wrap_content" 
android:background="@drawable/loadanimation" 
android:layout_marginRight="10dp" /> 

かのように、SRCファイルではなく、背景を得るために、あなたのコードを変更:

image = (ImageView) findViewById(R.id.loaddialog_animation); 
image.set(R.drawable.loadanimation); 
animation = (AnimationDrawable) image.getDrawable(); 
+0

ありがとうございます、運がない、まだアニメーションがありません... :( –

+0

イメージが全く見えますか?3つのイメージのどれが表示されますか? – Nick

+0

よろしくお願いします。私の以前の答えの期間は、私は私の答えを更新します... – Nick

0

は今日と同じ問題に直面していました。 OnShowListenerのonShow()メソッドにanimation.start()を配置することは、私のためのトリックでした。

public class CustomProgressDialog extends Dialog 
{ 
ImageView progressImage; 
AnimationDrawable frameAnimation; 

public CustomProgressDialog(Context context) 
{ 
    super(context); 
    requestWindowFeature(Window.FEATURE_NO_TITLE); 
    setContentView(R.layout.custom_progress); 
    getWindow().setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT)); 

    progressImage = (ImageView) findViewById(R.id.custom_progress_image); 
    progressImage.setBackgroundResource(R.anim.progress_anim); 

    frameAnimation = (AnimationDrawable) progressImage.getBackground(); 

    OnShowListener osl = new OnShowListener() 
    { 
     @Override 
     public void onShow(DialogInterface dialog) 
     { 
      frameAnimation.start(); 
     } 
    }; 
    setOnShowListener(osl); 

    OnDismissListener odl = new OnDismissListener() 
    { 

     @Override 
     public void onDismiss(DialogInterface dialog) 
     { 
      frameAnimation.stop(); 
     } 
    }; 
    setOnDismissListener(odl); 
} 

} 
関連する問題