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

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

下面的示例是在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>

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

以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索android
, 3d
旋转
android网络编程实例、android串口编程实例、android实现图片旋转、java多线程编程实例、c 多线程编程实例,以便于您获取更多的相关知识。

时间: 2024-12-21 05:56:39

Android编程实现3D旋转效果实例_Android的相关文章

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

本文实例讲述了Android编程实现3D旋转效果的方法.分享给大家供大家参考,具体如下: 下面的示例是在Android中实现图片3D旋转的效果. 实现3D效果一般使用OpenGL,但在Android平台下可以不直接使用OpenGL,而是使用Camera实现,Camera中原理最终还是使用OpenGL,不过使用Camera比较方便. Camera类似一个摄像机,当物体不动时,我们带着摄像机四处移动,在摄像机里面的画面就会有立体感,就可以从其它的角度观看这个物体.废话不多说,直接看示例. 运行效果如

Android编程之蓝牙测试实例_Android

本文实例讲述了Android编程之蓝牙测试.分享给大家供大家参考.具体分析如下: 一.软件平台: win7 + eclipse + sdk 二.设计思路: 配合倒计时定时器实现蓝牙打开,可见,扫描三个功能 三.源代码: main.xml: <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/re

Android编程实现3D滑动旋转效果的方法_Android

本文实例讲述了Android编程实现3D滑动旋转效果的方法.分享给大家供大家参考,具体如下: 这里我们通过代码实现一些滑动翻页的动画效果. Animation实现动画有两个方式:帧动画(frame-by-frame animation)和补间动画(tweened animation) 本示例通过继承Animation自定义Rotate3D,实现3D翻页效果.效果图如下: 1.Rotate3D(Animation) 首先,自定义Animation的3D动画类Rotate3D public clas

Android编程实现3D滑动旋转效果的方法

本文实例讲述了Android编程实现3D滑动旋转效果的方法.分享给大家供大家参考,具体如下: 这里我们通过代码实现一些滑动翻页的动画效果. Animation实现动画有两个方式:帧动画(frame-by-frame animation)和补间动画(tweened animation) 本示例通过继承Animation自定义Rotate3D,实现3D翻页效果.效果图如下: 1.Rotate3D(Animation) 首先,自定义Animation的3D动画类Rotate3D public clas

Android编程之动态壁纸实例分析_Android

本文实例讲述了Android编程之动态壁纸.分享给大家供大家参考,具体如下: 从android 2.1版本起引入了动态壁纸的概念,熟悉android的人一定不会陌生.这里解释一个动态壁纸是怎么形成又是怎么工作的. 首先动态桌面的动态体现出这个组件是实时变化的,也就是说有一个后台在不停的刷新这个组件.联想到后台组件首先想到的就是service,从代码角度看,果然如此.每一个动态桌面都继承自WallpaperService,其中必须实现的抽象方法onCreateEngine,返回一个Engine对象

Android编程之消息机制实例分析_Android

本文实例讲述了Android编程之消息机制.分享给大家供大家参考,具体如下: 一.角色描述 1.Looper: 一个线程可以产生一个Looper对象,由它来管理此线程里的Message Queue(消息队列). 2.Handler: 你可以构造Handler对象来与Looper沟通,以便push新消息到Message Queue里:或者接收Looper(从Message Queue取出)所送来的消息. 3. Message Queue(消息队列):用来存放线程放入的消息. 4.线程:UI thr

Android编程ViewPager回弹效果实例分析_Android

本文实例讲述了Android编程ViewPager回弹效果.分享给大家供大家参考,具体如下: 其实在我们很多应用中都看到当ViewPager滑到第一页或者最后一页的时候,如果再滑动的时候,就会有一个缓冲的过程,也就是回弹效果.之前在研究回弹效果的时候,也顺便实现了ViewPager的回弹效果,其实也很简单,一下是实现代码,注释比较少: package com.freesonfish.viewpager_2; import android.content.Context; import andro

Android编程动态按钮实现方法_Android

本文实例讲述了Android编程动态按钮实现方法.分享给大家供大家参考,具体如下: 第一种: 该方法通过onTouch来实现, btn3 = (ImageButton) findViewById(R.id.ImageButton03); btn3.setOnTouchListener(touchListener3); View.OnTouchListener touchListener = new OnTouchListener() { @Override public boolean onTo

Android编程之语音识别实现方法_Android

本文实例讲述了Android编程之语音识别实现方法.分享给大家供大家参考,具体如下: 语音识别技术在手机上应用得相当广泛,人类日常最频繁的沟通方式是语音,而在手机应用中,大部分是通过硬件手动输入,目前这依然是主要与手机互动的方式.但是随着手机软硬件功能的不断提升,可以预见在不久的将来,语音交流将是人机交互的主要方式.IPhone手机内置的Siri语音助手就是一个很好的例子.而鲜为人知的是其使用的语音识别技术来自于Google.而想而知,作为Google力推的Android自然被植入了最核心的语音