在具有位置依赖性的视图上转换动画

时间:2018-03-10 17:44:15

标签: android animation translate-animation

我遇到了一个问题,我有一个标题视图,我希望翻译进出可见性 - 使用翻译动画 - 直接位于主要内容视图上方。为了说明我的意思,请看下面的图片。蓝色部分是标题,橙色部分是主要内容。

enter image description here

示例代码

TranslateAnimation animation = new TranslateAnimation(0, 0, 0, -rlInfoBar.getHeight());
        animation.setFillAfter(true);
        animation.setDuration(10000);

        animation.setAnimationListener(new TranslateAnimation.AnimationListener() {

            @Override
            public void onAnimationStart(Animation animation) {
            }

            @Override
            public void onAnimationEnd(Animation animation) {
            }

            @Override
            public void onAnimationRepeat(Animation animation) {

            }
        });
        rvItems.startAnimation(animation);
        rlInfoBar.startAnimation(animation);

当我翻译蓝色部分时,即使主要部分被声明为“android:layout_below =”@ + id /“它仍然处于适当位置。我的想法是然后翻译它们两个,但是,当这样做的主要内容向上移动,但屏幕的底部也向上移动,显示父视图的背景。如何解决此问题?我是否必须翻译两个视图加上拉伸主内容视图或以某种方式将主内容视图锚定到底部屏幕?

翻译两个观点的结果

enter image description here

1 个答案:

答案 0 :(得分:1)

  

我是否必须翻译两个视图以及拉伸主内容视图或以某种方式将主要内容视图锚定到屏幕底部?

好吧,如果你没有伸展主要内容View,那么将其锚定到底部将会在标题View向上移动时立即显示在顶部。所以我认为你需要一套动画(缩放和翻译)。

或者您使用Transition framework,在这种情况下,ChangeBounds过渡将为View s

完成工作
View sceneRoot = <someViewGroupContainingBothViews>;
TransitionManager.beginDelayedTransition(sceneRoot, new ChangeBounds());
rlInfoBar.setY(<newY_CoordinateOfHeaderView>);