动画android Gridview项目

Rah*_*hul 7 animation android android-animation android-gridview

在此输入图像描述

在此输入图像描述

在此输入图像描述

在此输入图像描述

我希望为gridview的项目设置动画,使每个项目集中到视图中心并且一个项目可见,然后网格项目再次移回其原始位置.为清晰起见,我添加了图片.动画流程如图1-图2-图3 - 图4 - 图1.怎么做?

Rah*_*hul 6

我用这种方式解决了这个问题:

A.找到Gridview的总宽度(W)和高度(H).

W = (widthOfEachItem*totalItem) + (spacingBetweenItems*(totalItem-1))
H = (heightOfTheItem*totalItem) + (spacingBetweenItems*(totalItem-1))
Run Code Online (Sandbox Code Playgroud)

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)处的网格项.

    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将为-ve.

    对于超出中心项目的列中的项目,toYDelta将为-ve.

    为了更准确地对齐中心的项目(在动画之后),考虑将每个项目的中心的坐标添加到Gridview的中心并将其扣除.

    将项目从原始位置转换为中心后,如果要将它们转换回原始位置,只需将值设为*Delta -ve.

    这是我为(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" />
Run Code Online (Sandbox Code Playgroud)