使用WindowManager.updateViewLayout()获取视图以设置其新位置的动画

时间:2014-07-24 22:10:38

标签: android window-managers

我使用WindowManager.updateViewLayout()向WindowManager添加了一个视图。

然后我将一个onTouch监听器附加到它上面,并使其成为"关注"用户的手指(拖动)。我这样做是通过更改我在updateViewLayout中传递的WindowManager.LayoutParams的x和y值。

当用户抬起手指时,我希望视图根据其靠近的位置动画到屏幕的左/右边缘。 我得到的效果是视图立即贴在边缘上,没有任何动画。

如果视图的宽度/高度变化很难(以及随后的WindowManager.LayoutParams的宽度/高度),则视图会动画到新位置。

有没有办法让它在改变x / y值后得到动画(没有宽度/高度变化)?

1 个答案:

答案 0 :(得分:1)

你可以这样做:每当你举起手指时都要运行一个动画师:

// <inside switch case in your touchEvent handling>  
// params variable is your view's params

case MotionEvent.ACTION_UP:
    ValueAnimator va = ValueAnimator.ofFloat(params.x, 0);
    int mDuration = 250;
    va.setDuration(mDuration);
    va.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {

        public void onAnimationUpdate(ValueAnimator animation) {
           params.x = Math.round((Float) animation.getAnimatedValue());
           mWindowManager.updateViewLayout(mOverlayView, params);
        }
    });
    va.start();

当您松开手指时,此代码始终将其动画显示在屏幕的左边缘。您可以通过跟踪视图的坐标并检查屏幕中间然后更改动画目标来对其进行排序。