10.4 3D动画效果的实现

OpenGL 本身可以强大的实现动画的效果,在 Android 中实现动画,实际上只是将 OpenGL 动画需要使用的元素在 Android 中重新实现。
参考示例程序:Touch Rotate(Graphics=>OpenGL ES=>Textured Triangle)
源代码:src/com/example/android/apis/graphics/TriangleActivity.java

src/com/example/android/apis/graphics/TriangleRenderer.java 

Touch Rotate 程序的运行结果如图所示:
速读原著-Android应用开发入门教程(3D动画效果的实现)_第1张图片
TriangleActivity.java 的内容如下所示:

    public class TriangleActivity extends Activity {        @Override        protected void onCreate(Bundle savedInstanceState) {            super.onCreate(savedInstanceState);            mGLView = new GLSurfaceView(this);            mGLView.setEGLConfigChooser(false);            mGLView.setRenderer(new TriangleRenderer(this));            setContentView(mGLView);        }        @Override        protected void onPause() { // 使其中的 View 停止            super.onPause();            mGLView.onPause();        }        @Override        protected void onResume() { // 使其中 View 重新开始            super.onResume();            mGLView.onResume();        }        private GLSurfaceView mGLView;    }

程序的在 onPause()onResume()中调用 View 的对应函数。
TriangleRenderer.java 的主要函数的内容如下所示:

    public TriangleRenderer(Context context) {        mContext = context;        mTriangle = new Triangle();    }    public void onDrawFrame(GL10 gl) {        gl.glDisable(GL10.GL_DITHER);        gl.glTexEnvx(GL10.GL_TEXTURE_ENV, GL10.GL_TEXTURE_ENV_MODE,                GL10.GL_MODULATE);        gl.glClear(GL10.GL_COLOR_BUFFER_BIT | GL10.GL_DEPTH_BUFFER_BIT);// 开始绘制        gl.glMatrixMode(GL10.GL_MODELVIEW);        gl.glLoadIdentity();        GLU.gluLookAt(gl, 0, 0, -5, 0f, 0f, 0f, 0f, 1.0f, 0.0f);        gl.glEnableClientState(GL10.GL_VERTEX_ARRAY);        gl.glEnableClientState(GL10.GL_TEXTURE_COORD_ARRAY);        gl.glActiveTexture(GL10.GL_TEXTURE0);        gl.glBindTexture(GL10.GL_TEXTURE_2D, mTextureID);        gl.glTexParameterx(GL10.GL_TEXTURE_2D, GL10.GL_TEXTURE_WRAP_S,                GL10.GL_REPEAT);        gl.glTexParameterx(GL10.GL_TEXTURE_2D, GL10.GL_TEXTURE_WRAP_T,                GL10.GL_REPEAT);// 获取系统时间        long time = SystemClock.uptimeMillis() % 4000L;        float angle = 0.090f * ((int) time);        gl.glRotatef(angle, 0, 0, 1.0f); // 实现旋转        mTriangle.draw(gl);    }

OpenGL 本身带回动画绘制的功能,这里使用的 glRotatef()是进行旋转。mTriangle 是一个三角形,在onDrawFrame()根据 OpenGL 的上下文进行动画的绘制。

更多相关文章

  1. Android本地程序的printf输出到logcat中
  2. Android中完全退出程序的四种方法
  3. Android应用开发——跑马灯效果
  4. java Android SDK安装与环境变量配置以及开发第一个Android程序
  5. Android 属性动画(Property Animation) 完全解析【附源码】
  6. [置顶] Android 动画animation 深入分析

随机推荐

  1. Android获取设备信息(利用反射)
  2. Android之ViewFlipper的使用与ListView的
  3. Android(安卓)深入研究SQLite实例(七)
  4. Android(安卓)将单位dip转换为px
  5. Android(安卓)在线升级APK
  6. android 拍照 无预览 转发
  7. 关于Android中的SQLite使用
  8. Android(安卓)TextView 超链接
  9. Android(安卓)5.0新特性ToolBar
  10. Android通过socket连接服务器(PC)