Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/199.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 如何使用动画平滑地向上和从屏幕上平移视图?_Android_Android Layout - Fatal编程技术网

Android 如何使用动画平滑地向上和从屏幕上平移视图?

Android 如何使用动画平滑地向上和从屏幕上平移视图?,android,android-layout,Android,Android Layout,假设您有这样的布局: ___________________________________________ | | | | | TOP CONTENT | | | |__________________

假设您有这样的布局:

___________________________________________
|                                         |
|                                         |
|               TOP CONTENT               |
|                                         |
|_________________________________________|
|                                         |
|                                         |
|                 BOTTOM                  |
|                 CONTENT                 |
|                                         |
|_________________________________________|
我想将顶部内容滑出屏幕,我可以使用翻译动画(用XML定义)成功地做到这一点。我设置了一个监听器,以便在动画结束时,顶部内容的可见性设置为View.GONE。我的问题是,当动画执行时,顶部内容占据的区域仍保留在屏幕上。底部内容不会随之向上滑动。基本上,对于正在执行动画的500毫秒,底部内容保持在其位置,然后在动画结束后突然向上移动

如何使“底部内容”与“顶部内容”的下边缘保持参数下方的布局_,并与“顶部内容”平滑地向上滚动?这是否需要在底部内容上使用另一个动画

谢谢你的帮助

这是否需要在底部内容上使用另一个动画

我通常就是这样做的,而且效果很好。

只是一个想法:

尝试使用
makeInAnimation(上下文c,布尔值从左起)
makeOutAnimation(上下文c,布尔值从右起)

这些动画最初设计为向右/向左滑动,但您可以覆盖它们或对默认动画执行转换

此外,请确保您正在使用

这将确保两个动画同时播放

希望这有帮助


来源:

我有一个适合我的解决方案,甚至更好地使用动画使其平滑

private int heightOfScreen;

   @Override
    public void onViewCreated(View view, Bundle savedInstanceState) {
        configureLayoutListener();
    }

private void configureLayoutListener() {
        mNormalModelayoutContainer.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
            @Override
            public void onGlobalLayout() {
                heightOfScreen = mNormalModelayoutContainer.getHeight();
                ViewTreeObserver viewTreeObserver = mNormalModelayoutContainer.getViewTreeObserver();
                if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN) {
                    viewTreeObserver.removeOnGlobalLayoutListener(this);
                } else {
                    viewTreeObserver.removeGlobalOnLayoutListener(this);
                }
            }
        });
    }

    private void animate() {
        View viewToShiftOut = mNormalModelayoutContainer;
        View viewToShiftIn = mEditModelayoutContainer;
        ObjectAnimator outAnim = ObjectAnimator.ofFloat(viewToShiftOut, "y", 0, -heightOfScreen/2);
        ObjectAnimator inAnim = ObjectAnimator.ofFloat(viewToShiftIn, "y", heightOfScreen/2, 0);
        outAnim.setDuration(1000);
        inAnim.setDuration(1000);
        outAnim.start();
        inAnim.start();
    }
这适用于片段,但可适用于任何视图或活动。 注意:注意我们测量高度的方式和位置
-“入”和“出”视图可以向相反方向移动,但可以向任何指南针方向移动。

感谢您的回复。我的问题是如何设置fromYDelta中的百分比?你只是猜测和检查,看看什么与顶部内容容器的底部对齐吗?我只是在我正在制作动画的视图上应用相同的
动画。这通常取决于特定的情况,但看起来你需要稍微调整一下。试试看。:-)