2016-09-20 91 views
0

我有一個問題,而不是我需要解釋的問題。目前我在我的應用程序中有一個按鈕,允許視圖從工具欄下方向下滑動。在這個視圖中有編輯文本等提供高級搜索功能。在Android中查看動畫

我已經創建了大小爲100dp,頂邊距爲-100dp的視圖。這可以正常工作並隱藏視圖。當我爲下面的視圖製作動畫時,我的問題更爲重要。我以主要觀點「推動」他們。我認爲應該與之匹配,但是我必須將第二個視圖設置爲-30的值才能正確重新對齊。

任何人都可以解釋這一點嗎?

注意 - 這是一個測試佈局

<RelativeLayout 
     android:layout_width="match_parent" 
     android:layout_height="100dp" 
     android:layout_marginTop="-100dp" 
     android:background="#Fa45" 
     android:id="@+id/viewtest"> 
</RelativeLayout> 
<RelativeLayout 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:id="@+id/contentMain"> 
     <Button 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:layout_gravity="center_horizontal" 
      android:text="Slide Up" /> 
     <Button 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:layout_gravity="center_horizontal" 
      android:text="Slide Down" 
      android:layout_alignParentTop="true" 
      android:layout_centerHorizontal="true" /> 
</RelativeLayout> 

這不起作用

通過這也不行,我的意思是,按鈕最終丟失或半當他們滑向另一個角度時切斷。

public void startSlideUpAnimation(View view) { 
     v.animate().translationY(-400).setInterpolator(new BounceInterpolator()).setDuration(1000); 
     x.animate().translationY(-400).setInterpolator(new BounceInterpolator()).setDuration(1000); 
    } 

public void startSlideDownAnimation(View view) { 
    v.animate().translationY(400).setInterpolator(new BounceInterpolator()).setDuration(1000); 
    x.animate().translationY(400).setInterpolator(new BounceInterpolator()).setDuration(1000); 
} 

但如果我更改線路:

x.animate().translationY(-400).setInterpolator(new BounceInterpolator()).setDuration(1000); 

x.animate().translationY(-30).setInterpolator(new BounceInterpolator()).setDuration(1000); 

它工作得很好。我在這裏瘋狂或嘲笑數學嗎?

編輯

好,我發現,如果我在兩個視圖它們都相同的方式回到了比賽,回到原籍的集轉換y以0。這對我來說更沒意義,因爲我認爲浮動抵消是它應該返回或翻譯的價值。

有什麼想法?是否將其設置爲零,將其返回到原點或我錯過了一個難題?

回答

1

每個視圖翻譯值原來是zero,而對translationY的調用將它發送到指定的絕對值。

如果你想可以稱之爲translationYBy被指定的數值

,以抵消當前值考慮到這一解釋,如果你的代碼下面的代碼,你會得到正確的結果,通過動畫到一個位置,然後回到原來的zero

// first 
.translationY(-400) // translate to -400 
// and then later 
.translationY(0) // go back to the original position 

或者,如果你按照你想的樣子,你可以如下所示的代碼,翻譯從當前值400 offseting然後400偏移到另一個方向

// first 
.translationYBy(-400) // offset 400 to one direction 
// and then later 
.translationYBy(400) // offset 400 to the other direction 

這裏是官方文檔:https://developer.android.com/reference/android/view/ViewPropertyAnimator.html

+0

我想出了修正,但是你的解釋明顯地闡明瞭事情!非常感謝! – basic