效果图

其中 图片使用ImageView来展示

50下边其实是个文本框

变形:按钮,点击后 将图片沿着Y轴 旋转文本框 指定的角度。

实现的代码很简单:

public class Base3dImp extends Activity{ @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.base_3d_imp); this.findViewById(R.id.btn_changeShape).setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { EditText tvGress=(EditText) Base3dImp.this.findViewById(R.id.et_degress); int degress=Integer.parseInt(tvGress.getText().toString().trim()); if(degress%90==0) degress+=1; Bitmap bmp=BitmapFactory.decodeResource(getResources(),R.drawable.p1); Matrix matrix=new Matrix();System.out.println("martrix:"+matrix.toString()); Camera camera=new Camera(); camera.save(); // camera.rotateY(degress); // camera.rotateX(degress); camera.getMatrix(matrix); camera.restore();System.out.println("martrix1:"+matrix.toString()); ImageView img=(ImageView)Base3dImp.this.findViewById(R.id.iv_base_3d); int centerX=img.getWidth()/2; int centerY=img.getHeight()/2;

Bitmap bmp1=Bitmap.createBitmap(bmp,0,0,bmp.getWidth(),bmp.getHeight(),matrix,true); System.out.println("martrix1:"+matrix.toString()); img.setImageBitmap(bmp1); } }); } }

上述代码 为了便于观察你 rotateY(degress)方法旋转的实现过程, 下面将旋转动画:

先上效果图:

OpenGLActivity的代码如下:

package com.example.opengl;

import android.app.Activity; import android.content.Intent; import android.opengl.GLSurfaceView; import android.os.Bundle; import android.view.View; import android.view.View.OnClickListener; import android.view.Window; import android.view.animation.AccelerateInterpolator; import android.widget.ImageView;

import com.example.opengl.animation.Rotate3dAnimation; import com.example.opengl.render.CylinderRender; import com.example.opengl.render.HaxagonRender; import com.example.opengl.render.RotateTriangle; /** * OpenGL练习 * @author YangBaoBao * */ public class OpenGLActivity extends Activity {

private View v; private ImageView img; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); requestWindowFeature(Window.FEATURE_NO_TITLE); // GLSurfaceView surface=new GLSurfaceView(this); // surface.requestFocus();//获取焦点 // surface.setFocusableInTouchMode(true);//设置为可触控 // trigle(surface); // sixshape(surface); // clindershape(surface); setContentView(R.layout.activity_open_gl); v=this.findViewById(R.id.rl_main); img=(ImageView) this.findViewById(R.id.img_animation); this.findViewById(R.id.btn_startAnimation).setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { applyRotation(0, 0, 360);  // // Intent i=new Intent(OpenGLActivity.this,Transition3d.class); // OpenGLActivity.this.startActivity(i); } });

// View v=null;v.set } private void trigle(GLSurfaceView surface) { RotateTriangle rtgl=new RotateTriangle(); surface.setOnTouchListener(new RotateTriangle.MyTouchListener(rtgl)); surface.setRenderer(rtgl); } private void sixshape(GLSurfaceView surface) { HaxagonRender hr=new HaxagonRender(); surface.setOnTouchListener(new HaxagonRender.MyTouchListener(hr,surface)); surface.setRenderer(hr); } private void clindershape(GLSurfaceView surface) { CylinderRender hr=new CylinderRender(); surface.setOnTouchListener(new CylinderRender.MyTouchListener(hr,surface)); surface.setRenderer(hr); } // public void staticAnimation() // { // Rotate3dAnimation ra=new Rotate3dAnimation(0, 180,img.getX()/2,img.getY()/2,310,false); // img.startAnimation(ra); // } private void applyRotation(int position, float start, float end) {  // Find the center of the container  final float centerX = img.getWidth() / 2.0f;  final float centerY = img.getHeight() / 2.0f;  // Create a new 3D rotation with the supplied parameter  // The animation listener is used to trigger the next animation  final Rotate3dAnimation rotation =  new Rotate3dAnimation(start, end, centerX, centerY, 0, true);  rotation.setDuration(5000);  rotation.setFillAfter(true);  rotation.setInterpolator(new AccelerateInterpolator());  // rotation.setAnimationListener(new DisplayNextView(position));  img.startAnimation(rotation);  }  }

Rotate3dAnimation为实现的动画类,也是很简单的:

先上效果图:

package com.example.opengl.animation;

import android.view.animation.Animation; import android.view.animation.Transformation; import android.graphics.Camera; import android.graphics.Matrix;

