【问题标题】:Can I disable scrolling when touching certain view in Android Kotlin?在 Android Kotlin 中触摸特定视图时可以禁用滚动吗?
【发布时间】:2023-02-10 22:56:08
【问题描述】:

我在片段管理器的滚动视图中插入了一个 TradingView chart。 我无法平滑地滚动图表的 x 轴和 y 轴,因为滚动视图会影响它。 我可以在查看图表视图时禁用滚动页面吗?

【问题讨论】:

    标签: android kotlin scrollview


    【解决方案1】:

    视图本身可以阻止它。像这样的触摸事件通过拦截触摸事件流来工作。触摸子视图时,父视图可以根据需要请求窃取事件流。孩子可以通过调用 requestDisallowInterceptTouchEvent 来阻止它。它需要在触摸开始时(在按下事件上)调用 requestDisallowInterceptTouchEvent(true),在触摸结束时(在向上事件上)调用 requestDisallowInterceptTouchEvent(false)。如果您无法编辑视图本身的代码,请设置一个 onTouchListener 并为其执行此操作。确保侦听器返回 false,以便也调用视图的内置触摸侦听器。

    【讨论】:

      【解决方案2】:

      我将不拦截滚动的地图视图包装到拦截父 NestedScrollView 中的滚动的自定义视图:

      class ScrollLockView @JvmOverloads constructor(
          context: Context,
          attrs: AttributeSet
      ) : FrameLayout(context, attrs) {
          override fun onInterceptTouchEvent(ev: MotionEvent): Boolean {
              requestDisallowInterceptTouchEvent(true)
              return false
          }
      }
      

      XML:

      <my.package.ScrollLockView
                                  android:layout_width="match_parent"
                                  android:layout_height="wrap_content">
      
                                  <VendorViewNeedLockScrollFor />
      
                              </my.package.view.ScrollLockView>
      

      【讨论】:

        猜你喜欢
        • 2012-11-03
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多