如何用动画“折叠”视图的高度?

时间:2013-06-24 14:35:56

标签: android android-animation

我正试图让一个简单的视图在另一个视频后面滑动消失,我尝试过任何类型的动画,但没有一个成功...

这是我到目前为止所尝试过的:

public void slideToTop(View view){
        TranslateAnimation animate = new TranslateAnimation(0,0,0,-view.getHeight());
        animate.setDuration(1000);
        view.startAnimation(animate);
        view.setVisibility(View.GONE);
    }

有没有ReverseInterpolator

public class ReverseInterpolator implements Interpolator {
        public float getInterpolation(float paramFloat) {
            return Math.abs(paramFloat -1f);
        }
    }

或使用Scaling

public void scaling(View view) {
        ScaleAnimation animation = new ScaleAnimation(0,0,1,1.5f);
        animation.setDuration(1000);
        animation.setFillAfter(true);
        view.startAnimation(animation);
    }

或使用新的api

editView.animate().translationY(-editView.getHeight()).withLayer();

有关如何实现这一目标的任何帮助?

我的布局类似于:

<ScrollView>
  <LinearLayout>
    <LinearLayout>
      <TextView/>
      <View/> <!-- This should "disappear" sliding up behind the other one -->
    </LinearLayout>
    <!-- more of the previous -->
    <LinearLayout>
      <TextView/>
      <View/>
    </LinearLayout>
  </LinearLayout>
</ScrollView>

有任何帮助吗?谢谢!

1 个答案:

答案 0 :(得分:3)

如果您想要视图B在视图A后面消失的效果,则需要在A:

之前绘制B.
<RelativeLayout>
   <ViewB />
   <ViewA above="ViewB"/>
</RelativeLayout>

然后移动ViewB。我已经使用以下代码完成了相同的操作,它将以自己的高度移动viewToMove:

public void collapse() {
        View viewToMove= mainView.findViewById(R.id.viewToMove);
        int pixelsToMove= viewToMove.getHeight() * -1;
        slots.animate().yBy(pixelsToMove).setDuration(ANIMATION_DURATION_MS);
    }

在致电getHeight()时要小心,您可能需要ViewTreeObserver才能获得正确的值,因为在绘制视图之前的大多数时间getHeight()只会返回0