Android 动画框架详解
?
图 2:立体翻页效果
?
其中 FlatWorkspace 的基类是 Workspace,它继承自 ViewGroup,是一个容器类,其中包含三个子 View,子 View 是 ImageView。三个 ImageView 就是三个页面。这三个 ImageView 的创建是在 WorkspaceActivity 的 onCreate 函数中调用 Workspace 的 initScreens 函数完成的,代码如下:
清单 2
?为了让三个页面达到上图的窗口布局,我们对 Workspace 的 onMeasure 和 onLayout 函数进行了重载,重点在 onLayout 代码中。onLayout 函数调用 layoutScreens 函数完成布局,FlatWorkspace 中的 layoutScreens 实现如下:
清单 3
?下图为屏幕 1 沿 Y 轴旋转 45 读后其他两个屏幕需要沿 Y 轴旋转的角度。
图 5:旋转 45 度后屏幕位置示意图
这个变换的部分请看代码 CubeWorkspace 中函数 drawScreen 的代码,如下:
清单 7
public void scrollTo(int x, int y) { if (getScrollX() != x || getScrollY() != y) { int oldX = getScrollX(); int oldY = getScrollY(); super.scrollTo(x, y); //x is the touch action X direction move distance currentDegree = x * degreeOffset; onScrollChanged(x, y, oldX, oldY); invalidate(); } } 这个立方体特效部分的代码介绍到这里。