Android,绕圆轴滚动点

时间:2018-07-19 15:50:09

标签: java android trigonometry

我会尽力解释我遇到的问题。

我有商品的列表视图。

只要运行scrollHorizontally,就会触发以下功能。

功能setChildOffsets

private void setChildOffsets(@Dimension int radius, Point center, int peekDistance) {
        for (int i = 0; i < getChildCount(); i++) {
            View child = getChildAt(i);
            final int yOffset = (int) resolveOffsetY(radius, child.getX() + child.getWidth() / 2, center, i);
            final int y = getHeight() - yOffset - child.getHeight();
            child.layout(child.getLeft(), y, child.getRight(), child.getHeight() + y);
        }
    }

如您所见,该功能正在浏览屏幕上可见列表的每个项目。然后设置y偏移。我怀疑这就是问题所在。 请参见下面的resolveOffsetY函数:

功能resolveOffsetY

private double resolveOffsetY(double radius, double viewX, Point center, int child) {
        final double adjacent = Math.abs(center.x - viewX);
        final double radiusSquared = radius * radius;
        final double adjacentSquared = adjacent * adjacent;
        final double oppositeSideLength = Math.sqrt(radiusSquared - adjacentSquared);
        return oppositeSideLength;
    }

此函数基本上检索每个项目应位于的Y距离。从数学上讲,我们使用毕达哥拉斯(Pythagora),并使用斜边(radiusSquared)和相邻的(adjacentSquared)来找到相反的一面,即该项的“高度”。

回到setChildOffsets,一旦确定了项目应达到的高度,便通过从布局高度中减去所得到的值来计算其在显示中的实际高度。

最后,我们在布局中设置子项。

问题是项目之间的角度不相等,并且会产生不想要的效果,您可以看到左右两个项目与其他项目相比,它们与邻居之间的距离更远。红色圆圈是项目旋转的中心。 https://imgur.com/a/6Xtp19c

我数学不好,但是我敢肯定,有一种方法可以使这些项目围绕圆以均匀的圆形方式运动,以使项目之间保持相等的角度。

我将不胜感激。

谢谢!

0 个答案:

没有答案