欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  移动技术

Android编程实现3D旋转效果实例

程序员文章站 2024-02-12 22:11:40
本文实例讲述了android编程实现3d旋转效果的方法。分享给大家供大家参考,具体如下: 下面的示例是在android中实现图片3d旋转的效果。 实现3d效果一般使用o...

本文实例讲述了android编程实现3d旋转效果的方法。分享给大家供大家参考,具体如下:

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

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

运行效果如下:

Android编程实现3D旋转效果实例 Android编程实现3D旋转效果实例 

Android编程实现3D旋转效果实例 Android编程实现3D旋转效果实例

项目结构:

Android编程实现3D旋转效果实例

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>

希望本文所述对大家android程序设计有所帮助。