在我的应用程序中,当我按下菜单按钮时,我有一个活动打开当前活动的顶部。 在此叠加层中,我希望我的视图在活动出现时淡入并在关闭之前再次淡出。 这是我的代码:
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:动画未应用于我想淡化的视图。为什么?这是相同的参考。这可能是某种形式的范围问题吗?
答案 0 :(得分:0)
您需要发布textview的XML代码。
我怀疑textview中的文本是空白的...因此没有动画。
另外,为什么要在代码中设置textview的可见性。由于textview出现在onCreate方法中,因此您不需要使用此行,因为您不应将其设置为XML文件中的不可见。
答案 1 :(得分:0)
我已更新您的代码,现在此代码的工作方式与您希望的相同。
public class mp3list extends Activity {
TextView t;
Animation a;
Animation.AnimationListener fadeOutComplete;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.mp3list);
t = (TextView) findViewById(R.id.tvc);
run();
startOverlay();
}
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
boolean r = false;
switch (keyCode) {
case KeyEvent.KEYCODE_BACK:
run();
finishOverlay();
r = true;
break;
default:
r = super.onKeyDown(keyCode, event);
break;
}
return r;
}
private void startOverlay() {
a = AnimationUtils.loadAnimation(this, R.anim.fade_in);
a.setAnimationListener(fadeOutComplete);
t.setText("helo world"); // <--- if i add this line the code suddenly works
t.setAnimation(a);
}
private void finishOverlay() {
a = AnimationUtils.loadAnimation(this, R.anim.fade_out);
a.setAnimationListener(fadeOutComplete);
t.setText("helo world"); // <--- if i add this line the code suddenly works
t.setAnimation(a);
finish();
}
public void run(){
fadeOutComplete = new Animation.AnimationListener() {
public void onAnimationEnd(Animation animation) {
}
public void onAnimationRepeat(Animation animation) {
// not needed
}
public void onAnimationStart(Animation animation) {
// not needed
}
};
}
}