滚动条中startScroll背后的逻辑?

时间:2017-07-09 09:22:39

标签: android scrollview android-view android-scrollview

我不会在documentation中了解startScroll()

它说:

  

正数会将内容滚动到左侧。

我不明白。如果0总是在左侧,为什么向左滚动?如果是否定的,它将滚动到右侧。

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

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

我只是问为什么我真的好奇为什么设计它这样。

5 个答案:

答案 0 :(得分:5)

为了说明发生了什么,请参见图纸:

  • 顶部的图显示了坐标系:(0,0)位于左上角,正方向是右(x坐标)和下(y坐标)。
  • 下图显示了当“视口”移动时显示的滚动效果。
  • 左侧是调用滚动
  • 之前的位置
  • 右边是调用滚动x = + 2,y = + 3
  • 后的位置
  • 浅蓝色矩形是屏幕“视口”:滚动方法实际上是移动这个矩形(屏幕的表示),而不是内容。看它就像你在世界上看到的相机一样。
  • 红点只是位于视图上的元素,并且不会移动。把它看作你所看到的世界。

您可以看到,在正x和y方向上移动“视口”会导致红点显示向上和向左移动。就像你向右移动一个摄像头一样,会让视频中的世界向左移动。

enter image description here

答案 1 :(得分:3)

You are in fact scrolling the view to right, which result the content view to be scrolled to left.

Having |A|B|C|, now scrolling by positive value will result a scroll to right, which scroll the actual content to left: |B|C| - A is not visible anymore, because it is considered as a content and is scrolled to left.

答案 2 :(得分:1)

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

的文档
  

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

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

  

正数会将内容滚动到左侧。

不仅startScroll()View.scrollBy()View.scrollTo()等其他方法也有同样的想法。

如果你问的是哪个更自然的想象力,相应的内容或窗口各自?",我会说"我不知道"。

答案 3 :(得分:1)

您的容器视图已在您的屏幕上修复。当您向右滚动时,正确的项目会向左流动。因此,当你做

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

使您的内容向左滚动。

答案 4 :(得分:1)

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