私のアプリケーションでは、メニューボタンを押すと現在のアクティビティの上に開くアクティビティがあります。このオーバーレイでは、アクティビティが表示されたときにビューをフェードインし、アクティビティが閉じる前に再びフェードアウトしたいと思います。これが私のコードです:
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:フェードしたいビューにアニメーションが適用されていません。なんで?同じリファレンスです。それはある種のスコーピング問題でしょうか?