2015-10-15 33 views
1

我试图做一个简单的淡入淡出,通过从另一个类别调用它淡出我的活动中的动画。其实我有一个活动和两个简单​​的课程。在我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); 

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

+0

你为什么不把那行'Fadede FA =新淡出de(activity,txt);'在构造函数中? –

回答

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,所以不是你应该从Megegy的构造函数中创建对象。

+0

非常感谢!它现在有效! –

1

注意到系统首先创建全部关闭在类的全局变量,并给他们指定的值或空的值(如果没有),这应该是这样的:

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

并经过您maschine这样做他所说的构造函数,所以你必须调用

new Fadede(activity, txt); 

在构造函数你给活动后和txt值

+0

谢谢你现在的答案。 –

相关问题