2014-08-28 81 views
2

我的佈局中有一個按鈕。我使用帶有translationX動畫的ObjectAnimator爲該按鈕的位置設置動畫。Android:是否有一個視圖的.TranslationX()更改偵聽器

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位置發生變化時通知它。

回答

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 
    } 
}); 
+0

嗨,我已經嘗試了'addOnLayoutChangeListener'但它僅在按鈕移動的開始和結束時返回位置,但不在移動時返回。 – 2014-08-28 11:12:00

+0

然後嘗試onLayout():) – Jitsu 2014-08-28 11:31:05

+0

我想知道爲什麼沒有直接用於TranslationX的Listener。我可以做onLayout(),但現在我必須創建一個單獨的類並擴展視圖。 – 2014-08-28 11:45:52

1

這裏有一個簡單的方法我發現這樣做你以後:

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

btnAnimator.setDuration(animationSpeed).start(); 
+0

是的。一堆謝謝。它按照需要工作。雖然我在尋找除了動畫按鈕之外的其他情況下的偵聽器,但這對我來說非常合適。 – 2014-08-28 12:27:15

+0

但是,這將工作的其他類型的動畫進行意見?動畫師在LayoutTransition對象上設置什麼? – 2017-11-28 19:19:12

相關問題