【问题标题】:How to push a view outside the activity on Android?如何在 Android 上将视图推送到活动之外?
【发布时间】:2018-05-22 18:17:02
【问题描述】:

我有一个 RelativeLayout,其中包含 2 个视图,一个 LinearLayout 和一个 RecyclerView。这就是我的.XML 文件的样子:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="wrap_content">

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:id="@+id/linear_layout"
        android:orientation="horizontal">

        //A few image views
    </LinearLayout>

    <android.support.v7.widget.RecyclerView
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:id="@+id/recycler_view"
        android:layout_below="@+id/linear_layout"/>
</RelativeLayout>

我想要实现的是在滚动RecyclerView 时将LinearLayout 从我的活动中移除,为此我使用以下代码:

RecyclerView.OnScrollListener onScrollListener = new RecyclerView.OnScrollListener() {
    private int scrollDistance = 0;
    private boolean isVisible = true;
    private static final float MINIMUM = 50;

    @Override
    public void onScrolled(RecyclerView recyclerView, int dx, int dy) {
        super.onScrolled(recyclerView, dx, dy);

        if (isVisible && scrollDistance > MINIMUM) {
            linearLayout.animate().translationY(-linearLayout.getHeight() - 12); //Hide
            scrollDistance = 0;
            isVisible = false;
        } else if (!isVisible && scrollDistance < -MINIMUM) {
            linearLayout.animate().translationY(0); //Show
            scrollDistance = 0;
            isVisible = true;
        }

        if ((isVisible && dy > 0) || (!isVisible && dy < 0)) {
            scrollDistance += dy;
        }
    }
};
recyclerView.addOnScrollListener(onScrollListener);

但我实现了只取出LinearLayout 的内容。我还尝试添加一个侦听器,以便在动画停止时将linearLayout 对象的可见性设置为GONE,但RecyclerView 将落入LinearLayout 的位置。

我怎样才能顺利地将LinearLayout 移出屏幕?

【问题讨论】:

    标签: android android-layout android-recyclerview android-linearlayout android-relativelayout


    【解决方案1】:

    有两种方法可以实现。

    1. 将线性布局推入 CollapsabletoolbarLayout https://www.journaldev.com/13927/android-collapsingtoolbarlayout-example

    2. 在 RecyclerAdapter 中使用 viewtype 属性并将 LinearLayout 转换为回收器视图的 HEADER。 https://inducesmile.com/android/add-header-to-android-recyclerview/

    您可以找到上述示例。

    【讨论】:

    • 感谢您的回答。我怎样才能达到 1.?
    • 但我不想使用CollapsabletoolbarLayout,我只想在屏幕上显示Linearlayout
    • 如果你不想这样,你只需让它可见性消失
    • 我做了,但是在动画完成后,RecyclerViewLinearLayout 的地方失败了,这让这看起来很糟糕。我该如何解决这个问题?
    猜你喜欢
    • 1970-01-01
    • 2021-04-05
    • 1970-01-01
    • 1970-01-01
    • 2016-01-02
    • 1970-01-01
    • 2018-04-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多