您的位置:首页 > 移动开发 > Android开发

Android对角线旋转动画,重写Animation

2016-04-08 17:15 585 查看
之前我写了一个对角线旋转的动画,但是那个需要继承View重写onDraw,感觉耦合度太高。

最近又看了一下Animation,发现可以不再onDraw里面重写绘制的流程,重写Animation.applyTransformation(float interpolatedTime, Transformation t)在t.getMatrix()获取矩阵来进行变换。优点是降低了耦合,减少了工作量;缺点是不能切割成很多个方块,只能一整个view一起变动。

代码Animation.applyTransformation

matrix3.postRotate(45);//顺时针旋转45度

protected void applyTransformation(float interpolatedTime, Transformation t) {

Matrix matrix = t.getMatrix();
float deg = mFromDegrees+interpolatedTime * mToDegrees;

mCamera.save();
mCamera.rotateX(deg);
mCamera.getMatrix(matrix);
mCamera.restore();

matrix2.postRotate(-45);//逆时针旋转45度
matrix2.setConcat(matrix, matrix2);//图逆时针旋转45度和X轴旋转相加
matrix2.setConcat(matrix3, matrix2);//在之前的基础上图和X轴都顺时针旋转45度

matrix.set(matrix2);
matrix2.reset();

// 通过pre方法设置矩阵作用前的偏移量来改变旋转中心
matrix.preTranslate(-mCenterWidth, -mCenterHeight);// 在旋转之前开始位移动画
matrix.postTranslate(mCenterWidth, mCenterHeight);// 在旋转之后开始位移动画
}
这里我解释一下
matrix2.setConcat(matrix, matrix2);//图逆时针旋转45度和X轴旋转相加
matrix2.setConcat(matrix3, matrix2);//在之前的基础上图和X轴都顺时针旋转45度


这两个的作用刚开始是图形如图



matrix2.setConcat(matrix, matrix2);//图逆时针旋转45度和X轴旋转相加
加上这步以后图就变成这样





这时还是沿着X轴翻转,只不过图逆时针旋转45度

然后这时在加上顺时针旋转45度

matrix2.setConcat(matrix3, matrix2);//在之前的基础上图和X轴都顺时针旋转45度


变成了





然后就变成了对角线旋转了,这里我们主要用到的是矩阵Matrix来进行变换。

然后调用view.startAnimation就可以了。

完整源码github
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息