如何在Android下拉菜单/布局上通过手势实现展开/折叠?

时间:2019-07-13 12:49:55

标签: android android-layout animation

我想实现一个功能,通过向下滑动手指来扩展下拉菜单或窗口,然后通过像在this上那样在Android布局上释放或向上滑动手指来折叠它。

我不知道该怎么做。我搜索了很多平台,例如堆栈溢出,谷歌,GitHub等。但是不幸的是,我什至没有找到一个示例或一段代码。如果有人对此有任何想法,请向我推荐任何材料或有用的链接。

非常感谢!

3 个答案:

答案 0 :(得分:0)

听起来像您在寻找Collapsing Toolbars

这将为您提供所需的外观-向下滚动时,布局的顶部将扩展,而向上滚动时,布局的顶部将变为最小。

现在,您知道您需要实现什么,您可以找到许多关于thisthis from the material design等主题的指南。

答案 1 :(得分:0)

我认为您想要的是Bottom Sheet view 您可以找到herehere

实施的其他教程

答案 2 :(得分:0)

您可以使用动画从上到下显示隐藏视图。下面是一些示例代码:

<RelativeLayout
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <ImageView
        android:id="@+id/menu_img"
        android:layout_width="@dimen/_30sdp"
        android:layout_height="@dimen/_30sdp"
        android:layout_alignParentTop="true"
        android:layout_margin="@dimen/_10sdp"
        android:tint="@color/blackColor"
        app:srcCompat="@drawable/ic_menu_black_24dp" />



    <View
        android:id="@+id/hiddenView"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:background="@color/black_translucent"
        android:visibility="gone" />

    <include
        android:id="@+id/slider"
        layout="@layout/slider_menu"
        android:layout_width="match_parent"
        android:layout_height="200dp"
        android:layout_below="@+id/menu_img"
        android:visibility="gone" />
</RelativeLayout>

slider_menu是您要在滑块中显示的自己的布局 下面是Java代码:

hiddenView = view.findViewById(R.id.hiddenView);
ImageView menuIcon = view.findViewById(R.id.menu_img);
menuIcon.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
                topToBottomAnimation(slider);

            }
        });


    hiddenView.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            hideViewAnimation(slider);
        }
    });
     public void hideViewAnimation(View view) {
        Animation hideView = AnimationUtils.loadAnimation(mContext, R.anim.swipe_up);
        view.startAnimation(hideView);
        view.setVisibility(View.GONE);
        hiddenView.setVisibility(View.GONE);
       }



     public void topToBottomAnimation(View view) {
            Animation showView = AnimationUtils.loadAnimation(mContext, R.anim.swipe_down);
            view.startAnimation(showView);
            view.setVisibility(View.VISIBLE);
            hiddenView.setVisibility(View.VISIBLE);
        }

此处swipe_down和swipe_up是动画文件夹中的xml文件:

滑动:

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

向下滑动:

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