【发布时间】:2013-10-27 15:45:53
【问题描述】:
所以我在我的应用程序中使用Sliding Up Panel Library,并尝试在滑动面板内实现ScrollView。由于滑动面板和 ScrollView 都由垂直滚动控制,这给我带来了一些问题。
当面板一直向上滑动并且 ScrollView 滚动到顶部时,我通过切换面板的拖动视图来部分工作。
我现在面临的问题是,当将面板滚动到顶部时,滚动不会像在 Google 地图中那样转移到 ScrollView。 很难解释,请看这里的视频: www.youtube.com/watch?v=9MUsmQzusX8&feature=youtu.be
这是面板幻灯片监听器:
...
slidePanel.setEnableDragViewTouchEvents(true);
slidePanel.setPanelSlideListener(new SlidingUpPanelLayout.PanelSlideListener() {
@Override
public void onPanelSlide(View panel, float slideOffset) {
// Change the dragview to panelheader when panel is fully expanded
// I'm doing this here instead of in onPanelExpanded,
// because onPanelExpanded first gets called once scroll
// is released.
if (slideOffset <= 0) {
slidePanel.setDragView(layoutPanelTop);
}
// If the panel is not fully expanded set the whole
// panel as dragview
else if(slideOffset > 0) {
slidePanel.setDragView(layoutPanel);
}
}
}
@Override
public void onPanelExpanded(View panel) {
// layout.setDragView(layoutPanelTop);
panelCollapsed = false;
panelExpanded = true;
panelAnchored = false;
Log.v("TAG, "panelExpanded");
}
@Override
public void onPanelCollapsed(View panel) {
slidePanel.setDragView(layoutPanel);
panelCollapsed = true;
panelExpanded = false;
panelAnchored = false;
Log.v(TAG, "panelCollapsed");
}
@Override
public void onPanelAnchored(View panel) {
slidePanel.setDragView(layoutPanel);
panelCollapsed = false;
panelExpanded = false;
panelAnchored = true;
Log.v(TAG, "panelAnchored");
}
});
我已经设法通过扩展滚动视图创建了一个完全正常工作的滚动视图侦听器,它可以检测滚动方向以及 onDown 和 onUp 运动事件:
private boolean atScrollViewTop = false;
@Override
public void onScrollChanged(int scrollY) {
scrollY = Math.min(mMaxScrollY, scrollY);
if (scrollY <= 0) {
Log.v("myTag", "You at scrollview top");
atScrollViewTop = true;
} else {
atScrollViewTop = false;
}
mScrollSettleHandler.onScroll(scrollY);
switch (mState) {
case STATE_SCROLL_UP:
if (panelExpanded && atScrollViewTop) {
slidePanel.setDragView(layoutPanel);
} else {
slidePanel.setDragView(layoutPanelTop);
}
Log.v("myTag", "scrolling up");
break;
case STATE_SCROLL_DOWN:
slidePanel.setDragView(layoutPanelTop);
Log.v("myTag", "scrolling down");
break;
}
}
@Override
public void onDownMotionEvent() {
}
@Override
public void onUpOrCancelMotionEvent() {
}
过去两天我一直在努力解决这个问题。所以至少真的希望得到一些指导。首先十分感谢。问候雅各布·哈特格。
【问题讨论】:
-
@Jakob- 实际上我在 SlidingUpPanel 中有 Listview。每个列表视图项上都有一个按钮。我想在单击特定列表视图项的按钮上折叠面板。我认为 setDragView() 是折叠面板的方法。但我不明白如何在我的适配器类中实现?请告诉我我该怎么做。提前致谢。
-
@Lawrence setDragView() 不是折叠的方法。要折叠它,我认为它像 smoothSlideTo(1.0);但不确定。
-
但是我应该在哪里应用 smoothSlideTo() 方法?在按钮的自定义适配器onClickListner中,是真的吗?
-
@Lawrence 你应该调用 slidePanel.smoothSlideTo(1.0f, 500);在您的 onClickListener 中(其中 500 是您的速度)
-
这能回答你的问题吗? SlidingUpPanelLayout and ScrollView