Android:是否有.TranslationX()更改视图的侦听器

时间:2014-08-28 10:54:13

标签: android animation

我的布局中有一个按钮。我正在使用带有translationX动画的ObjectAnimator为该按钮的位置设置动画。

ObjectAnimator btnAnimator = ObjectAnimator.ofFloat(myBtn, "translationX", 
        ViewHelper.getTranslationX(myBtn), 0);

btnAnimator.addListener(new AnimatorListener() {
    @Override
    public void onAnimationCancel(Animator arg0) {}

    @Override
    public void onAnimationEnd(Animator arg0) {
        Log.i("TAG","Animation Finished");
    }

    @Override
    public void onAnimationRepeat(Animator arg0) {}

    @Override
        public void onAnimationStart(Animator arg0) {}
});
btnAnimator.setDuration(animationSpeed).start();

现在我希望只要按钮的TranslationX位置发生变化,该按钮的TranslationX就会有一个监听器。

3 个答案:

答案 0 :(得分:2)

两种可能的方法:

1)在视图中覆盖onLayout()以手动比较和检测位置变化。

2)在你的视图上使用onLayoutChangeListener:

button.addOnLayoutChangeListener(new OnLayoutChangeListener() {
    @Override
    public void onLayoutChange(View v, int left, int top, int right, int bottom, int oldLeft,
                    int oldTop, int oldRight, int oldBottom) {
        // Check your new position vs the old one
    }
});

答案 1 :(得分:2)

这是我发现你做的事情的一种简单方法:

btnAnimator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
    @Override
    public void onAnimationUpdate(ValueAnimator animation) {
        Log.e("TAG", "translateX: "+animation.getAnimatedValue("translationX"));
    }
});

btnAnimator.setDuration(animationSpeed).start();

答案 2 :(得分:1)

我使用了它,它是一种很好的方式来监听视图翻译的变化。

var previousTranslationX = view.translationX
var previousTranslationY = view.translationY
view.viewTreeObserver.addOnDrawListener {
  if (previousTranslationX != view.translationX || 
      previousTranslationY != view.translationY) {
    previousTranslationX = view.translationX
    previousTranslationY = view.translationY

    dispatchViewTranslationUpdated(view)
  }
}