在我的应用程序中,我有一个活动,当我按下菜单按钮时,它会在当前活动之上打开。在这个叠加层中,我希望我的视图在活动出现时淡入,并在它关闭之前再次淡出。这是我的代码:
public class OverlayActivity extends Activity {
TextView t;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.overlay);
t = (TextView) findViewById(R.id.view_overlay_text);
t.setAnimation(AnimationUtils.loadAnimation(this, R.anim.fade_in));
}
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
boolean r = false;
switch (keyCode) {
case KeyEvent.KEYCODE_BACK:
finishOverlay();
r = true;
break;
default:
r = super.onKeyDown(keyCode, event);
break;
}
return r;
}
private void finishOverlay() {
Animation a = AnimationUtils.loadAnimation(this, R.anim.fade_out);
a.setAnimationListener(fadeOutComplete);
t.setText("TEST"); // <--- if i add this line the code suddenly works
t.setAnimation(a);
}
Animation.AnimationListener fadeOutComplete=new Animation.AnimationListener() {
public void onAnimationEnd(Animation animation) {
finish();
}
public void onAnimationRepeat(Animation animation) {
// not needed
}
public void onAnimationStart(Animation animation) {
// not needed
}
};
}
不知何故,fadeOut-Animation 仅在我执行 t.setText("sometext") 之类的操作时才有效。如果我省略了那条线,它不会动画,因此 AnimationListener 不会被触发。
更新:更多信息确实可以解决问题: onCreate: TextView 淡入,我可以在屏幕上看到它 onKeyDown "BACK": finishOverlay 被调用。(它确实如此)finishOverlay:动画未应用于我想要淡入淡出的视图。为什么?是同一个参考。这可能是某种范围界定问题吗?