public class Rotate3dAnimation extends Animation { private final float mFromDegrees; private final float mToDegrees; private final float mCenterX; private final float mCenterY; private final float mDepthZ; private final boolean mReverse; private Camera mCamera;

public Rotate3dAnimation(float fromDegrees, float toDegrees, float centerX, float centerY, float depthZ, boolean reverse) { mFromDegrees = fromDegrees; mToDegrees = toDegrees; mCenterX = centerX; mCenterY = centerY; mDepthZ = depthZ; mReverse = reverse; }

@Override public void initialize(int width, int height, int parentWidth, int parentHeight) { super.initialize(width, height, parentWidth, parentHeight); mCamera = new Camera(); }

/**

动画的主要实现方法

*/

@Override protected void applyTransformation(float interpolatedTime, Transformation t) { final float fromDegrees = mFromDegrees; float degrees = fromDegrees + ((mToDegrees - fromDegrees) * interpolatedTime); System.out.println("degress:"+degrees);

System.out.println("interpolatedTime:"+((mToDegrees - fromDegrees) * interpolatedTime)); final float centerX = mCenterX; final float centerY = mCenterY; final Camera camera = mCamera;

final Matrix matrix = t.getMatrix();

camera.save(); if (mReverse) { camera.translate(0.0f, 0.0f,mDepthZ * interpolatedTime);//mDepthZ * interpolatedTime+100 } else { camera.translate(0.0f, 0.0f, mDepthZ* (1.0f - interpolatedTime));//mDepthZ * (1.0f - interpolatedTime)+100 } camera.rotateY(degrees); camera.getMatrix(matrix); camera.restore();

matrix.preTranslate(-centerX, -centerY); matrix.postTranslate(centerX, centerY); }

android 3d成像,android camera 实现3d效果相关推荐

  1. 苹果获杀手级3D成像专利 可重建3D图像

    Apple 发明了可用于拍照和录像的杀手级3D成像照相机.开发中的新照相机将利用深度传感器,如LIDAR,RADAR和激光,来合成立体色差图产生3D影像.此外,这种相机将使用先进的色差.亮度传感器获取 ...

  2. android开源新闻小程序、3D翻转公告效果、小说检索、Kotlin开发TODO清单等源码...

    Android精选源码 开源新闻小程序源码分享 android动态壁纸.锁屏动画.来电秀等源码 android笔记App效果源码 Android实现3D版翻页公告效果 android小说搜索阅读源码 ...

  3. Android实现八大行星绕太阳3D旋转效果

    效果图: 本文目的: 巩固/练习 自定义View 分析解决问题的思路 需要解决的问题: 1.行星的整体布局,3D的视觉效果 2.行星转到太阳后面时,会被太阳挡住,转到太阳前面时,会挡住太阳 3.行星自 ...

  4. 进阶六之Android UI介面之(介面3D旋转)

    天道酬勤.也许你付出了不一定得到回报,但不付出一定得不到回报. 本讲内容:介面3D旋转 示例一效果图:                 下面是res/layout/activity_main.xml ...

  5. 基于android的裸眼3d,午诺裸眼3D原理其实并不复杂

    午诺裸眼3D原理其实并不复杂 其实同样是裸眼3D手机,可能其中含有的技术却大不相同.午诺P8采用的是国内领先3D光学厂商康得新提供的柱状光栅技术,屏幕通过特殊处理给左右眼的图像是不一样的,消费者面对手 ...

  6. Android 7.1.1 之实现 3D Touch

    转载请注明出处:http://blog.csdn.net/yyh352091626/article/details/68962736 Shortcut概念 具体实现 BuildConfig 配置 静态 ...

  7. 3d mark android 版本,OMAP继续悲催 实测3D MARK安卓版更新

    熟悉PC电脑的网友都知道3D MARK是个什么的东西,多年来它在PC电脑领域的权威性和影响力也是毋庸置疑.而在今年4月初,该跑分测试软件正式登陆Android设备(3DMark Android),化解 ...

  8. 十五开源的Andr​​oid(2D或3D)Android开发游戏引擎

    Android游戏开发Android游戏引擎是非常有用的,这里是10个开源的Andr​​oid(2D或3D)Android开发的游戏引擎. 1.  Rokon:Android的开源2D游戏引擎 Rok ...

  9. Unity 3D PC平台发布|| Unity 3D Web 平台发布||Unity 3D Android平台发布

    Unity 3D PC平台发布 PC 是最常见的游戏运行平台. 随着欧美游戏的崛起,PC 平台随之发生游戏登陆大潮. 在 PC 平台上发布游戏的步骤: 打开要发布的 Unity 3D 工程,执行 Fi ...

最新文章

  1. python自动发送微信公众号_使用python一步一步搭建微信公众平台(四)----将小黄鸡引入微信自动回复...
  2. 流放之路材质过滤怎么设置_三种不同材质的精密过滤设备特点
  3. 利用java反射机制,子类从父类拷贝属性--解决信息修改类设计的模式
  4. tp5 cache缓存简单使用
  5. MySQL批量更改数据库表结构字符集
  6. 其实,这仅仅是个开始
  7. 心想技术驱动业务,却在背道而驰
  8. 创建一个守护进程来监听服务进程的异常状态_用 C# 来守护 Python 进程
  9. windows server搭建php mysql数据库_windows server 2008/2012安装php iis7 mysql环境搭建教程...
  10. oracle在线重定义表分区,oracle把一张表在线重定义成分区表
  11. C#类、方法的访问修饰符
  12. ccs6.0 破解版安装教程 Code Composer Studio安装教程
  13. 类似Rainmeter、Conky的安卓插件
  14. 利用Blob进行文件上传的完整步骤
  15. 电子工程师英年早秃?离高阶茂密工程师你只差这套工具!
  16. 移动端(一)—— 移动端概念
  17. 3月4日 与柳传志面对面(谁是这个时代的思想家)
  18. Xcode 10 无开发者账号通过无线网络真机调试
  19. [汇编题]将ax中的16位数分成四组,每组四位,分别放入al,bl,cl,dl中
  20. Linux常用命令——hostid命令

热门文章

  1. kafka.common.InconsistentClusterIdException: The Cluster ID doesn‘t match stored clusterId Some()
  2. 易签到PHP源码,会议签到系统(会易签到)应用项目源码
  3. mysql workbench 报 tables could not be fetched.
  4. C# 中 throw ( 抛出异常 )的用法
  5. 延长SQLyog试用期
  6. rmd中无法打开链结r_十个超级好用的R语言编程技巧,一般人绝不知道!
  7. java 交易金额转换分,java金额元与分转换工具种
  8. php inpo,优化PHP in_array()函数,效率提高50倍
  9. python相关库快速下载
  10. 【UE4】给制作的小地图加上方向指针