Android--Camera基本用法

在我们处理canvas平移,缩放等矩阵matrix变换中,除了自己手动操作矩阵matrix外,安卓系统还提供了一个工具类--Camera,用于3D变换计算,生成一个Matrix矩阵实例用于画布上面绘制。它的坐标系和我们canvas的绘图坐标有些区别,支持x,y,z轴,三维坐标系变换,如下图
zuobiao.png
其中初始坐标和canvas相同,为左上角,但是y轴不再是向下为正,而是和我们平时数学中的坐标系相同,这点要注意
Camera内部实际上OpenGL。很多时候我们用OpenGL做3D特效,其实Camera可以满足绝大部分的需要
下面是一张在app中没有做任何变换的图
默认.jpg
接下来,我们使用camera来对该图进行矩阵变换
private Camera camera = new Camera();
    private Matrix matrix = new Matrix();

    @Override
    protected void onDraw(Canvas canvas) {
        matrix.reset();
        //涉及到矩阵变换,和canvas同样的,我们使用save和restore对矩阵保存和恢复
        camera.save();
        //往x,y,z方向分别平移100像素
        camera.translate(100, 100, 100);
        //每次我们都要获取下矩阵
        camera.getMatrix(matrix);

        camera.restore();

        canvas.drawBitmap(bitmap, matrix, mPaint);
    }
x,y,z轴平移100像素.jpg
很明显,在x,y,z轴平移100像素后,比原来看起来更小(远),并且,y轴平移100不再是往下平移,而是往上平移

camera还支持旋转操作
@Override
    protected void onDraw(Canvas canvas) {
        matrix.reset();
        //涉及到矩阵变换,和canvas同样的,我们使用save和restore对矩阵保存和恢复
        camera.save();
        //往x,y,z方向分别平移100像素
        //camera.translate(100, 100, 100);
        //绕x轴旋转45度
        camera.rotateX(45);
        //每次我们都要获取下矩阵
        camera.getMatrix(matrix);

        camera.restore();

        canvas.drawBitmap(bitmap, matrix, mPaint);
    }
绕x轴45度.jpg
是不是有立体的感觉了,当然一般我们都是以图片的中心旋转,这个时候我们就需要操作下矩阵,让它先平移到原点,再旋转,之后再平移会原来位置
@Override
    protected void onDraw(Canvas canvas) {
        matrix.reset();
        //涉及到矩阵变换,和canvas同样的,我们使用save和restore对矩阵保存和恢复
        camera.save();
        //往x,y,z方向分别平移100像素
        //camera.translate(100, 100, 100);
        //绕x轴旋转45度
        camera.rotateX(45);
        //每次我们都要获取下矩阵
        camera.getMatrix(matrix);

        camera.restore();

        //矩阵前乘
        matrix.preTranslate(-bitmap.getWidth() / 2f,-bitmap.getHeight() / 2f);
        //矩阵后乘
        matrix.postTranslate(bitmap.getWidth() / 2f,bitmap.getHeight() / 2f);
        canvas.drawBitmap(bitmap, matrix, mPaint);
    }
图片中心旋转45度.jpg
camera的基础使用就到此结束了
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值