我的布局中有一个按钮。我正在使用带有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就会有一个监听器。
答案 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)
}
}