速读原著-Android应用开发入门教程(3D动画效果的实现)
16lz
2021-01-23
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 程序的运行结果如图所示:
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 的上下文进行动画的绘制。
更多相关文章
- Android本地程序的printf输出到logcat中
- Android中完全退出程序的四种方法
- Android应用开发——跑马灯效果
- java Android SDK安装与环境变量配置以及开发第一个Android程序
- Android 属性动画(Property Animation) 完全解析【附源码】
- [置顶] Android 动画animation 深入分析