我使用 WindowManager.updateViewLayout() 向 WindowManager 添加了一个 View .
然后我将一个 onTouch 监听器附加到它,并使其“跟随”用户的手指(拖动)。我通过更改我在 updateViewLayout 中传递的 WindowManager.LayoutParams 的 x 和 y 值来执行此操作。
当用户抬起手指时,我希望 View 根据距离更近的位置在屏幕的左/右边缘进行动画处理。 我得到的效果是 View 立即贴在边缘,没有任何动画。
如果 View 的宽度/高度发生剧烈变化(随之而来的是 WindowManager.LayoutParams 的宽度/高度), View 将以动画方式移动到它的新位置。
有没有办法让它在仅更改 x/y 值(不改变宽度/高度)后进行动画处理?
最佳答案
你可以这样做:每当你抬起手指时运行一个动画器:
// <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();
当您松开手指时,此代码始终将其移动到屏幕的左边缘。您可以通过跟踪 View 的坐标并检查屏幕中间然后更改动画目标来解决这个问题。
关于android - 使用 WindowManager.updateViewLayout() 获取 View 以动画化到其新位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24944875/