android - 将上面的 View 向上推,同时将另一个 View 向上滑动动画

标签 android android-layout android-animation

我的布局中有以下 View

<RelativeLayout
    android:id="@+id/wrapper"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_alignParentBottom="true">

    <LinearLayout
        android:id="@+id/header"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_alignParentTop="true">

        <!-- some child views here -->

    </LinearLayout>

    <LinearLayout
        android:id="@+id/footer"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_below="@+id/header"
        android:visibility="gone">

        <!-- some other child views here -->

    </LinearLayout>    

</RelativeLayout>

包装器RelativeLayout与其父级的底部对齐。并且初始页脚 View 不显示(View.GONE)。当点击标题 View 时,应向用户显示页脚,并从屏幕底部向上滑动动画,当用户再次点击时,页脚应向下滑动到底部。当我在页脚 View 上启动向上滑动动画时,它不会与动画同时插入标题 View 。如果我首先将页脚 View 可见性设置为 View.INVISIBLE 然后启动动画,则页眉 View 会立即向上推(不与动画或页脚 View 一起),并且页脚 View 带有动画。

这是调用动画的代码

footer.setVisibility(View.INVISIBLE);

Animation animation = AnimationUtils.loadAnimation(activity, R.anim.slide_up_from_bottom);
animation.setDuration(animDuration);
footer.startAnimation(animation);
footer.postDelayed(new Runnable() {
    @Override
    public void run()
    {
        footer.setVisibility(View.VISIBLE);
    }
}, animDuration);

这是动画文件内容:

如何使此动画插入页眉 View ,同时页脚 View 向上滑动?

希望我说清楚了。我想要的只是两个 View 一起向上/向下移动。

如果我将动画应用于包装 View ,那么它会从底部向上滑动(而不是从当前位置)。

最佳答案

如果您希望页眉与页脚动画一起插入,您可以手动执行以下操作

public class MainActivity extends Activity {

private LinearLayout header,footer;
private RelativeLayout wrapper;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    header = (LinearLayout) findViewById(R.id.header);
    footer = (LinearLayout) findViewById(R.id.footer);
    wrapper = (RelativeLayout) findViewById(R.id.wrapper);

    header.setOnClickListener(new View.OnClickListener() {          
        @Override
        public void onClick(View v) {

            if(footer.getVisibility() == View.VISIBLE){             
                int footerHeight = footer.getMeasuredHeight();
                float initialWrapperY = wrapper.getY();                 
                ObjectAnimator oa=ObjectAnimator.ofFloat(wrapper, "y", initialWrapperY,initialWrapperY+footerHeight);
                oa.setDuration(400);
                oa.start();
                oa.addListener(new AnimatorListenerAdapter() {
                    public void onAnimationEnd(android.animation.Animator animation) {
                        footer.setVisibility(View.INVISIBLE);
                    };
                });
            }
            else{                   
                final float initialWrapperY = wrapper.getY();           
                footer.setVisibility(View.VISIBLE);
                wrapper.setY(initialWrapperY);
                ViewTreeObserver vto=wrapper.getViewTreeObserver();
                vto.addOnPreDrawListener(new ViewTreeObserver.OnPreDrawListener() {                     
                    @Override
                    public boolean onPreDraw() {
                        wrapper.getViewTreeObserver().removeOnPreDrawListener(this);
                        final int footerHeight = footer.getMeasuredHeight();                            
                        ObjectAnimator oa=ObjectAnimator.ofFloat(wrapper, "y", initialWrapperY,(initialWrapperY-footerHeight));
                        oa.setDuration(400);
                        oa.start();
                        return true;
                    }
                });
            }               
        }
    });
}


}

关于android - 将上面的 View 向上推,同时将另一个 View 向上滑动动画,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32088351/

相关文章:

android - 如何使 SearchView 始终在 android 中展开?

android - 如何折叠 AppBarLayout 的内容而不是工具栏

Android - 如何使按钮文本闪烁/闪烁?

java - 无法暂停 Activity 。 NPE

android - 如何检测在库上暂停的 android 应用程序?

android - 无法使用 JSON 数据填充布局

View可见性和不可见性的Android动画

android - 访问由服务启动的线程

android - 注册 2 个 Activity 以接收图像,从 Google 相册应用共享时不起作用

android - 如何在 findNavController().navigate() 中发送带方向的导航器附加功能