在隐藏View之前等待动画完成

时间:2013-08-08 13:20:37

标签: android android-animation

我执行按钮点击触发的一些事情:

    private void onSearchPressed() {

    title.setVisibility(View.GONE);
    etActionSearch.setVisibility(View.VISIBLE);
    etActionSearch.requestFocus();
    btnActionFavs.setVisibility(View.GONE);
    etActionSearch.setAnimation(AnimationUtils.loadAnimation(
            getApplicationContext(), R.anim.et_anim_open));
    isSearch = true;

}

所以基本上我只是隐藏了一些Views并显示了其他一些内容,我的EditText正在使用简单的Animation“滑出”。

当取消操作时,我会颠倒过程:

    private void onSearchCancelled() {
            etActionSearch.setAnimation(AnimationUtils.loadAnimation(
            getApplicationContext(), R.anim.et_anim_close));
    etActionSearch.setVisibility(View.GONE);
    btnActionFavs.setVisibility(View.VISIBLE);
    title.setVisibility(View.VISIBLE);
    isSearch = false;

}

我想要做的是将动画(相反方向)应用于我的EditText,因此幻灯片动画也会消失。问题是所有代码都是立即执行的,所以EditText在动画完成之前就已经消失了。我尝试了一些奇怪的事情,例如使用AsyncTask并将动画放在doInBackground()方法中,在Views中设置onPostExecute()的可见性,但这并没有改变任何内容。{除了滞后印象之外,{1}}也没有做任何事情。任何解决方案?

2 个答案:

答案 0 :(得分:2)

动画以异步方式运行,因此您需要对该动画使用AnimationListener并将动画结束时应执行的代码放到onAnimationEnd()

请参阅文档:http://developer.android.com/reference/android/view/animation/Animation.AnimationListener.html

答案 1 :(得分:1)

就像Marcin Orlowski所说,你必须在你的AnimationListener上使用Animation。动画结束后,它将启动onAnimationEnd()事件,您可以在那里完成任务。

以下是我可以看到的一个小例子:

Animation animation = AnimationUtils.loadAnimation(getApplicationContext(), R.anim.your_specific_animation);
animation.setAnimationListener(new AnimationListener() {

        @Override
        public void onAnimationStart(Animation animation) {
        }

        @Override
        public void onAnimationRepeat(Animation animation) {
        }

        @Override
        public void onAnimationEnd(Animation animation) {
            // Do your hiding stuff here
        }
    });

etActionSearch.startAnimation(animation);