そのため、アプリケーションで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 モーション イベントを検出できる scrollview を拡張することで、完全に機能する scrollview リスナーを作成することができました。
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() {
}
私は過去2日間これに苦労してきました..だから、少なくともいくつかの指針を本当に望んでいます。よろしくお願いします。よろしくヤコブ・ハーテグ。