0

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

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

所以我为动画添加了这个:

    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(和 Google),但没有找到有用的东西。我能找到的唯一接近我的问题的是:NineOldAndroids,旋转或移动后不可点击的视图 但也没有帮助......

4

2 回答 2

0

I did solve the issue using the basic ValueAnimator which each time called my custom drawing method for moving all my views.

于 2013-07-03T08:57:27.663 回答
0

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

所以在你的情况下:

  1. 像这样动画“顶部”:

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

    并通过阅读

    mHandleContainer.getTop()
    
  2. 或“y”:

    ObjectAnimator animHandle = ObjectAnimator.ofFloat(mHandleContainer, "y", 200);
    

    并通过阅读

    mHandleContainer.getY();
    
于 2013-06-27T12:34:21.453 回答