【问题标题】:Logic behind startScroll in scroller?滚动条中 startScroll 背后的逻辑?
【发布时间】:2017-12-13 04:11:10
【问题描述】:

在这个documentation 中我不明白startScroll() 的概念。

上面写着:

正数会将内容向左滚动。

我不明白。如果 0 总是在左边,为什么要向左滚动?如果为负,它将向右滚动。

但是为什么呢?我的头很难缠住它。其背后的逻辑是什么?为什么要积极向左移动?

在游戏和图形编程中,0 将始终位于左上角或左下角,但始终位于左侧。所以用正数向右移动,用负数向左移动是有意义的。但是为什么在 startScroll 上不一样呢?

我只是在问,因为我真的很想知道为什么要这样设计。

【问题讨论】:

  • 您能接受答案吗?

标签: android scrollview android-view android-scrollview


【解决方案1】:

实际上,您正在向右滚动视图,这导致内容视图向左滚动。

拥有|A|B|C|,现在按正值滚动将导致向右滚动,将实际内容向左滚动:|B|C| - A 不再可见,因为它被视为内容并被滚动向左。

【讨论】:

    【解决方案2】:

    我们可以用两种不同的方式来想象卷轴。一是窗口在移动,二是内容在移动。根据getScrollX()的Android文档

    返回此视图的滚动左侧位置。这是视图显示部分的左边缘。您不需要在更左侧绘制任何像素,因为它们位于屏幕上视图的框架之外。

    很明显,Android 更喜欢内容相应的滚动而不是窗口相应的滚动。在内容中各自滚动

    正数会将内容向左滚动。

    不仅startScroll()View.scrollBy()View.scrollTo() 等其他方法都采用相同的思路。

    如果你问“哪个更自然的想象,内容各自还是窗口各自?”,我会说“我不知道”。

    【讨论】:

      【解决方案3】:

      为了说明发生了什么,请看图:

      • 上图显示坐标系:(0,0) 位于左上角,正方向为右(x 坐标)和下(y 坐标)。
      • 底部插图显示了“视口”移动时的滚动效果。
      • 左边是调用滚动前的位置
      • 右边是调用滚动后的位置 x=+2, y=+3
      • 浅蓝色矩形是屏幕“视口”:滚动方法实际上是移动这个矩形(屏幕的表示),而不是内容。将其视为您通过相机观察世界的相机。
      • 红点只是视图上的一个元素,它并没有移动。以你所看的世界来看待它。

      您可以看到,在正 x 和 y 方向上移动“视口”会导致红点上的结果似乎是向上和向左移动。就像您将相机向右移动会使视频中的世界向左移动一样。

      【讨论】:

      • 这比我的解释要好得多,先生。
      【解决方案4】:

      您的容器视图固定在您的屏幕上。当您向右滚动时,右侧的项目会继续向左流动。因此,当你这样做时

      scroller.startScroll (int 2 /*startX */, 
                      int startY, 
                      int dx, 
                      int dy, 
                      int duration); 
      

      使您的内容向左滚动。

      【讨论】:

        【解决方案5】:

        Scroller实际上是水平或垂直的侧边栏,当有滚动手势时出现。考虑滚动条的移动并观察它在应用程序中的行为。你会明白为什么它是这样实施的。您当前正在考虑触摸位置,导致混乱。

        【讨论】:

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