在Asynctask中加载动画

时间:2013-04-29 03:23:39

标签: android android-animation

我试图在活动开始时拍摄一些动画,特别是一些应该淡入的笑脸,以及另一个imageview和textview。但是,在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会导致问题,这表明该方法不适用于参数。任何人都可以一目了然地看到我可怕的错误吗?如果您认为相关,我会发布任何其他内容。

1 个答案:

答案 0 :(得分:0)

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

此处的this关键字是指您通过扩展Animtask创建的AsyncTask类,但loadAnimation方法需要Context类的对象。假设您的活动的类名是MyActivity,您可以通过将上面的行更改为

来解决编译错误。
Animation fadein = AnimationUtils.loadAnimation(MyActivity.this, R.anim.fade);

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