プログレスダイアログが必要なプロジェクトに取り組んでいます。しかし、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>
問題は、アニメーションを表示しようとすると、アニメーションが開始されないことです。この問題については多くのトピックがありますが、私が試したことは次のとおりです。
- ダイアログ show() をアクティビティのさまざまな部分に配置します: onResume() と onCreate()。ダイアログを表示したいので、 onWindowFocusChanged() はオプションではありません。ダイアログの表示 -> フォーカスの変更、ダイアログの非表示 -> フォーカスの変更 -> 表示されるダイアログの数は無限です。
- 私はanimation.setCallback(image)、animation.setVisible(true、true)、animation.invalidateSelf()を試しましたが、どれもうまくいきません。
- 私は image.post() を試して、パラメータとして runnable をそこに入れましたが、アニメーションを開始する run メソッドでは運がありません。
この時点で、オプションが不足し始めています。ダイアログが閉じられるまで、変化する 3 つの画像のみを表示しようとしています。あなたが知っているなら、私が間違っていること、または別の方法を教えてください!
前もって感謝します!