Android 在另一个视图设置可见性(消失)后,将视图设置为新位置的动画

Android 在另一个视图设置可见性(消失)后,将视图设置为新位置的动画,android,android-animation,Android,Android Animation,我想在布局中显示3个视图,但一次只显示2个。当我按下按钮时,我希望最左边的视图向左滑动,中间的视图随之滑动,占据左视图的起始空间,最右边的视图应滑入屏幕 以下是一些屏幕截图: 动画之前: 动画期间(绘制编辑^^^): 动画之后: 这是我的布局文件: <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"

我想在布局中显示3个
视图
,但一次只显示2个。当我按下按钮时,我希望最左边的视图向左滑动,中间的视图随之滑动,占据左视图的起始空间,最右边的视图应滑入屏幕

以下是一些屏幕截图:

动画之前:

动画期间(绘制编辑^^^):

动画之后:

这是我的布局文件:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:ads="http://schemas.android.com/apk/lib/com.google.ads"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="horizontal"
    android:weightSum="3" >

    <FrameLayout
        android:id="@+id/stations_stations"
        android:layout_width="0dp"
        android:layout_height="match_parent"
        android:layout_margin="20dp"
        android:layout_weight="1"
        android:background="@drawable/fragment_border" />

    <FrameLayout
        android:id="@+id/stations_singlestation"
        android:layout_width="0dp"
        android:layout_height="match_parent"
        android:layout_margin="20dp"
        android:layout_weight="2"
        android:background="@drawable/fragment_border" />

    <FrameLayout
        android:id="@+id/stations_trip"
        android:layout_width="0dp"
        android:layout_height="match_parent"
        android:layout_margin="20dp"
        android:layout_weight="1"
        android:background="@drawable/fragment_border"
        android:visibility="gone" />

</LinearLayout>

这将设置窗口左侧最左侧视图的动画,并将其设置为“消失”。我还可以将中间视图设置为新位置的动画,但是当动画完成后,中间视图会在很短的时间内跳回到其原始位置,然后它会选择正确的位置。如何避免这种跳跃?

使用
动画
滑入滑出。您需要在资源中将动画定义为xml

或者您可以使用
ViewFlipper


SO和web上还有很多示例。

将框架布局添加到ViewFlipper中。e、 g

<ViewFlipper>
 <FrameLayout1/>
 <FrameLayout2/>
 <FrameLayout3/>
</ViewFlipper>

然后在代码中,对viewFlipper调用setInAnimation(leftInAnim)和setOutAnimation(leftOutAnim),并调用showNext(),这将使动画应用于当前视图和下一个视图

leftInAnim和leftOutAnim是一个XML动画资源,告诉系统如何为当前视图制作动画:例如

<set xmlns:android="http://schemas.android.com/apk/res/android">
    <translate android:fromXDelta="-100%p" android:toXDelta="0"
        android:duration="@android:integer/config_mediumAnimTime"/>
</set>

这将导致视图从右侧(视图外)滑入当前视图

  • 当子视图的可见性在
    可见
    消失
    之间变化时,使用该类自动设置子视图的动画。该类可从API 11开始获得

    对于示例代码,请查看sdk附带的示例。确切路径是
    ApiDemos\src\com\example\android\api\animation\LayoutAnimationsHideShow.java

  • 将视图添加到视图组或从视图组中删除视图时,使用类设置视图动画。在这里,您必须保留对已删除视图的引用,因为您希望稍后再次添加它。该类在所有版本的Android中都可用

    示例代码路径:
    ApiDemos\src\com\example\android\api\view\layoutimation


只需将android:animateLayoutChanges=true添加到保存所有视图的
LinearLayout
中,您将获得所需的结果

我认为您可以使用LinearLayout,然后按下按钮将第一个视图的可见性设置为View.Goe。然后,当您想要回它时,可以将其设置回View.VISIBLE。不知道,动画是如何工作的。这确实是我现在拥有的,但这不是一个很好的景象。试着玩一下,因为你没有实际显示导致问题的代码,任何人都很难真正帮助你。但是我可以同时显示两个视图吗?现在视图只显示它们自己。我已经编辑了我的问题。我认为
ViewFlipper
并不是我所需要的。我正在使用
LayoutTransition
类,您唯一要做的就是
setLayoutTransition(newlayouttransition())
。谢谢
<set xmlns:android="http://schemas.android.com/apk/res/android">
    <translate android:fromXDelta="-100%p" android:toXDelta="0"
        android:duration="@android:integer/config_mediumAnimTime"/>
</set>