Android 安卓视图动画放松了视图的位置

Android 安卓视图动画放松了视图的位置,android,android-layout,android-animation,Android,Android Layout,Android Animation,对于我当前的项目,我正在构建一个带有句柄和内容的下拉视图。 当我拖动手柄时,一切正常。然后我放开它,开始一个动画来完全打开或关闭下拉菜单 第一:没有动画,一切都很好,但当然不是那么顺利 因此,我为动画添加了以下内容: ObjectAnimator animHandle = ObjectAnimator.ofFloat(mHandleContainer, "y", newHandlePosition); ObjectAnimator animContent = ObjectAnim

对于我当前的项目,我正在构建一个带有句柄和内容的下拉视图。 当我拖动手柄时,一切正常。然后我放开它,开始一个动画来完全打开或关闭下拉菜单

第一:没有动画,一切都很好,但当然不是那么顺利

因此,我为动画添加了以下内容:

    ObjectAnimator animHandle = ObjectAnimator.ofFloat(mHandleContainer, "y", newHandlePosition);
    ObjectAnimator animContent = ObjectAnimator.ofFloat(mContent, "y", newContentPosition);
    final AnimatorSet animatorSet = new AnimatorSet();
    animatorSet.playTogether(animHandle, animContent);
    animatorSet.setInterpolator(new AccelerateDecelerateInterpolator());
    animatorSet.setDuration(MAX_ANIMATION_DURATION);
    animatorSet.start();
这里一切都很好

但是,当我再次按下手柄(mHandleContainer)时,我想知道手柄的位置,所以我要做一个

    mHandleContainer.getTop()
这就是问题所在。 初始化自定义组件时,我将句柄的顶部设置为0。 到目前为止还不错,然后我开始拖动,当我放开时,我看到我将设置动画到1134像素的位置。这很好(意味着下拉将完全打开)

但是,我再次按下句柄并得到顶部(getTop()),它仍然返回0

我想要的是视图的getTop()函数再次返回1134

可能吗

或者我应该在AnimatorListener的onAnimationEnd方法中做些什么? 我已经试过在那里做一个mHandleContainer.layout(..),然后我的getTop()就可以了,但是我的布局就坏了

还有让动画在正确的位置结束(就像它那样)并在视图中保持该位置的技巧

我已经在SO(和谷歌)上看过了,但没有找到有用的东西。我能找到的唯一接近我的问题是:
但是也没有帮助…

这是因为您在尝试读取属性top时正在设置“y”属性的动画,而它们并不相同。 顶部是视图相对于其父视图的顶部位置。 Y是视图的可视Y位置,相当于平移Y+当前顶部特性

因此,在你的情况下:

  • 或者像这样设置“顶部”的动画:

    ObjectAnimator animHandle = ObjectAnimator.ofFloat(mHandleContainer, "top", 200);
    
    并通过

    mHandleContainer.getTop()
    
    mHandleContainer.getY();
    
  • 或“y”:

    并通过

    mHandleContainer.getTop()
    
    mHandleContainer.getY();
    

  • 我确实使用基本值Animator解决了这个问题,它每次调用我的自定义绘图方法来移动我的所有视图