关闭活动前的动画视图

时间:2010-11-11 11:32:26

标签: android view translate-animation

在我的应用程序中,当我按下菜单按钮时,我有一个活动打开当前活动的顶部。 在此叠加层中,我希望我的视图在活动出现时淡入并在关闭之前再次淡出。 这是我的代码:

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:动画未应用于我想淡化的视图。为什么?这是相同的参考。这可能是某种形式的范围问题吗?

2 个答案:

答案 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
        }
        };
    }

}