从另一个类开始动画

时间:2015-10-15 18:27:27

标签: android animation nullpointerexception

我正在尝试做一个简单的淡入淡出,通过从另一个类调用它来淡出我的活动中的动画。其实我有一个Activity和两个简单​​的类。在我的Activiy中,我从第一个类中调用一个方法,如下所示:

public TextView txt;
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    txt = (TextView)findViewById(R.id.hello);

    Megegy me = new Megegy(txt,MainActivity.this);
    me.animatika();
}

以下是Megegy课程:

public class Megegy {
TextView txt;
Activity activity;

public Megegy(TextView txt,Activity activity){
    this.activity = activity;
    this.txt = txt;
}

Fadede fa = new Fadede(activity,txt);

public void animatika(){
    fa.animati();
}
}

在这个类中,我从另一个包含动画的类中调用一个方法:

public class Fadede implements Animation.AnimationListener {

Animation animFadein;
Animation animFadeout;
public TextView txt;
Activity activity;

public Fadede(Activity activity, TextView txt) {
    this.activity = activity;
    this.txt = txt;
}

public void animati(){
    animFadein = AnimationUtils.loadAnimation(activity, R.anim.fadein);
    animFadein.setAnimationListener(this);
    animFadeout = AnimationUtils.loadAnimation(activity, R.anim.fadeout);
    animFadeout.setAnimationListener(this);

    txt.startAnimation(animFadein);
}

public void onAnimationEnd(Animation animation) {
    // Take any action after completing the animation

    // check for fade in animation
    if (animation == animFadein) {
    }
}

public void onAnimationRepeat(Animation animation) {
    // TODO Auto-generated method stub

}

public void onAnimationStart(Animation animation) {
    // TODO Auto-generated method stub

}
}

问题是当我运行这个应用程序时,我得到了一个 此行的java.lang.NullPointerException:

          animFadein = AnimationUtils.loadAnimation(activity, R.anim.fadein);

我不知道是什么导致了这个错误,但如果有人有请回复!!

2 个答案:

答案 0 :(得分:2)

尝试传递Activity,而不是传递Context个对象。在您的活动中,使用Megegy me = new Megegy(txt, this);

此外,

public class Megegy {
    TextView txt;
    Activity activity;
    Fadede fa;

    public Megegy(TextView txt, Context context){
        this.activity = activity;
        this.txt = txt;
        this.fa = new Fadede(context, txt);
    }
}

目前正在构建Fadede对象,而activitytxt仍然是null,因此您应该在Megegyangular.module('velociraptor-ui',[ ... 'AccountService' ]) 内创建对象#39; s构造函数。

答案 1 :(得分:1)

请注意,系统首先在您的类中创建所有全局变量,并为它们指定您指定的值或null值(如果不是),这将如下所示:

TextView txt = null;
Activity activity = null;
Fadede fa = new Fadede(activity,txt); //activity and txt are both null

在你的机器完成后,他调用构造函数,所以你必须调用

new Fadede(activity, txt);
在给出活动和txt值

之后,在构造函数中