- 浏览: 656490 次
- 性别:
- 来自: 深圳
文章分类
最新评论
-
ZHOU452840622:
少了一个构造函数 晕
Android画图之Matrix(一) -
ZHOU452840622:
06-30 17:39:19.193: E/AndroidRu ...
Android画图之Matrix(一) -
ZHOU452840622:
为什么报错哦
Android画图之Matrix(一) -
悬空90:
只是获取activity的名字而已, 没有实例。 反射 ...
获取屏幕上正在显示的activity -
night_iv:
重写下面两个函数EditText完全作废,点击没有反应没有光标 ...
Android自由选择TextView的文字
见过没有用opengl的3D动画,看了一下,是用的Camera实现的,内部机制实际上还是opengl,不过大大简化了使用。
Camera就像一个摄像机,一个物体在原地不动,然后我们带着这个摄像机四处移动,在摄像机里面呈现出来的画面,就会有立体感,就可以从各个角度观看这个物体。
它有旋转、平移的一系列方法,实际上都是在改变一个Matrix对象,一系列操作完毕之后,我们得到这个Matrix,然后画我们的物体,就可以了。
常用的API如下:
rotateX(float degree) 绕着x轴旋转degree个度数
rotateY(float degree) 绕着y轴旋转degree个度数
rotateZ(float degree) 绕着z轴旋转degree个度数
translate(float x,float y,float z) 平移一段距离
save()和restore() 作用跟Canvas的一样,保存原状态,操作完之后,恢复到原状态。
下面实现一个简单的图片三维翻转的效果。
package chroya.demo.rotate3d; import android.content.Context; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.graphics.Camera; import android.graphics.Canvas; import android.graphics.Matrix; import android.graphics.Paint; import android.view.MotionEvent; import android.view.View; /** * 图片三维翻转 * @author chroya */ public class CubeView extends View { //摄像机 private Camera mCamera; //翻转用的图片 private Bitmap face; private Matrix mMatrix = new Matrix(); private Paint mPaint = new Paint(); private int mLastMotionX, mLastMotionY; //图片的中心点坐标 private int centerX, centerY; //转动的总距离,跟度数比例1:1 private int deltaX, deltaY; //图片宽度高度 private int bWidth, bHeight; public CubeView(Context context) { super(context); setWillNotDraw(false); mCamera = new Camera(); mPaint.setAntiAlias(true); face = BitmapFactory.decodeResource(getResources(), R.drawable.x); bWidth = face.getWidth(); bHeight = face.getHeight(); centerX = bWidth>>1; centerY = bHeight>>1; } /** * 转动 * @param degreeX * @param degreeY */ void rotate(int degreeX, int degreeY) { deltaX += degreeX; deltaY += degreeY; mCamera.save(); mCamera.rotateY(deltaX); mCamera.rotateX(-deltaY); mCamera.translate(0, 0, -centerX); mCamera.getMatrix(mMatrix); mCamera.restore(); //以图片的中心点为旋转中心,如果不加这两句,就是以(0,0)点为旋转中心 mMatrix.preTranslate(-centerX, -centerY); mMatrix.postTranslate(centerX, centerY); mCamera.save(); postInvalidate(); } @Override public boolean onTouchEvent(MotionEvent event) { int x = (int) event.getX(); int y = (int) event.getY(); switch(event.getAction()) { case MotionEvent.ACTION_DOWN: mLastMotionX = x; mLastMotionY = y; break; case MotionEvent.ACTION_MOVE: int dx = x - mLastMotionX; int dy = y - mLastMotionY; rotate(dx, dy); mLastMotionX = x; mLastMotionY = y; break; case MotionEvent.ACTION_UP: break; } return true; } @Override public void dispatchDraw(Canvas canvas) { super.dispatchDraw(canvas); canvas.drawBitmap(face, mMatrix, mPaint); } }
注释里面都写的比较清楚了。
效果如下:
可以touch来拖动图片以翻转。这个可以用来做很多事情,比如桌面的立体翻转、立体相册等等。
源码也附上,见附件。
- Rotate3D.zip (74 KB)
- 下载次数: 1268
- Rotate3D_APK.zip (73 KB)
- 下载次数: 406
评论
14 楼
yangmaolinpl
2013-06-19
楼主,小弟学习了。
13 楼
alexlikeask
2012-07-03
好东东,学习啦!
12 楼
libo19881179
2011-11-21
学习了 lz辛苦
11 楼
xiandaoyan
2011-08-07
拜读了啊!
10 楼
chroya
2011-03-11
jackson604 写道
可以不可绕着Y轴进行立体旋转呢?
mCamera.rotateY(d);就是绕着y轴进行旋转
9 楼
jackson604
2011-03-10
可以不可绕着Y轴进行立体旋转呢?
8 楼
chroya
2011-01-15
jebe7282 写道
mCamera.translate(0, 0, -centerX);
博主 这句话能否解释一下呢。
博主 这句话能否解释一下呢。
这个标示镜头在Z轴方向上的移动,正值是垂直屏幕向外,负值是垂直屏幕向里。
7 楼
jebe7282
2011-01-15
mCamera.translate(0, 0, -centerX);
博主 这句话能否解释一下呢。
博主 这句话能否解释一下呢。
6 楼
jebe7282
2011-01-15
mCamera.translate(0, 0, -centerX);
博主 这句话能否解释一下呢。
博主 这句话能否解释一下呢。
5 楼
Coding.Ghost
2010-12-12
貌似锯齿是不可避免的.只是能通过某个方法减弱锯齿.
4 楼
chroya
2010-12-07
hellorheaven 写道
楼主你好。
有几个问题请教呵,
1. mCamera.save(); mCamera.restore();
分别是什么意思呵?
2. 我自定义动画实现旋转倾斜效果,不过总是有锯齿,用paint的方式效果不是很好,在bitmap哪边是在调用不到canvas的消锯齿的方法,请问还有什么好的方法或思路么?
有几个问题请教呵,
1. mCamera.save(); mCamera.restore();
分别是什么意思呵?
2. 我自定义动画实现旋转倾斜效果,不过总是有锯齿,用paint的方式效果不是很好,在bitmap哪边是在调用不到canvas的消锯齿的方法,请问还有什么好的方法或思路么?
1.save()和restore()是必须成对使用的方法,save()的作用是,保存当前的画布状态,restore()就是将画布状态恢复到save之前的状态。在save()之后对canvas的任何操作都会在restore()之后无效,但是画布上的内容还在。 不知道你明白没。
2.抗锯齿,目前来说我知道的只有两种方法,见http://chroya.iteye.com/blog/794505
3 楼
hellorheaven
2010-12-06
楼主你好。
有几个问题请教呵,
1. mCamera.save(); mCamera.restore();
分别是什么意思呵?
2. 我自定义动画实现旋转倾斜效果,不过总是有锯齿,用paint的方式效果不是很好,在bitmap哪边是在调用不到canvas的消锯齿的方法,请问还有什么好的方法或思路么?
有几个问题请教呵,
1. mCamera.save(); mCamera.restore();
分别是什么意思呵?
2. 我自定义动画实现旋转倾斜效果,不过总是有锯齿,用paint的方式效果不是很好,在bitmap哪边是在调用不到canvas的消锯齿的方法,请问还有什么好的方法或思路么?
2 楼
chroya
2010-12-05
kdale 写道
楼主给个apk包啊,省得我再编译了
哥哥哎,您老可真懂得懒之精髓。 好吧,apk也放上去。
1 楼
kdale
2010-12-05
楼主给个apk包啊,省得我再编译了
发表评论
-
Android NFC内部机制分析
2012-08-06 19:48 3一、初始 一般需要使用nfc ... -
Android NFC简介
2012-08-03 11:31 4287目录: Android NFC ... -
Android放大镜的实现
2011-02-24 20:29 14236快三个月了没写博客了,因为工作调动,很多经验、心得都没 ... -
Android简单的圆盘形菜单
2010-12-01 17:10 15396今天偶然看到一个圆盘形的菜单,还可以转动,感觉挺 ... -
让自己的Android应用支持appwidget
2010-11-26 13:25 7762经常看到一些教程教你如何写appwidget, ... -
ConditionVariable的用法
2010-11-07 21:35 8663线程操作经常用到wait和notify,用起来稍显 ... -
Android自定义长按事件
2010-11-06 20:34 44601Android系统自带了长按事件,setOnLongC ... -
Android获取应用程序的大小
2010-10-22 23:53 11194今天碰到个问 ... -
Android获取其他包的Context实例然后干坏事
2010-09-12 14:55 25063Android中有Context ... -
android监听文件和目录的创建删除移动等事件
2010-09-11 21:18 13618android.os下的FileObserver类 ... -
解决android自定义标题栏充满的问题
2010-09-10 15:27 10753一个接着一个的activity,写啊写,调啊调 ... -
Android中用AsyncTask简单实现多线程
2010-09-07 14:11 5172一般情况下在an ... -
Android自由选择TextView的文字
2010-09-02 15:47 19246用过EditText的都 ... -
NDK入门、提高和实战
2010-08-04 18:25 3253网上也有一些对NDK ... -
linux下用adb连接手机的问题解决
2010-08-02 16:17 5983在linux里面,模拟器可以直接识别,使用adb也 ... -
Android系统事件的recycle原理
2010-07-22 19:07 6214最近封装一些功能 ... -
Android画图之Matrix(二)
2010-07-15 22:01 33953上一篇Android画图之Matrix(一) 讲 ... -
Android画图之Matrix(一)
2010-07-13 22:54 32812Matrix ,中文里叫矩阵, ... -
Android画图之Bitmap(二)
2010-07-11 22:21 10767前面一篇博文Android画图之Bitma ... -
Android画图之Bitmap(一)
2010-07-11 19:51 15621最近写电子书 ...
相关推荐
android 3D旋转相册
android 3D旋转效果控件
这是android3D旋转图片的实例,具体请参见博客:http://blog.csdn.net/programchangesworld/article/details/49078387
android 3D旋转屏幕实现,直接解压
android 3D旋转效果
Android 3D圆形旋转菜单Android 3D圆形旋转菜单Android 3D圆形旋转菜单Android 3D圆形旋转菜单Android 3D圆形旋转菜单Android 3D圆形旋转菜单Android 3D圆形旋转菜单Android 3D圆形旋转菜单
对android中3D旋转的代码解释,方便自己学习,如果有android新手的话也可以看看是如何实现的,
这是我在项目中运用的,原本是国外牛人写的,不过有些问题,后来我进行了改进。主要是3D 旋转。类似于dota2 里面选择服务器的界面。
android canvas 3D旋转木马 图片立体展示
实现自动旋转的渐变色立方体
Android自定义动画 3D旋转 在http: blog csdn net a253664942 article details 45601973中有详细解释 有问题可以给我留言
3D自动旋转的旋转木马
1、支持3d旋转。 2、支持自定义旋转。 3、点击3d切换,触摸滑动3d切换 配置view 布局xml里: 代码设置: mLoopRotarySwitchView .setR(300)//设置R的大小 .setAutoRotation(true)//是否自动切换 ....
主要介绍一下如何实现View的3D旋转效果,实现的主要原理就是围绕Y轴旋转,同时在Z轴方面上有一个深入的缩放。 演示的demo主要有以下几个重点: 1,自定义旋转动画 2,动画做完后,重置ImageView
这篇文章主要介绍一下如何实现View的3D旋转效果,实现的主要原理就是围绕Y轴旋转,同时在Z轴方面上有一个深入的缩放。演示的demo主要有以下几个重点: 1,自定义旋转动画 2,动画做完后,重置ImageView 先看一下程序...
Android 随手势进行3D旋转的源码Android 随手势进行3D旋转的源码Android 随手势进行3D旋转的源码Android 随手势进行3D旋转的源码Android 随手势进行3D旋转的源码Android 随手势进行3D旋转的源码Android 随手势进行3D...
android3d绘图 旋转的三角形
Android View 3D旋转
android 3D立体图片旋转,里面是代码项目,直接导入eclipse就可以查看了,可以学习。