如何在Android中从上到下实现滑动动画(这个动画发生时需要推送下面的内容)?

时间:2014-03-10 06:11:43

标签: android android-animation

我的布局将包含以下内容:

  1. 我有一个标题(线性布局)

  2. 第一个内容块(暂时处于离开状态的相对布局)

  3. 第二个内容块(同样是可见的相对布局)

  4. 我需要从上到下为第一个内容块设置动画,同时在第一个内容块移动的同一阶段推送下面的第二个内容块。

    我尝试了很多方法。在所有这些事情中,第二个内容块在其位置是可见的,然后第一个内容块向上移动到顶部。请给我一些建议。

1 个答案:

答案 0 :(得分:1)

您需要为布局提供ID,然后创建动画。

以下是示例代码。

public void SlideToAbove() {
        Animation slide = null;
        slide = new TranslateAnimation(Animation.RELATIVE_TO_SELF, 0.0f,
                Animation.RELATIVE_TO_SELF, 0.0f, Animation.RELATIVE_TO_SELF, 0.0f,
                Animation.RELATIVE_TO_SELF, -2.0f);

        slide.setDuration(400);
        slide.setFillAfter(true);
        slide.setFillEnabled(true);
        rl_footer.startAnimation(slide);

        slide.setAnimationListener(new AnimationListener() {

            @Override
            public void onAnimationStart(Animation animation) {

            }

            @Override
            public void onAnimationRepeat(Animation animation) {
            }

            @Override
            public void onAnimationEnd(Animation animation) {

                rl_footer.clearAnimation();

                RelativeLayout.LayoutParams lp = new RelativeLayout.LayoutParams(
                        LayoutParams.MATCH_PARENT, 200);
                // lp.setMargins(0, 0, 0, 0);
                lp.addRule(RelativeLayout.ALIGN_PARENT_LEFT);
                lp.addRule(RelativeLayout.ALIGN_PARENT_BOTTOM);
                rl_footer.setLayoutParams(lp);

            }

        });

    }

    public void SlideToDown() {
        Animation slide = null;
        slide = new TranslateAnimation(Animation.RELATIVE_TO_SELF, 0.0f,
                Animation.RELATIVE_TO_SELF, 0.0f, Animation.RELATIVE_TO_SELF, 0.0f,
                Animation.RELATIVE_TO_SELF, 1.0f);

        slide.setDuration(400);
        slide.setFillAfter(true);
        slide.setFillEnabled(true);
        rl_footer.startAnimation(slide);

        slide.setAnimationListener(new AnimationListener() {

            @Override
            public void onAnimationStart(Animation animation) {

            }

            @Override
            public void onAnimationRepeat(Animation animation) {
            }

            @Override
            public void onAnimationEnd(Animation animation) {

                rl_footer.clearAnimation();

                RelativeLayout.LayoutParams lp = new RelativeLayout.LayoutParams(
                        LayoutParams.MATCH_PARENT, 70);
                // lp.addRule(RelativeLayout.ALIGN_PARENT_LEFT);
                lp.addRule(RelativeLayout.ALIGN_PARENT_BOTTOM);
                rl_footer.setLayoutParams(lp);

            }

        });

    }

其中rl_footer和header是用户可见的布局ID。您可以将其称为

 button.setOnClickListener(new OnClickListener() {

                @Override
                public void onClick(View v) {

                    iv_header.setImageResource(R.drawable.android);
                    iv_header.setPadding(0, 10, 0, 0);
                    SlideToAbove();

                }
            });
单击按钮

或触摸

此致