当前位置: 首页 > 知识库问答 >
问题:

Android动画布局问题

谢鸿
2023-03-14

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

逻辑如下:
按下按钮-

只要上面的交互使用相同的按钮(对于相同的线性布局),这就可以非常好地工作。按下另一个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);
    }

}

所有缺失开关的逻辑。。。()功能与上述相同。我试着把视线。onAnimationEnd中的代码消失了,但结果是一样的(错误仍然存在)。

共有1个答案

章晗日
2023-03-14

而不是消失,使用,无形。

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

 类似资料:
  • 当我打开视图控制器时,我有一个从顶部飞出的视图。我已将UIView的Y约束设置为-200,当视图加载时,将调用以下内容,一切正常: 但是现在我有一个关闭按钮,它应该将动画回到-200位置,然后从屏幕上删除视图控制器。但是这个动画没有发生。视图控制器被直接删除。这是我正在做的: 我提到了这个链接。这似乎对他们有效,但对我无效。请帮忙。

  • 我正在创建一个我想要的相对布局,应该从上面滑到布局,所以这里是我所做的 使布局不可见 在oncreate中将屏幕上方的布局动画化 在onWindowsFocusChanged()中,我调用了动画,使布局可见,并希望布局滑入屏幕 但是 当视图被创建时,布局在其正确的位置,显示任何来自屏幕顶部的滑动效果 布局 这是activity的主题

  • 我在它的列表视图中有一个导航抽屉,里面装满了项目,抽屉底部有一个线性布局,这是另一个选项。当单击列表中的任何项目时,它们的容器会以材质涟漪效果很好地进行动画制作。我想知道如何在列表外的linearlayout按钮上启用相同的效果。

  • 我错过了什么? 为了便于阅读,这里提供了一个要点,并附带了一个测试用例:https://Gist.github.com/teyc/5668517

  • 问题内容: 是Android开发的新手。我已经创建了一个android应用,下面是我的main.xml 正在收到以下警告: 谁能说出此警告的原因和解决方案。 问题答案: 在RelativeLayout中仅使用LinearLayout并没有实际用途。因此,其中之一是无用的,因为这是多余的。 编辑 当版式只有一个孩子也是版式时,将触发此警告。在这种情况下,两者都可以移除而没有任何问题。建议删除这些多余

  • 我有一个自定义视图CustomLayout(蓝色,自定义UIView),该视图包含3个子视图,通过使用约束(布局锚定)垂直对齐,每个视图按照以下顺序对齐: 1视图:幻灯片(红色,自定义UIView) 我想,当我单击按钮(黄色)时,如果使用动画打开,SlideLayout(红色)的高度大小会增加,如果关闭,则会减少。和其他视图必须在动画期间更改位置,如果SlideLayout增加/减少,则父视图(C