0

我试图在活动开始时制作一些动画,特别是一些应该淡入的笑脸,以及另一个图像视图和文本视图。然而,在 onCreate 执行所有这些操作会导致我的应用程序冻结,因此我尝试将所有动画移动到 AsyncTask 并在创建时执行它。

这是我称之为动画的地方:

public class Animtask extends AsyncTask<Void, Void, Void> {
 protected Void doInBackground(Void... voids) {
Animation fadein = AnimationUtils.loadAnimation(this, R.anim.fade);
_view.startAnimation(fadein);
_view2.startAnimation(fadein);
_view3.startAnimation(fadein);
_view4.startAnimation(fadein);
_view5.startAnimation(fadein);
guide.startAnimation(fadein);
blender.startAnimation(fadein);
}
}

Eclipse 似乎同意其他一切,但 loadAnimation 引起了问题,表明该方法不适用于参数。谁能一眼看出我哪里出了严重的错误?如果您认为相关,我会发布其他任何内容。

4

1 回答 1

0
Animation fadein = AnimationUtils.loadAnimation(this, R.anim.fade);

这里的this关键字是指Animtask您通过扩展创建的类AsyncTask,但该loadAnimation方法需要一个Context类的对象。假设您的活动的类名是MyActivity,您可以通过将上面的行更改为来解决编译错误

Animation fadein = AnimationUtils.loadAnimation(MyActivity.this, R.anim.fade);

但是,doInBackgroundan 中的方法AsyncTask并不涉及 UI 线程,因此当您尝试运行此 AsyncTask 时,您可能会遇到此错误。减速真的只是动画造成的,还是加载动画的资源(图像)造成的?一个解决方案可能是将动画调用移动到onPostExecute方法,并在方法上加载资源doInBackground

于 2013-04-29T03:48:09.483 回答