2015-02-10 126 views
0

我知道,我必須在動畫之後重新定位實際視圖,以便在之後使其可點擊。我發現的解決方案是使用視圖的.layout(l,t,r,b)方法。動畫後的Android位置按鈕(view.layout())

但現在發生的情況是,該視圖向上150px正確動畫,但然後(當調用上述方法時)跳過另一個150px。所以我的觀點中的「hitbox」現在就是我所期望的,但是我的視圖的渲染圖像在它之上。

通過點擊hitbox,視圖開始動畫150px,然後再跳150px。

下面是兩張圖片來說明我的問題。第二個圖像展示了它在「向上動畫」之後的樣子。紅色矩形顯示我想要圖像的位置。

前: Before animation

後: After animation

這裏是重要的代碼行:

animSlideUpButton = new TranslateAnimation(Animation.ABSOLUTE, 0, Animation.ABSOLUTE, 0, Animation.ABSOLUTE, 0, Animation.ABSOLUTE, -150); 
animSlideDownButton = new TranslateAnimation(Animation.ABSOLUTE, 0, Animation.ABSOLUTE, 0, Animation.ABSOLUTE, -150, Animation.ABSOLUTE, 0); 

animSlideUpButton.setDuration(1000); 
animSlideDownButton.setDuration(1000); 

animSlideUpButton.setFillAfter(true); 
animSlideDownButton.setFillAfter(true); 

animSlideUpButton.setAnimationListener(this); 
animSlideDownButton.setAnimationListener(this); 

監聽器:

@Override 
public void onAnimationEnd(Animation animation) { 
    if(animation == animSlideUpButton){ 
     int left = containerBttToggleFooter.getLeft(); 
     int top = containerBttToggleFooter.getTop(); 
     int right = containerBttToggleFooter.getRight(); 
     int bottom = containerBttToggleFooter.getBottom(); 

     containerBttToggleFooter.layout(left, top-150, right, bottom-150); 

    }else if(animation == animSlideDownButton){ 
     int left = containerBttToggleFooter.getLeft(); 
     int top = containerBttToggleFooter.getTop(); 
     int right = containerBttToggleFooter.getRight(); 
     int bottom = containerBttToggleFooter.getBottom(); 

     containerBttToggleFooter.layout(left, top+150, right, bottom+150); 

    } 
} 

任何想法?

回答

0

你的問題是你在動畫中使用fillAfter,所以在動畫結束後翻譯仍然是150,最重要的是,你通過onAnimationEnd方法將它們移動了另外150個。

爲了解決這個問題,更改此代碼:

animSlideUpButton.setFillAfter(true); 
animSlideDownButton.setFillAfter(true); 

這樣:

animSlideUpButton.setFillAfter(false); 
animSlideDownButton.setFillAfter(false); 
+0

謝謝,這就是它!但是現在在重置視圖的動畫和我在onEndAnimation-Listener中設置新的佈局之間有一點點閃爍。 – Mazen 2015-02-10 14:47:40

+0

嘗試在onAnimationEnd方法的視圖上添加對clearAnimation()的調用。 – 2015-02-10 15:58:21