下面的示例是在Android中实现图片3D旋转的效果。

实现3D效果一般使用OpenGL,但在Android平台下可以不直接使用OpenGL,而是使用Camera实现,Camera中原理最终还是使用OpenGL,不过使用Camera比较方便。 Camera类似一个摄像机,当物体不动时,我们带着摄像机四处移动,在摄像机里面的画面就会有立体感,就可以从其它的角度观看这个物体。废话不多说,直接看示例。

运行效果如下:

 

  

项目结构:

MainView.java中代码:

package com.android.graphics;

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.util.AttributeSet;
import android.view.MotionEvent;
import android.view.View;

public class MainView extends View{
     //Camera类
     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 MainView(Context context,AttributeSet attributeSet) {
      super(context,attributeSet);
      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;
     } 
     
     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);  
     }

}

main.xml中代码:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    >
 <com.android.graphics.MainView
    android:id="@+id/cv"
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
 /> 

</LinearLayout>

最后,希望转载的朋友能够尊重作者的劳动成果,加上转载地址:http://www.cnblogs.com/hanyonglu/archive/2012/02/12/2347636.html  谢谢。

完毕。^_^

Android实现3D旋转效果相关推荐

  1. Android做3D旋转动画,Android编程实现3D旋转效果实例

    本文实例讲述了Android编程实现3D旋转效果的方法.分享给大家供大家参考,具体如下: 下面的示例是在Android中实现图片3D旋转的效果. 实现3D效果一般使用OpenGL,但在Android平 ...

  2. 仿八大行星绕太阳3D旋转效果

    android实现八大行星绕太阳3D旋转效果 仿上面效果,采用kotlin实现,逻辑要简单些,注释在源码中,一看就懂 <com.example.androidxdemo.star.StarGro ...

  3. kankan转载:Android实现3d翻转效果

    Android中并没有提供直接做3D翻转的动画,所以关于3D翻转的动画效果需要我们自己实现,那么我们首先来分析一下Animation 和 Transformation. Animation动画的主要接 ...

  4. Unity3D应用--打造Android车载3D车模桌面(车载主界面开发)

    前言 Android中应用加载Unity3D来显示3D效果参考上一篇博文:Unity3D导出Android工程(Android中应用Unity3D) 透明背景实现参考另一篇博文: 在Android中U ...

  5. 基于 Android 的 3D 视频样本代码

    作者:Mark Liu 下载样本代码 简介 在 Android 中,创建一个能够播放视频剪辑的应用非常简单:创建一个采用 3D 图形平面的游戏应用也非常简单.但是,创建一个能够在 3D 图形对象上播放 ...

  6. CSS图片3D旋转效果

    页面 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.o ...

  7. Android 登录3D翻转动画效果

    Android 登录3D翻转动画效果 描述:这是一个 登录3D翻转效果的Demo. 项目代码在最后面!!!!跳转到最后 控件效果如下: 实现功能: 使页面进行3D翻转(3D翻转效果) 可通过回调监听两 ...

  8. css3 立方体3d旋转效果

    立方体3d旋转效果 通过上面的主题,我们就应该要知道今天我们需要那些东西来完成主题所说的立方体3d旋转特效. 我们需要立方体.旋转属性.动画这三个知识点. 第一步 我们要在网页中搭建立方体. (分析: ...

  9. iOS CoreAnimation专题——实战篇(四)基于拖动手势的视图3D旋转效果

    二维图像的显示 矩阵变换 基向量 线性变换 线性变换的复合 平移变换 齐次坐标 齐次坐标下的点和向量的区别 齐次坐标下的平移变换 齐次坐标下的平行线相交问题 CATransform3D 基于CATra ...

最新文章

  1. 转:12个信号判断男人肾不好
  2. word List 33
  3. 基于微信小程序开发的仿微信demo
  4. JavaScript新手入门教程大全~~~
  5. 史上最NB程序员的自白
  6. 嵌入式linux设备驱动程序是,嵌入式Linux设备驱动开发之:按键驱动程序实例-嵌入式系统-与非网...
  7. Linux 系统下对目录扩容的方法
  8. Ext中的get、getDom、getCmp、getBody、getDoc的区别
  9. Python开源人脸识别库,识别率达99.38%!内附教程+源码分享
  10. 功能测试基础之业务流程测试
  11. 运放参数的详细解释和分析压摆率SR
  12. Flutter AnimatedIcon 图标也可以动画
  13. 管理心理学试题库【1】
  14. 通过ch.ethz.ssh2.Connection无法连接主机解决方法
  15. 蓝懿学习之 疯狂阶段
  16. ubuntu windows 分别安装openslide
  17. 如何在Xcode里面运行C语言程序---简单展示
  18. iPhone手机配置fiddler代理
  19. COM的INTERFACE使用实践
  20. coursera课程learning how to learn的主要内容-学会学习(一)

热门文章

  1. ubuntu修改ls显示目录的颜色
  2. makefile编译问题记录
  3. CF Gym102059 H. Fractions
  4. epoll非阻塞IO
  5. Linux系统编程(九)线程同步
  6. 数码相框项目之显示一张可放大、缩小、拖拽的图片
  7. 想学IT的必看!今年Android面试必问的这些技术面,架构师必备技能
  8. 阿里P8亲自教你!Activity的6大难点,你会几个?年薪50W
  9. 小程序自定义组件中observer函数的应用
  10. ThreadPoolExcutor 线程池 异常处理 (上篇)