gpt4 book ai didi

android - 使用 WindowManager.updateViewLayout() 获取 View 以动画化到其新位置

转载 作者:塔克拉玛干 更新时间:2023-11-02 21:38:23 26 4
gpt4 key购买 nike

我使用 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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com