8

我有两个按钮。当第一个按钮被按下时,我正在将我的布局布局转换为顶部,然后从屏幕顶部开始另一个布局。但我的问题是当回到第一个布局时,第二个布局的点击事件仍然被触发在它以前的位置。那么它的解决方案是什么?我在 SO 和 Google 上找到了很多,但仍然无法找到正确的解决方案。所以请有人帮我解决这个问题。提前致谢。

TranslateAnimation tr1 = new TranslateAnimation(0, 0, 0, -1100);
        tr1.setDuration(1000);
        tr1.setFillAfter(true);
        layout_login.startAnimation(tr1);
        tr1.setAnimationListener(new AnimationListener() {

            public void onAnimationStart(Animation animation) {

            }

            public void onAnimationRepeat(Animation animation) {

            }

            public void onAnimationEnd(Animation animation) {
                layout_signup.setVisibility(View.VISIBLE);
                TranslateAnimation tr2 = new TranslateAnimation(0, 0,
                        -1100, 0);
                tr2.setDuration(1000);
                tr2.setFillAfter(true);
                tr2.setInterpolator(MainActivity.this,
                        android.R.anim.linear_interpolator);
                layout_signup.startAnimation(tr2);

                tr2.setAnimationListener(new AnimationListener() {

                    public void onAnimationStart(Animation animation) {

                    }

                    public void onAnimationRepeat(Animation animation) {

                    }

                    public void onAnimationEnd(Animation animation) {
                        home_activity_btn_login.setEnabled(true);
                    }
                });
            }
        });
4

1 回答 1

12

我认为这是旧动画师方案的一个错误(我相信一个非常有名的错误,涉及有时不工作后的填充)。尝试改用 ObjectAnimator

这是一个例子,

ObjectAnimator oa = ObjectAnimator.ofFloat(view, "translationX", 0, 100f);
oa.setDuration(1000);
oa.start();

如果要沿 Y 方向移动,可以使用 translateY。如果要双向移动,则需要translationX和translationY,并使用AnimatorSet同时播放。

查看此问题的评论。 使用旧的动画 API,显然忽略了 fillAfter(true),按钮的点击位置保持不变。这证实了您的问题。所以只要使用新的 API,你的状态应该很好。

于 2013-06-13T17:29:12.787 回答