window 中的动画 EditText

Animate EditText out of a window

我有一个 RelativeLayout,下面有一个 "search bar" (EditText) 和一个 ListView:

<LinearLayout
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:orientation="vertical" >

    <EditText
        android:id="@+id/etSearch"
        android:layout_width="fill_parent"
        android:layout_height="40dp"
        android:inputType="text" >

    <ListView
        android:id="@+id/listView1"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:layout_marginTop="0dp"
        android:clipToPadding="false"
        android:listSelector="@drawable/listview_selector" >
    </ListView>
</LinearLayout>

在用户 "searches" 之后,我希望 EditText 动画出屏幕,ListView 推到顶部。我整理了一张我需要的 非常 粗略的 GIF:

有没有人知道我如何才能做到这一点?谢谢

更新

我找到了如何使 EditText 动画离开屏幕的方法:

slide_out_top.xml

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
    <translate android:fromYDelta="0%" android:toYDelta="-100%" android:duration="600"/>
</set>

然后像这样在 EditText 上使用它:

mSlideOutTop = AnimationUtils.loadAnimation(this, R.anim.slide_out_top);
et.startAnimation(mSlideOutTop);

但随后 ListView 保持在其当前高度。我想要的是在 EditText 动画出来时让 ListView 延伸到顶部。

你可以在ViewGroup中添加TranslateAnimation(适合你的是LinearLayout),y轴移动的距离是editText View的高度。然后在需要时触发此动画。 (更新:只是觉得这样可能会在底部创建一个空白栏,坏主意)

我还有一个棘手的想法。

在 ListView 中设置 EditText 视图的位置为 0 ,然后只需调用 smoothScrollToPostion(1) 方法即可滚动。 看到这可能对你有帮助 smoothScrollToPositionFromTop() is not always working like it should