所以我在我的应用程序中使用Sliding Up Panel Library,我试图在滑动面板中实现ScrollView
。由于滑动面板和ScrollView都是由垂直滚动控制的,所以这导致了一些问题。从滑动视图到滚动视图的滚动事件 - 滑动面板与滚动视图像谷歌地图
我已经部分地通过切换面板的dragview,一旦面板一直向上滑动,并且当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 Harteg。
Jakob - 你有没有运气让这个工作?任何建议将不胜感激! – Kyle
@凯尔不,我很遗憾没有。花数小时努力尝试,但从来没有进一步超过视频显示..所以我最终重新设计了我的布局。 – Jakob
@ Jakob-实际上我在SlidingUpPanel中有Listview。每个listview项目上都有一个按钮。我想在按钮上点击关闭列表视图项目来折叠面板。我认为setDragView()是折叠面板的方法。但我不明白我如何在我的适配器类中实现?请告诉我,我该怎么做。提前致谢。 – Lawrance