Android动画布局问题

Android动画布局问题,android,android-animation,Android,Android Animation,我有一个RelativeLayout,其中两个LinearLayout和一个TextView(所有3个都是孩子)共享同一个空间,这意味着在任何给定点上,只有一个视图可见,而其他两个视图消失。在应用程序启动时,TextView是可见视图。我有一个按钮,可以启动动画,使TextView淡出,线性布局淡入。另一个线性布局有另一个按钮 逻辑如下: 按按钮->文本视图淡入->线性布局设置为可见->线性布局淡入。 按后退按钮->线性布局淡入->打开动画结束线性布局可见性消失->文本视图淡入 只要上述交互使用

我有一个RelativeLayout,其中两个LinearLayout和一个TextView(所有3个都是孩子)共享同一个空间,这意味着在任何给定点上,只有一个视图可见,而其他两个视图消失。在应用程序启动时,TextView是可见视图。我有一个按钮,可以启动动画,使TextView淡出,线性布局淡入。另一个线性布局有另一个按钮

逻辑如下:
按按钮->文本视图淡入->线性布局设置为可见->线性布局淡入。
按后退按钮->线性布局淡入->打开动画结束线性布局可见性消失->文本视图淡入

只要上述交互使用相同的按钮(对于相同的LinearLayout),这就可以非常好地工作。按下另一个LinearLayout按钮后,另一个LinearLayout将在文本视图淡出期间短暂显示,然后相应的LinearLayout淡入。按下后退按钮时也会发生同样的情况:另一条线性布局在淡出和淡入之间短暂显示

有什么想法吗

fadeOut = AnimationUtils.loadAnimation......
fadeIn = AnimationsUtils......
fadeOut.setAnimationListener(this)

......
.....

public void buttonOnClick(View v) {
    int id = v.getId();
    switch(id) {
    case R.id.get_started:
        viewState = SIGNUP_STATE;
        toggleWelcomeViews(HIDE);
        toggleSignupViews(SHOW);
        break;
    case R.id.already_have_account:
        viewState = LOGIN_STATE;
        toggleWelcomeViews(HIDE);
        toggleLoginViews(SHOW);
        break;
}

......
....
public void toggleSignupViews(int flag) {
    /*
    int action = (flag == SHOW) ? View.VISIBLE : View.GONE; 
    signupForm.setVisibility(action);
    whyPhoneLink.setVisibility(action);
    submitButton.setVisibility(action);
    */

    if (flag == SHOW) {
        if (NetworkConfig.debug) Log.i(LOG_TAG, "fade in signup views"); 
        signupForm.setVisibility(View.VISIBLE);
        whyPhoneLink.setVisibility(View.VISIBLE);
        submitButton.setVisibility(View.VISIBLE);
        submitButton.setClickable(true);
        signupForm.startAnimation(fadeIn);
        whyPhoneLink.startAnimation(fadeIn);
        submitButton.startAnimation(fadeIn);

    } else {
        if (NetworkConfig.debug) Log.i(LOG_TAG, "fade out signup views"); 
        signupForm.startAnimation(fadeOut);
        whyPhoneLink.startAnimation(fadeOut);
        submitButton.startAnimation(fadeOut);
        signupForm.setVisibility(View.INVISIBLE);
        whyPhoneLink.setVisibility(View.INVISIBLE);
        submitButton.setVisibility(View.INVISIBLE);
        submitButton.setClickable(false); 
    }

}

......
......

public void onBackPressed() {   
    switch(viewState){
    case WELCOME_STATE:
        // exit app..
        super.onBackPressed();
        break;
    case SIGNUP_STATE:
        // hide signup views and show welcome views
        viewState = WELCOME_STATE;
        leavingState = SIGNUP_STATE;
        toggleSignupViews(HIDE);
        toggleWelcomeViews(SHOW);
        break;
    case LOGIN_STATE:
        // hide login views and show welcome views
        viewState = WELCOME_STATE;
        leavingState = LOGIN_STATE;
        toggleLoginViews(HIDE);
        toggleWelcomeViews(SHOW);
        break;
    }
}

@Override
public void onAnimationEnd(Animation animation) {
    if (NetworkConfig.debug) Log.i(LOG_TAG, "animation ended");

    if (leavingState == SIGNUP_STATE) {
        signupForm.setVisibility(View.INVISIBLE);
        whyPhoneLink.setVisibility(View.INVISIBLE);
        submitButton.setVisibility(View.INVISIBLE);
        submitButton.setClickable(false);
    } else if (leavingState == LOGIN_STATE) {
        loginForm.setVisibility(View.INVISIBLE);
        forgotPassword.setVisibility(View.INVISIBLE);
        submitButton.setVisibility(View.INVISIBLE);
        submitButton.setClickable(false);
    }

}
所有缺少的toggle…()函数的逻辑与上面的相同。我尝试将View.GONE代码放在onAnimationEnd中,但结果是一样的(错误仍然存在)

使用,而不是


当您只提供代码增量时,很难告诉您确切的问题。但我认为这和你注册动画回调的时间有多大关系。确保在onAnimationEnd中取消注册

在动画回调中执行什么操作?显示为代码与其他函数中的内容几乎相同。检查编辑。很抱歉,代码片段有点混乱,但所有的逻辑都在那里。您在onAnimationEnd中注销的确切含义是什么?@ynnadkrap在调用“fadeOut.setAnimationListener(this)”时,很难从代码中理解。但在某个时候,您需要调用:“fadeOut.setAnimationListener(null)”,以取消注册哦,它在onCreate中,对此表示抱歉。所以每次我想使用那个动画时我都需要注册/注销?此外,动画正在用于多个视图-这有问题吗?是的,我建议每次使用完后都取消注册,并为每个视图组注册不同的动画。