在Android Api11之后,加入了属性动画,参加我的另一篇博文:Android Property Animation 属性动画
也加入了一些View的属性和对应的操作方法:
iv.setTranslationX(100); //api 11 HONEYCOMB iv.setTranslationY(100); //api 11 HONEYCOMB iv.setTranslationZ(100); //api 21 LOLLIPOP iv.setRotationX(10); //api 11 HONEYCOMB 绕X轴旋转 iv.setRotationY(10); //api 11 HONEYCOMB 绕Y轴旋转 iv.setRotation(90); //api 11 HONEYCOMB 绕X、Y轴旋转,实际效果就是2D旋转 iv.setScaleX(1); //api 11 HONEYCOMB iv.setScaleY(-1); //api 11 HONEYCOMB还有对应的get方法
因是属性动画,View的真实位置也会被改变
想不改变位置,那么就要用Animation
一个只有核心的例子:
class Rotate3d extends Animation {
@Override
protected void applyTransformation(float interpolatedTime, Transformation t) {
Camera camera = new Camera();
camera.save();
// 设置camera动作为绕Y轴旋转
// 总共旋转180度,因此计算在每个补间时间点interpolatedTime的角度即为两着相乘
float deg = 60;
camera.rotateX(deg * interpolatedTime);
camera.rotateY(deg * interpolatedTime);
// camera.rotateZ(deg * interpolatedTime);
// 根据camera动作产生一个matrix,赋给Transformation的matrix,以用来设置动画效果
Matrix matrix = t.getMatrix();
camera.getMatrix(matrix);
camera.restore();
//经过以下平移,才能以view的中心点进行翻转
matrix.preTranslate(-iv.getWidth()/2, -iv.getHeight()/2);
matrix.postTranslate(iv.getWidth()/2, iv.getHeight()/2);
}
}
上面主要用了 android.graphics.Camera 配合 Transformation 的 matrix
参考:Android动画 —— 十几行代码的简单3D旋转动画 — — http://blog.sina.com.cn/s/blog_5c4dd33301015314.html