如何强制CollapsingToolbarLayout只有两种状态(展开和折叠)?

3
我希望有一个CollapsingToolbarLayout(位于AppBarLayout内),当用户抬起手指时展开/折叠。当用户在屏幕上按住并移动手指时,CollapsingToolbarLayout应同时改变大小(标准行为)。我的问题是部分内容:“CollapsingToolbarLayout展开/折叠,当用户抬起手指”,我从材料支持库中使用了标准解决方案(在片段内):(我删除了不重要的属性):
<android.support.design.widget.CoordinatorLayout>
    <android.support.design.widget.AppBarLayout
        android:id="@+id/app_bar">
        <android.support.design.widget.CollapsingToolbarLayout
            android:id="@+id/toolbar_layout"
            app:layout_scrollFlags="scroll|exitUntilCollapsed">

            <android.support.v7.widget.Toolbar
                android:id="@+id/toolbar"
                android:layout_height="?attr/actionBarSize"
                app:layout_collapseMode="pin"/>

        </android.support.design.widget.CollapsingToolbarLayout>
    </android.support.design.widget.AppBarLayout>

    <include layout="@layout/content_scrolling" />

</android.support.design.widget.CoordinatorLayout>

我尝试像这样处理 onTouch 事件:

findViewById(R.id.app_bar).setOnTouchListener(new View.OnTouchListener() {

    int counter = 0;
    @Override
    public boolean onTouch(View v, MotionEvent event) {
        switch (event.getActionMasked()) {
            case MotionEvent.ACTION_DOWN:
                counter++;
                Log.d("tag toolbar_layout", "=== ACTION_DOWN "+ counter);
                break;
            case MotionEvent.ACTION_CANCEL:
                counter--;
                Log.d("tag toolbar_layout", " == ACTION_UP " +counter);
                break;
            case MotionEvent.ACTION_CANCEL:
                counter--;
                Log.d("tag toolbar_layout", " == ACTION_CANCEL "+ counter);

            break;
        default:
            Log.d("tag toolbar_layout", "onTouch "+ event.getAction());
        }

        return true;
    }

但我几乎只收到 ACTION_CANCEL,很少收到 ACTION_UP,而且 ACTION_CANCEL 太早了,当应用程序接收到该事件时,我仍然按住屏幕。在 ACTION_CANCEL 之后,应用程序不再接收任何事件。我无法在应用栏上调用 setExpanded(true, true)

所以问题是:是否有另一种方法来获取用户从 CollapsingToolbarLayout 抬起手指的信息?

1个回答

0

如果我正确理解你的问题,你想在用户停止滚动后(用户已经从屏幕上抬起手指),完全展开/折叠CollapsingToolbarLayoutAppBarLayout提供了一个滚动标志来实现这个效果:

public static final int SCROLL_FLAG_SNAP

在滚动结束时,如果视图只有部分可见,则会将其捕捉并滚动到最近的边缘。例如,如果视图只有底部的25%可见,它将完全滚动到屏幕之外。相反,如果底部的75%可见,则会完全滚动进入视图。

[1]http://developer.android.com/reference/android/support/design/widget/AppBarLayout.LayoutParams.html#SCROLL_FLAG_SNAP


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接