2015-10-15 3 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 фа = новый Fade de (activity, txt); 'в constuctor? –

ответ

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 объект строится в то время как activity и txt все еще null, так что вместо этого вы должны создать объект внутри конструктора Megegy «s.

+0

Большое спасибо! Он работает сейчас! –

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 значение

+0

Спасибо, что ответ сейчас работает. –

Смежные вопросы