3

在我的 Activity 屏幕中,屏幕的一半包含一个布局。当 Activity 加载它时它是可见的,10 秒后它会慢慢下降,最后它对用户不可见。但它下降得很慢。我该怎么做。拜托谁能帮我。

提前致谢。

4

4 回答 4

20

在您的res\anim文件夹中(如果文件夹不存在则创建该文件夹)创建slide_out_down.xml并粘贴以下内容

<?xml version="1.0" encoding="utf-8"?>
<translate
xmlns:android="http://schemas.android.com/apk/res/android"

android:fromYDelta="0%p"
android:toYDelta="100%p"
android:duration="@android:integer/config_longAnimTime" />

启动动画并隐藏视图使用这个

 private void hideView(final View view){
    Animation animation = AnimationUtils.loadAnimation(this, R.anim.slide_out_down);
    //use this to make it longer:  animation.setDuration(1000);
    animation.setAnimationListener(new AnimationListener() {
        @Override
        public void onAnimationStart(Animation animation) {}

        @Override
        public void onAnimationRepeat(Animation animation) {}

        @Override
        public void onAnimationEnd(Animation animation) {
             view.setVisibility(View.GONE);
        }
    });

    view.startAnimation(animation);
}
于 2013-06-27T10:47:01.067 回答
2
public void animateLayout(){
        LinearLayout layout = findViewById(R.id.layoutId);
        layout.animate().translationYBy(1000f).setDuration(50000);
    }

上面的代码会使视图非常缓慢地变得不可见。

setDuration(50000)//根据需要更改数字。它改变布局的速度。

于 2018-02-03T15:08:24.317 回答
1

您可以为此使用 FragmentActivity 和 Fragment 并向片段添加动画

<set xmlns:android="http://schemas.android.com/apk/res/android"
 android:interpolator="@android:anim/accelerate_interpolator">
 <scale
  android:fromXScale="1.0" android:toXScale="0.0"
  android:fromYScale="1.0" android:toYScale="0.0"
  android:pivotX="50%"
  android:pivotY="50%"
  android:duration="1000" 
 />

于 2013-06-27T10:44:38.530 回答
0
try this:

// gone layout
     collapse(recipientLayout);
//show layout
      expand(recipientLayout);

    public void expand(final LinearLayout v) {
    v.measure(LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.WRAP_CONTENT);
    final int targtetHeight = v.getMeasuredHeight();
    /*if (v.isShown()) {
        collapse(v);
    } else */{
        v.getLayoutParams().height = 0;
        v.setVisibility(View.VISIBLE);
        Animation a = new Animation() {
            @Override
            protected void applyTransformation(float interpolatedTime,
                                               Transformation t) {
                v.getLayoutParams().height = interpolatedTime == 1 ? LinearLayout.LayoutParams.WRAP_CONTENT
                        : (int) (targtetHeight * interpolatedTime);
                v.requestLayout();
            }

            @Override
            public boolean willChangeBounds() {
                return true;
            }
        };
        a.setDuration((int) (targtetHeight + 600));
        v.startAnimation(a);
    }

}

public void collapse(final LinearLayout v) {
    final int initialHeight = v.getMeasuredHeight();
    Animation a = new Animation() {
        @Override
        protected void applyTransformation(float interpolatedTime,
                                           Transformation t) {
            /*if (v.isShown()) {
                collapse(v);
            }*/
            if (interpolatedTime == 1) {
                v.setVisibility(View.GONE);
            } else {
                v.getLayoutParams().height = initialHeight
                        - (int) (initialHeight * interpolatedTime);
                v.requestLayout();
            }
        }

        @Override
        public boolean willChangeBounds() {
            return true;
        }
    };

    a.setDuration((int) (v.getLayoutParams().height + 600));
    v.startAnimation(a);
}
于 2017-03-24T09:41:33.607 回答