Android NestedScrollView stopNestedScroll无法正常工作

时间:2019-02-16 08:22:24

标签: android android-recyclerview android-nestedscrollview

我在NestedScrollView内有2个片段,一个片段包含RecyclerView,另一个片段包含GoogleMap,每个片段的顶部都有一个文本视图作为标题。

长按回收站视图时,我将其高度更改为100%,以全屏视图显示回收站视图。

现在,我想停止滚动RecyclerView片段的标题,但是当Recycler视图到达其最后一项时,它仍在滚动标题。

这是布局:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    tools:context=".MainActivity">

    <com.myapp.common.CustomNestedScrollView
        android:id="@+id/nestedScrollView"
        android:layout_width="match_parent"
        android:layout_height="match_parent">

        <FrameLayout
            android:id="@+id/container"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:animateLayoutChanges="true" />

    </com.myapp.common.CustomNestedScrollView>
</LinearLayout>

它看起来像:

enter image description here

我试图通过使用NestedScrollView扩展CustomNestedScrollView来停止滚动,

class CustomNestedScrollView : NestedScrollView {

    var isEnableScrolling = true

    constructor(context: Context, attrs: AttributeSet, defStyle: Int) : super(context, attrs, defStyle) {}

    constructor(context: Context, attrs: AttributeSet) : super(context, attrs) {}

    constructor(context: Context) : super(context) {}

    override fun onInterceptTouchEvent(ev: MotionEvent): Boolean {
        return if (isEnableScrolling) {
            super.onInterceptTouchEvent(ev)
        } else {
            false
        }
    }

    override fun onTouchEvent(ev: MotionEvent): Boolean {
        return if (isEnableScrolling) {
            super.onTouchEvent(ev)
        } else {
            false
        }
    }
}

并在高度为100%时从活动中设置值,例如:

nestedScrollView.isEnableScrolling = !isFull

还尝试通过停止NestedScrollView的Scroll进行尝试,

if (isFull) {
        nestedScrollView.stopNestedScroll(ViewCompat.TYPE_NON_TOUCH)
    } else {
        nestedScrollView.startNestedScroll(ViewCompat.SCROLL_AXIS_VERTICAL, ViewCompat.TYPE_TOUCH)
    }

预期: enter image description here

0 个答案:

没有答案