2013-06-27 70 views
0

對於我當前的項目,我正在構建一個包含句柄和內容的下拉視圖。 當我拖動手柄時,一切都很好。然後,我放開它並開始動畫,以完全打開或關閉下拉菜單。Android視圖動畫失去視圖的位置

第一:沒有它的動畫一切都很好,不過關當然不是光滑......

所以我增加了本作的動畫:

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(); 

一切都只是罰款utill這裏。

但後來,當我再次按下手柄(mHandleContainer),我想知道手柄的位置,所以我做了

mHandleContainer.getTop() 

而這正是這一切都錯了。 當我初始化自定義組件時,我將把手的頂部設置爲0. 到目前爲止這麼好,然後我開始拖動,當我放開時,我看到我將動畫到1134像素的位置。這是好的(意味着下拉將完全打開)。

但後來我再次按下手柄,讓高層(共達()),它仍然返回我0.

我想的是,我的觀點的共達()函數再次回到我1134。

這可能嗎?

或者我應該在我的AnimatorListener的onAnimationEnd方法中做些什麼? 我已經嘗試在那裏做一個mHandleContainer.layout(..),然後我的getTop()是好的,但隨後我的佈局被擰緊...

這裏的技巧讓動畫結束正確的位置(就像它一樣)並堅持在視圖中的位置?

我已經看過SO(和Google),但沒有找到有用的東西。接近我的問題,我能找到的唯一的是這樣的:NineOldAndroids, not clickable view after rotation or move 但也沒有幫助...

回答

0

閱讀使用基本ValueAnimator其每次叫我的自定義繪製方式移動我的所有觀點我並解決問題。

0

這是因爲您正在嘗試讀取屬性頂部時動畫的「y」屬性,而他們不一樣。 Top是視圖相對於其父項的頂部位置。 Y是視圖的視覺y位置,它等同於translationY +當前頂級屬性。

所以你的情況:

  1. 無論是動畫 「頂」 是這樣的:

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

    ,並通過

    mHandleContainer.getTop() 
    
  2. 或 「Y」 閱讀:

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

    ,並通過

    mHandleContainer.getY();