在Android中如何实现GridView项的动画效果

7
我想要对GridView中的项目进行动画处理,使得每个项目都能够集中到视图的中心并且只有一个项目是可见的,然后再将所有网格项目移回原位置。我已经添加了图片以便更加清晰地说明。整个动画播放的流程为:Fig 1- Fig 2- Fig 3 - Fig 4 - Fig 1。如何实现这一效果?

我也在尝试达到同样的目标。你已经找到解决方案了吗?如果是,请与我们分享。 - Manish Kumar
检查答案..... @ManishKumar - Rahul
1个回答

6
我用以下方法解决了这个问题:
A. 找到GridView的总宽度(W)和高度(H)。
W = (widthOfEachItem*totalItem) + (spacingBetweenItems*(totalItem-1))
H = (heightOfTheItem*totalItem) + (spacingBetweenItems*(totalItem-1))

B. 查找GridView的中心点(Cx,Cy); Cx = 宽度/2, Cy= 高度/2。对于每一行中的每个项目,x坐标(Cx)都会改变。对于每个列中的每个项目,y坐标(Cy)都会改变。

C.

  1. 对于矩阵中位置为(0,0)的gridItem。

    找到平移百分比

    x% = (Cx/W)*100,y% = (Cy/W)*100

    将项目从XDelta=0平移至XDelta=x%p,从YDelta=0平移至YDelta=y%p

  2. 对于矩阵中位置为(0,1)的gridItem。 GridView中心的x坐标对于此项更接近,因此我们必须减去(widthOfEachItem+spacingBetweenItems)。

    Cx现在为 Cx - (widthOfEachItem+spacingBetweenItems)

    在这种情况下,只有x坐标会改变。y坐标将保持不变。

    找到平移百分比:

    x% = (Cx/W)*100,y% = (Cy/W)*100

    将项目从XDelta=0平移至XDelta=x%p,从YDelta=0平移至YDelta=y%p

  3. 对于矩阵中位置为(1,0)的gridItem。

    GridView的y坐标中心对于此项更接近,因此我们必须减去(heightOfTheItem+spacingBetweenItems)。

    Cy现在为 Cy - (heightOfTheItem+spacingBetweenItems)

    在这种情况下,只有y坐标会改变。x坐标将保持与(0,0)处项目相同。

    找到平移百分比 -

    x% = (Cx/W)*100,y% = (Cy/W)*100

    将项目从XDelta=0平移至XDelta=x%p,从YDelta=0平移至YDelta=y%p

  4. 对于矩阵中位置为(1,1)的grid-item。

    GridView的x坐标中心对于此项更接近,因此我们必须减去(widthOfEachItem+spacingBetweenItems)。

    Cx现在为 Cx - (widthOfEachItem+spacingBetweenItems)

    GridView的y坐标中心对于此项更接近,因此我们必须减去(heightOfTheItem+spacingBetweenItems)。

    Cy现在为 Cy - (heightOfTheItem+spacingBetweenItems)

    在这种情况下,x和y坐标都会改变。

    找到平移百分比 -

    x% = (Cx/W)*100,y% = (Cy/W)*100;

    将项目从XDelta=0平移至XDelta=x%p,从YDelta=0平移至YDelta=y%p

    以此类推,计算出GridView中所有项目的x%和y%值。

    对于行超出中心项的项目,toXDelta将为负数。

    对于列超出中心项的项目,toYDelta将为负数。

    要更精确地对齐中心项目(动画后),请考虑向GridView的中心添加和扣除每个项目的中心坐标。

    将项目从原始位置平移至中心后,如果要将它们平移回其原始位置,只需使to*Delta的值成为负数。

    这是我对(0,0)处GridView项目所做的:

<translate
            android:duration="600"
            android:fromXDelta="0%p"
            android:fromYDelta="0%p"
            android:toXDelta="-7.8%p"
            android:toYDelta="33.40%p" />
        <translate
            android:duration="600"
            android:fromXDelta="0%p"
            android:fromYDelta="0%p"
            android:startOffset="1050"
            android:toXDelta="7.8%p"
            android:toYDelta="-33.40%p" />


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接