动画列表仅仅deosn't启动(Animation List simply deosn

2019-10-16 14:57发布

我的工作应该有一个progressdialog的项目。 但因为我没有找到一个简单的方法来风格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()是不是一种选择,因为我要显示一个对话框。 示对话框 - >焦点变化,对话框dismissed->焦点变化 - >示出的对话框的无限量。
  2. 我曾尝试animation.setCallback(图像),animation.setVisible(真实的,真实的),animation.invalidateSelf()没有人的作品。
  3. 我曾尝试image.post(),把一个可运行在那里作为一个参数,并在运行方法启动动画,没有运气。

在这一点上,我开始跑出来的选择。 在我只是想表现出3个图像改变,直到对话框被驳回。 请,如果你知道,我在做什么错,或任何替代,让我知道!

提前致谢!

Answer 1:

更改安卓:单稳=“true”以机器人:单稳=“假”,这样它重复。 它应该只目前正在做一个循环,因为你的表演时间是50,这是真快。 我也将它改成也许200左右..

<?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布局,但动画的背景,所以你需要更改的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();


Answer 2:

今天面临着同样的问题。 配售animation.start()在OnShowListener的昂秀()方法奏效了我。

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);
}

}


文章来源: Animation List simply deosn't start