【问题标题】:view slide down animation not working查看向下滑动动画不起作用
【发布时间】:2015-02-09 10:46:11
【问题描述】:

我正在使用我的应用程序中的一些图像为我的相对布局设置动画。当我编写代码以在按钮单击时为布局设置动画时,它第一次只是显示不动画。然后在同一个按钮上单击我正在向上滑动布局。之后,如果我单击按钮向下滑动动画效果很好。实际上,我必须在 onCreate 内部编写这个向下滑动动画,而不是单击按钮。下面给出的是我的代码。谁能告诉我为什么不显示动画?

   protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        this.requestWindowFeature(Window.FEATURE_NO_TITLE);
        setContentView(R.layout.fadeview);
        iconLayout=(RelativeLayout)findViewById(R.id.icon_ayout);
        iconLayout.postDelayed(new Runnable() {

            @Override
            public void run() {
                // TODO Auto-generated method stub

                iconLayout.setVisibility(View.VISIBLE);
                SlideToDown();
            }
        }, 500);
   }

 public void SlideToAbove() {
        Animation slide = null;

        slide=new TranslateAnimation(0.0f, 0.0f, 0.0f,-iconLayout.getHeight());
        slide.setDuration(1000);
        slide.setFillAfter(true);
        slide.setFillEnabled(true);
        iconLayout.startAnimation(slide);

        slide.setAnimationListener(new AnimationListener() {

            @Override
            public void onAnimationStart(Animation animation) {

            }

            @Override
            public void onAnimationRepeat(Animation animation) {
            }

            @Override
            public void onAnimationEnd(Animation animation) {

                iconLayout.clearAnimation();

                RelativeLayout.LayoutParams lp = new RelativeLayout.LayoutParams(
                        iconLayout.getWidth(), iconLayout.getHeight());
                // lp.setMargins(0, 0, 0, 0);
                //lp.addRule(RelativeLayout.ALIGN_PARENT_TOP);
                iconLayout.setLayoutParams(lp);

            }

        });

    }
 public void SlideToDown() {
        Animation slide = null;

        slide=new TranslateAnimation(0.0f, 0.0f, -iconLayout.getHeight(), 0.0f);

        slide.setDuration(1000);
        slide.setFillAfter(true);
        slide.setFillEnabled(true);
        iconLayout.startAnimation(slide);

        slide.setAnimationListener(new AnimationListener() {

            @Override
            public void onAnimationStart(Animation animation) {

            }

            @Override
            public void onAnimationRepeat(Animation animation) {
            }

            @Override
            public void onAnimationEnd(Animation animation) {

                iconLayout.clearAnimation();

                RelativeLayout.LayoutParams lp = new RelativeLayout.LayoutParams(
                        iconLayout.getWidth(), iconLayout.getHeight());
                lp.setMargins(0,0, 0, 0);
                lp.addRule(RelativeLayout.ALIGN_PARENT_TOP);
                iconLayout.setLayoutParams(lp);

            }

        });

    }

【问题讨论】:

  • 你有点击按钮的代码吗?您是否还尝试在首次创建活动时为布局设置动画,然后在单击按钮时对其进行动画处理?

标签: android animation


【解决方案1】:

这是因为您在 onCreate() 中开始动画,此时视图可用但实际上并未绘制(没有宽度和高度)。这里iconLayout.getHeight()的值将返回值0。

解决方案是为视图设置一个布局监听器,当它被绘制时监听器会通知你。之后就可以开始动画了。

ViewTreeObserver loadingObserver = iconLayout.getViewTreeObserver();
loadingObserver.addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
    @Override
    public void onGlobalLayout() {
        iconLayout.getViewTreeObserver().removeGlobalOnLayoutListener(this);
        SlideToDown();
    }
});

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-12-07
    • 1970-01-01
    • 2018-11-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多