java - Transfer scroll event from sliding view to ScrollView - Sliding panel with ScrollView 像谷歌地图

标签 java android slideup

所以我正在使用 Sliding Up Panel Library在我的应用程序中,我正在尝试在滑动面板内实现 ScrollView。由于滑动面板和 ScrollView 都是由垂直滚动条控制的,这给我带来了一些问题。

一旦面板一直向上滑动,并且当 ScrollView 滚动到顶部时,我已经通过切换面板的拖动 View 部分地使其工作。

enter image description here

我现在面临的问题是,当将面板滚动到顶部时,滚动不会像在 Google map 中那样转移到 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");
    }
});

而且我已经通过扩展 scrollview 成功地创建了一个完全可用的 scrollview 监听器,它可以检测滚动方向以及 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() {

}

过去两天我一直在为此苦苦挣扎..所以真的希望至少能得到一些指导。首先十分感谢。问候雅各布·哈特格。

最佳答案

抱歉延迟..我找到了解决方案。

image = (ImageView) findViewById(R.id.image); //Layout to slide  

SlidingUpPanelLayout layout = (SlidingUpPanelLayout)
findViewById(R.id.sliding_layout); 

layout.setDragView(image); 
/*This method sets the layout to be used only
 in the sliding panel, while all layouts children
 are able to perform other functions such as scrolling */  

这是布局

<..SlidingUpPanelLayout
    android:id="@+id/sliding_layout"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical"
        android:gravity="center" />

        <LinearLayout
            android:id="@+id/slide_view"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:orientation="vertical">

            <ImageView 
                android:id="@+id/image"
                android:layout_width="match_parent"
                android:layout_height="35dp"
                android:background="@drawable/ec_image"/>

            <!-- FINALLY SCROLLVIEW -->
            <ScrollView .... />

希望有用。

关于java - Transfer scroll event from sliding view to ScrollView - Sliding panel with ScrollView 像谷歌地图,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19619964/

相关文章:

java - Spring Boot资源服务器使用HTTP POST而不是HTTP GET验证 token

Android Tab 文本颜色

Android:配置更改未更新

jquery - 使用slideup时如何防止网页滚动回顶部?

jQuery:slideUp()延迟()然后slideDown;不工作

jquery - 如何在 JQuery 中向上滑动(隐藏)子 div?

java - centos上liquibase安装,JNI报错

java - Spring AOP 和 Spring Boot - 创建代理但未执行建议

java - 在 Java (Android) 中连接具有多个值的字符串

android - 在 Android 中处理 SQLite 单例实例及其上下文依赖