我希望有一个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
抬起手指的信息?