【问题标题】:Animations on the view happens only on First Time视图上的动画仅在第一次发生
【发布时间】:2018-02-20 15:39:51
【问题描述】:

我正在做自定义搜索栏,如 WhatsApp、谷歌应用程序。我正在尝试在显示和关闭视图时添加动画。我添加动画 XML 文件来执行这些操作。

假设,如果用户按下搜索图标,它将以动画形式显示搜索栏。如果用户按下搜索栏中的关闭图标,它将以动画方式关闭搜索栏。

动画只在第一次发生。它不会像我按下搜索图标那样在第二次发生动画。

public class MainActivity extends AppCompatActivity implements Animation.AnimationListener{
ImageButton ibSearch;
EditText etSearch;
ImageButton ibBack,ibClose;
CardView cardView;
ObjectAnimator objectanimator;
RelativeLayout search;
Animation animOpenView,animCloseView;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    ibSearch = (ImageButton)findViewById(R.id.search);
    cardView = (CardView) findViewById(R.id.searchBarC);
    ibClose = (ImageButton) findViewById(R.id.close);
    search = (RelativeLayout) findViewById(R.id.searchLayout);
    animOpenView = AnimationUtils.loadAnimation(getApplicationContext(),
            R.anim.anim_left);
    animCloseView = AnimationUtils.loadAnimation(getApplicationContext(),
            R.anim.anim_right);

    animCloseView.setAnimationListener(this);
    animOpenView.setAnimationListener(this);

    ibSearch.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            cardView.setVisibility(View.VISIBLE);
            cardView.setAnimation(animOpenView);

        }
    });
    ibClose.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            cardView.setVisibility(View.GONE);
            cardView.setAnimation(animCloseView);
        }
    });
}

@Override
public void onAnimationStart(Animation animation) {

}

@Override
public void onAnimationEnd(Animation animation) {

}

@Override
public void onAnimationRepeat(Animation animation) {

}

任何建议将不胜感激。

【问题讨论】:

    标签: java android search android-animation


    【解决方案1】:

    这是因为你正在让你的观点消失

    在动画开始之前,您的视图会离开屏幕。

    所以要欣赏动画,只需删除那条线..

    cardView.setVisibility(View.GONE); // remove this.. cardView.setAnimation(animCloseView);

    【讨论】:

    • 没有人。它是第一次工作。我不知道如何重新启动动画。
    • 第一次点击 ibOpen 显示 openanim... 第二次点击会有问题,因为你在 colse anim 之前设置走了
    • 但是即使我在隐藏视图之前添加了关闭动画,它也不起作用。问题是我们需要重新启动动画。
    • 我解决了这个问题。我确实重新分配了 animCloseView 和 animOpenView。
    【解决方案2】:

    在你的活动onAnimationEnd中试试这个:

    @Override
    public void onAnimationEnd(Animation animation) {
        cardView.clearAnimation();
    }
    

    【讨论】:

    • 不,它不起作用。仅第一次发生
    • 我解决了这个问题。我确实重新分配了 animCloseView 和 animOpenView。
    • 将您的解决方案作为单独的答案发布
    【解决方案3】:

    问题已解决。实际上,问题是,animCloseView 和 animOpenView 在第一次后为空/非空。所以我重新启动动画。

    ibSearch.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View view) {
                    cardView.setVisibility(View.VISIBLE);
                    animOpenView = AnimationUtils.loadAnimation(getApplicationContext(),
                            R.anim.anim_left); //just added this line
                    cardView.setAnimation(animOpenView);
    
                }
            });
            ibClose.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View view) {
                    cardView.setVisibility(View.GONE);
                    animCloseView = AnimationUtils.loadAnimation(getApplicationContext(),
                            R.anim.anim_right); //just added this line
                    cardView.setAnimation(animCloseView);
                }
            });
        }
    

    【讨论】:

      猜你喜欢
      • 2014-08-23
      • 2021-11-28
      • 1970-01-01
      • 2012-01-03
      • 2017-05-19
      • 1970-01-01
      • 1970-01-01
      • 2016-06-12
      • 1970-01-01
      相关资源
      最近更新 更多