4

我如何在android中实现这个动画,下面是我试图修改它的链接,但没有像下图这样的输出。

在此处输入图像描述

http://horribile.blogspot.in/2011/11/android-3d-carousel.html

https://github.com/rameshkec85/Android-VerticalCarousel

我修改了下面的垂直动画功能,如下所示。

private void Calculate3DPosition(CarouselItem child, int diameter,
            float angleOffset) {

    angleOffset = angleOffset * (float) (Math.PI / 180.0f);
    float x = 0.0f;
    float y = (float) (diameter / 2 * Math.sin(angleOffset)) + diameter / 2 - child.getWidth() / 2;
    float z = diameter / 2 * (1.0f - (float) Math.cos(angleOffset));                 

    child.setItemX(x);
    child.setItemZ(z);
    child.setItemY(y);
    }

结果,当我实施此操作时,动画无法正常工作,并且图像也无法正确显示在中心。

有没有人正确地实现了这个动画,请发给我。

提前致谢。

4

2 回答 2

6

我已经实现了这个动画。

以下是最受欢迎的水平轮播动画链接。

Androd 3d 旋转木马动画

现在,这里是从上面的动画实现垂直轮播动画的变化。

轮播.java

  1. onFling : 将velocityX更改为velocityY

  2. onScroll :改变 trackMotionScroll(/* -1 * / (int) distanceX); to trackMotionScroll(/ -1 * */ (int) distanceY);

  3. scrollIntoSlots :将“if (angle != 0.0f)”更改为“if (Math.abs(angle) > 4)”

  4. 计算3D位置:

    angleOffset = angleOffset * (float) (Math.PI / 180.0f);

        float x = (screenWidth - child.getWidth())/2;       
        float y = (float) (diameter / 2 * Math.sin(angleOffset)) + diameter / 2 - child.getWidth() / 2;
        float z = diameter*2 * (1.0f - (float) Math.cos(angleOffset));
    
        child.setItemX(x);
        child.setItemZ(z);
        child.setItemY(y-(screenHeight - child.getHeight())/2);
    

享受轮播动画。

于 2013-10-14T06:26:08.977 回答
2

首先,尝试设置:

float x = child.getWidth() / 2;

那应该解决图像不居中的问题。y & z 看起来不错,但也许尝试更改 y 位置以考虑视图的高度而不是宽度?:

float y = (float) (diameter / 2 * Math.sin(angleOffset)) + diameter / 2 - child.getHeight() / 2;

不确定这是否可行,因为我没有设置项目,但我希望它至少能让你更接近:)

祝你好运!

于 2013-09-24T12:22:56.037 回答