【android】用camera实现view的伪3D的效果
2011-04-26 09:02
701 查看
使用Camera实现3D变换效果[/b]
最后来简单介绍下android提供的android.graphics.Camera类,通过该类可以在2D条件下实现3D动画效果,该类可以看做一个视图显示的3D空间,然后可以在里面做各种操作。把上面的ViewAnimation修改为如下实现可以具体看看Camera的功能:
class ViewAnimation extends Animation {
int mCenterX;//记录View的中间坐标
int mCenterY;
Camera camera = new Camera();
public ViewAnimation() {
}
@Override
public void initialize(int width, int height, int parentWidth,
int parentHeight) {
super.initialize(width, height, parentWidth, parentHeight);
//初始化中间坐标值
mCenterX = width/2;
mCenterY = height/2;
setDuration(2500);
setFillAfter(true);
setInterpolator(new LinearInterpolator());
}
@Override
protected void applyTransformation(float interpolatedTime,
Transformation t) {
// final Matrix matrix = t.getMatrix();
// matrix.setScale(interpolatedTime, interpolatedTime);
// //通过坐标变换,把参考点(0,0)移动到View中间
// matrix.preTranslate(-mCenterX, -mCenterY);
// //动画完成后再移回来
// matrix.postTranslate(mCenterX, mCenterY);
final Matrix matrix = t.getMatrix();
camera.save();
camera.translate(0.0f, 0.0f, (1300 - 1300.0f * interpolatedTime));
camera.rotateY(360 * interpolatedTime);
camera.getMatrix(matrix);
matrix.preTranslate(-mCenterX, -mCenterY);
matrix.postTranslate(mCenterX, mCenterY);
camera.restore();
}
}
camera.translate(0.0f, 0.0f, (1300 - 1300.0f * interpolatedTime))在第一次调用的时候interpolatedTime值为0,相当于把ImageView在Z轴后移1300像素,然后逐步的往前移动到0,同时camera.rotateY(360 * interpolatedTime)函数又把ImageView沿Y轴翻转360度,最终效果如下:
下图是中移动的Ophone的截图,当然,同样兼容android,
![](http://img2.gamfe.com/userfiles/12625/photo/show_20101013142130480.jpg)
![](http://img2.gamfe.com/userfiles/12625/photo/show_20101013142157125.jpg)
![](http://img2.gamfe.com/userfiles/12625/photo/show_20101013142228791.jpg)
![](http://img2.gamfe.com/userfiles/12625/photo/show_20101013142257421.jpg)
最后来简单介绍下android提供的android.graphics.Camera类,通过该类可以在2D条件下实现3D动画效果,该类可以看做一个视图显示的3D空间,然后可以在里面做各种操作。把上面的ViewAnimation修改为如下实现可以具体看看Camera的功能:
class ViewAnimation extends Animation {
int mCenterX;//记录View的中间坐标
int mCenterY;
Camera camera = new Camera();
public ViewAnimation() {
}
@Override
public void initialize(int width, int height, int parentWidth,
int parentHeight) {
super.initialize(width, height, parentWidth, parentHeight);
//初始化中间坐标值
mCenterX = width/2;
mCenterY = height/2;
setDuration(2500);
setFillAfter(true);
setInterpolator(new LinearInterpolator());
}
@Override
protected void applyTransformation(float interpolatedTime,
Transformation t) {
// final Matrix matrix = t.getMatrix();
// matrix.setScale(interpolatedTime, interpolatedTime);
// //通过坐标变换,把参考点(0,0)移动到View中间
// matrix.preTranslate(-mCenterX, -mCenterY);
// //动画完成后再移回来
// matrix.postTranslate(mCenterX, mCenterY);
final Matrix matrix = t.getMatrix();
camera.save();
camera.translate(0.0f, 0.0f, (1300 - 1300.0f * interpolatedTime));
camera.rotateY(360 * interpolatedTime);
camera.getMatrix(matrix);
matrix.preTranslate(-mCenterX, -mCenterY);
matrix.postTranslate(mCenterX, mCenterY);
camera.restore();
}
}
camera.translate(0.0f, 0.0f, (1300 - 1300.0f * interpolatedTime))在第一次调用的时候interpolatedTime值为0,相当于把ImageView在Z轴后移1300像素,然后逐步的往前移动到0,同时camera.rotateY(360 * interpolatedTime)函数又把ImageView沿Y轴翻转360度,最终效果如下:
下图是中移动的Ophone的截图,当然,同样兼容android,
![](http://img2.gamfe.com/userfiles/12625/photo/show_20101013142130480.jpg)
![](http://img2.gamfe.com/userfiles/12625/photo/show_20101013142157125.jpg)
![](http://img2.gamfe.com/userfiles/12625/photo/show_20101013142228791.jpg)
![](http://img2.gamfe.com/userfiles/12625/photo/show_20101013142257421.jpg)
相关文章推荐
- 仿IOS特效(一)——Android 自定义View实现3D滚轮效果的城市联动选择器
- android 用camera实现3D效果
- Android利用Camera实现中轴3D卡牌翻转效果
- Android中利用Camera与Matrix实现3D效果详解
- 60.自定义View练习(五)高仿小米时钟 - 使用Camera和Matrix实现3D效果
- Android中利用Camera与Matrix实现3D效果详解
- Android 利用Camera实现中轴3D卡牌翻转效果
- 安卓学习笔记---Android-PickerView实现 3D滚轮效果(时间选择器、省市区三级联动,单项选择效果)
- android高仿小米时钟(使用Camera和Matrix实现3D效果)
- android.graphics.Camera 实现简单的3D效果
- android viewpager实现3d画廊效果
- Android——ViewPager实现3D画廊效果(ViewPager的加载动画)
- android实现3D旋转效果
- Android 利用TimerTask实现ImageView图片播放效果
- Android 自定义RecyclerView 实现真正的Gallery效果
- Android开发学习之基于ViewPager实现Gallery画廊效果
- Android中TextView实现垂直滚动(轮换效果,非跑马灯)
- Android DrawerLayout+Toolbar+NavigationView(实现侧拉侧滑效果)
- Android-RadioGroup+ScrollView 实现联动标签效果
- Android利用ViewFlipper实现屏幕切换动画效果(上)