此Camera非彼Camera,在android.graphics包里的Camera,可以理解为2D图形系统中的视角,或者照相机的机位,根据透视的原理我们可以实现一些简单的3D效果。
在ApiDemo中可参考那个Rotate3dAnimation例子。
其实Camera就两个方法:translate和rotate,下面逐一探讨一番吧。
代码很简单,做一个小小的自定义View来做试验罢了。我引入的这张图片尺寸是480*600(因为手机是480*854)。
view plaincopy to clipboardprint?
protected void onDraw(Canvas canvas) {
canvas.drawColor(0xFFCCCCCC);
//Log.d(TAG,"bit w "+bitmap.getWidth()+",h "+bitmap.getHeight());
Paint paint = new Paint();
paint.setColor(Color.DKGRAY);
paint.setStrokeWidth(2.0f);
paint.setStyle(Paint.Style.STROKE);
canvas.drawLine(0, 600, 480, 600, paint);
for(int i=0;50*i<600;i++)
canvas.drawLine(0, 50*i, 480, 50*i, paint);
for(int i=0;50*i<480;i++)
canvas.drawLine(50*i, 0, 50*i, 600, paint);
Matrix matrix = new Matrix();
Camera c = new Camera();
c.save();
//机位的正向转动引起图片向屏幕里翻转
//但是绕Z轴的转动,引起图片平面的旋转(2D效果)
c.rotateZ(45);
//X引起图片向右移动50(正向朝右)
//Y引起图片向上移动50(正向朝上)
//Z引起图片缩小(正向指向自己)
c.translate(100f, 0f, 300f);
c.getMatrix(matrix);
//c.applyToCanvas(canvas);
c.restore();
//移到中心点上
matrix.preTranslate(-240, -300);
matrix.postTranslate(240, 300);
canvas.concat(matrix);
canvas.drawBitmap(bitmap, 0,0,null);
//canvas.drawBitmap(bitmap, matrix, null);
}
}
protected void onDraw(Canvas canvas) {
canvas.drawColor(0xFFCCCCCC);
//Log.d(TAG,"bit w "+bitmap.getWidth()+",h "+bitmap.getHeight());
Paint paint = new Paint();
paint.setColor(Color.DKGRAY);
paint.setStrokeWidth(2.0f);
paint.setStyle(Paint.Style.STROKE);
canvas.drawLine(0, 600, 480, 600, paint);
for(int i=0;50*i<600;i++)
canvas.drawLine(0, 50*i, 480, 50*i, paint);
for(int i=0;50*i<480;i++)
canvas.drawLine(50*i, 0, 50*i, 600, paint);
Matrix matrix = new Matrix();
Camera c = new Camera();
c.save();
//机位的正向转动引起图片向屏幕里翻转
//但是绕Z轴的转动,引起图片平面的旋转(2D效果)
c.rotateZ(45);
//X引起图片向右移动50(正向朝右)
//Y引起图片向上移动50(正向朝上)
//Z引起图片缩小(正向指向自己)
c.translate(100f, 0f, 300f);
c.getMatrix(matrix);
//c.applyToCanvas(canvas);
c.restore();
//移到中心点上
matrix.preTranslate(-240, -300);
matrix.postTranslate(240, 300);
canvas.concat(matrix);
canvas.drawBitmap(bitmap, 0,0,null);
//canvas.drawBitmap(bitmap, matrix, null);
}
}
通过实验可知:
translate(x,y,z),很好理解,见代码中的注释。坐标轴似乎与我们常规的理解不一样?为什么会这样呢?
rotateX,rotateY,rotateZ,也很好理解,机位的移动,对图片的影响正好是反向的。
最后要注意的是有两种方法应用这个机位的修改,效果也不一样,说不清,您可以自己尝试一下。
本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/sharetop/archive/2010/02/01/5277655.aspx
分享到:
相关推荐
android.graphics.Color实践 Android 开发 使用了Color类
android.graphics包是核心渲染包,它提供了一些初级图形工具,诸如画布、颜色过滤器、画笔等,可以让你直接在屏幕上进行图像处理
Android Graphics.Camera类的简单Demo 相应博文地址:http://blog.csdn.net/u011268102/article/details/9707265
android graphics.rar android graphics.rar android graphics.rar
NULL 博文链接:https://yuanzhifei89.iteye.com/blog/1136651
android.graphics包.pdf
打印窗体中的数据C#源代码e.Graphics.DrawString(label1.Text, new Font("宋体", 10, FontStyle.Regular), Brushes.Black, 260, 400); e.Graphics.DrawString(textBox1.Text, new Font("宋体", 10, FontStyle....
主要介绍了android.graphics.Matrix类,较为详细的分析了Matrix类矩阵与坐标运算的相关函数功能与使用注意事项,并结合实例形式分析了android.graphics.Matrix类具体使用方法,需要的朋友可以参考下
调色板展示android.support.v7.graphics.Palette示例应用程序。 解决大位图等问题,并使用库进行系统栏着色。截屏执照 Copyright 2014 Zhang HaiLicensed under the Apache License, Version 2.0 (the "License");...
CRC.Fundamentals.of.Computer.Graphics.4th.Edition.2015 CRC.Fundamentals.of.Computer.Graphics.4th.Edition.2015
Wrox.Game.and.Graphics.Programming.for.iOS.and.Android.with.OpenGL.ES.2.0.2012
import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.graphics.Canvas; import android.graphics.Matrix; import android.graphics.Paint; import android.os.Bundle; import ...
《Game.and.Graphics.Programming.for.iOS.and.Android.with.OpenGL.ES.2.0.Feb.2012》书籍源码,iOS和android代码同时包含。采用7z压缩,zip压缩为65M。电子书在这里下载:...
Mathematics.for.3D.Game.Programming.and.Computer.Graphics.3rd.Edition
android.support.graphics.pdf 支持基于 Android API 21 的 PDF 功能的 PDF 库。
The.Cg.Tutorial.The.Definitive.Guide.to.Programmable.Real-Time.Graphics
目录详见:http://www.gbv.de/dms/ilmenau/toc/359707645.PDF
Interactive.Computer.Graphics.A.Top-Down.Approach.with.WebGL.7th.Edition)计算机图形学(Computer Graphics,简称CG)是一种使用数学算法将二维或三维图形转化为计算机显示器的栅格形式的科学。简单地说,计算机...