gpt4 book ai didi

android - 在另一个 View setVisibility(GONE) 之后将 View 动画到新位置

转载 作者:行者123 更新时间:2023-11-29 22:04:01 25 4
gpt4 key购买 nike

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

下面是一些截图:

动画前:
enter image description here

在动画期间(绘画编辑 ^^): enter image description here

动画后: enter image description here

这是我的布局文件:

<?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>

所以我可以使用下面的代码将最左边的 View 设置为动画:

    final View stationsContainer = findViewById(R.id.stations_stations);
Animation an = AnimationUtils.loadAnimation(this, R.anim.slide_out_left);
stationsContainer.startAnimation(an);
an.setAnimationListener(new AnimationListener() {

@Override
public void onAnimationStart(Animation animation) {
// TODO Auto-generated method stub

}

@Override
public void onAnimationRepeat(Animation animation) {
// TODO Auto-generated method stub

}

@Override
public void onAnimationEnd(Animation animation) {
stationsContainer.setVisibility(View.GONE);
}
});

这会将最左边的 View 设置为离开窗口的动画,并将其设置为消失。我还可以将中间 View 设置为新位置的动画,但是当动画完成后,中间 View 会在很短的时间内跳回其原始位置,之后它会占据正确的位置。我怎样才能避免这种跳跃?

最佳答案

  • 使用 LayoutTransistion当 subview 的可见性在 VISIBLEGONE 之间变化时,类自动为 subview 设置动画。此类从 API 11 开始可用。

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

  • 使用 LayoutAnimationController类在将 View 添加到 View 组和从 View 组中删除时为 View 设置动画。在这里您必须保留对已删除 View 的引用,因为您希望稍后再次添加它。此类适用于所有版本的 Android。

    示例代码路径:ApiDemos\src\com\example\android\apis\view\LayoutAnimation

关于android - 在另一个 View setVisibility(GONE) 之后将 View 动画到新位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11247213/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com