2014-11-14 115 views
0

我正在努力讓動畫工作。我正在將一個搜索欄從屏幕中間移到屏幕頂部。動畫效果很好,但一旦移動,我就無法與任何東西互動。我已經更新了職位,但無法與其互動。下面是我到目前爲止有:更新動畫後的查看位置

private void moveSearchToTop() 
{ 
    FrameLayout root = (FrameLayout) findViewById(R.id.rootLayout); 
    DisplayMetrics dm = new DisplayMetrics(); 
    this.getWindowManager().getDefaultDisplay().getMetrics(dm); 
    statusBarOffset = dm.heightPixels - root.getMeasuredHeight(); 

    int originalPos[] = new int[2]; 
    mSearchBar.getLocationOnScreen(originalPos); 

    search_top = statusBarOffset - originalPos[1]; 
    TranslateAnimation anim = new TranslateAnimation(0, 0, 0, search_top); 
    anim.setDuration(500); 
    anim.setFillAfter(true); 
    anim.setAnimationListener(new Animation.AnimationListener() { 
     @Override 
     public void onAnimationStart(Animation animation) { 

     } 

     @Override 
     public void onAnimationEnd(Animation animation) { 
      mSearchBar.layout(0, search_top, 0, mSearchBar.getHeight() + search_top); 
     } 

     @Override 
     public void onAnimationRepeat(Animation animation) { 

     } 
    }); 

    mSearchBar.startAnimation(anim); 
} 

和這裏的什麼觀點看起來像XML:

<LinearLayout 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:layout_gravity="center_vertical" 
    android:id="@+id/search_bar" 
    android:background="@android:drawable/dialog_holo_light_frame"> 
    <ImageView 
     android:id="@+id/search_icon" 
     android:layout_width="wrap_content" 
     android:onClick="onSearchClick" 
     android:layout_height="25dp" 
     android:layout_gravity="center_vertical" 
     android:src="@drawable/search"/> 
    <EditText 
     android:id="@+id/search_field" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_gravity="center_vertical" 
     android:layout_weight="1" 
     android:singleLine="true" 
     android:hint="Search"/> 
    <ImageView 
     android:layout_width="wrap_content" 
     android:layout_height="25dp" 
     android:layout_gravity="center_vertical" 
     android:src="@drawable/camera"/> 
    </LinearLayout> 

我是否需要更新所有的子元素過多的位置?感謝您的正確位置。

+2

您正在使用的,只是要改變出票,而不是實際位置的圖動畫。我相信有辦法欺騙它來移動實際的位置,但是我總是發現使用對象動畫製作者更容易開始,因爲它會更新實際位置,而無需做任何額外的事情。 – Whitney 2014-11-14 22:59:13

回答

0

不,您不需要修改子視圖。他們會去搜索欄去的地方。

它看起來像你正在使用你的search_top變量作爲delta(用於TranslateAnimation構造函數)和作爲其父(在調用佈局)中的位置。這實際上是一個三角洲,所以調用佈局是不正確的。

是您的searchBar的「父母」FrameLayout?如果是這樣,那麼你只是想在調用佈局時使用0作爲新的y座標。此外,您正在使用0作爲正確的座標,這意味着它在動畫之後沒有寬度。這一呼籲就是在其父的左上邊緣位置的搜索欄,並維持其當前的寬度和高度:

mSearchBar.layout(0, 0, mSearchBar.getWidth(), mSearchBar.getHeight()); 

我也建議你不要使用屏幕上的位置。僅在父視圖中設置視圖的位置比較安全。例如,如果搜索欄的父母真的是根,那麼你就可以得到與三角洲:

search_top = - mSearchBar.getTop();