Android-如何制作在滚动列表视图时会更改其他视图的动画?

时间:2018-12-27 04:02:54

标签: android animation

在下面的图片中,左屏幕显示动画的开始状态,右屏幕显示结束状态。

动画的作用是,当列表视图从上到下移动时,“欢迎”标签将逐渐向上移动,并且个人资料图像视图将逐渐缩小并移至右上角。 当列表视图移回顶部时,将发生反转的动画。

我想问一下我该怎么做? 有关动画的开始和结束状态的图片

enter image description here

1 个答案:

答案 0 :(得分:0)

尝试此过渡,您可能需要修复一点可能并不完美

以2个imageviews开始动画的结尾。使结束动画imageview不可见

 scrollView.getViewTreeObserver().addOnScrollChangedListener(new ViewTreeObserver.OnScrollChangedListener() {
        @Override
        public void onScrollChanged() {
            int scrollY = scrollView.getScrollY();

           interpolate(start_profile_imageView, end_profile_imageView, scrollY );

        }
    });

将它们添加到同一课程中

private RectF mRect1 = new RectF();
private RectF mRect2 = new RectF();

private void interpolate(View view1, View view2, float interpolation) {
    getOnScreenRect(mRect1, view1);
    getOnScreenRect(mRect2, view2);

    float scaleX = 1.0F + interpolation * (mRect2.width() / mRect1.width() - 1.0F);
    float scaleY = 1.0F + interpolation * (mRect2.height() / mRect1.height() - 1.0F);
    float translationX = 0.5F * (interpolation * (mRect2.left + mRect2.right - mRect1.left - mRect1.right));
    float translationY = 0.5F * (interpolation * (mRect2.top + mRect2.bottom - mRect1.top - mRect1.bottom));

    view1.setTranslationX(translationX);
    view1.setTranslationY(translationY);
    view1.setScaleX(scaleX);
    view1.setScaleY(scaleY);

}

private RectF getOnScreenRect(RectF rect, View view) {
    rect.set(view.getLeft(), view.getTop(), view.getRight(), view.getBottom());
    return rect;
}

也请查看此project