速读原著-Android应用开发入门教程(基本的绘制)

2023-12-17 14:30

本文主要是介绍速读原著-Android应用开发入门教程(基本的绘制),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

10.2 基本的绘制

参考示例程序:Touch Rotate(Graphics=>OpenGL ES=>Touch Rotate)
源代码:android/apis/graphics/TouchRotateActivity.java
Touch Rotate 程序的运行结果如图所示:

在这里插入图片描述
本程序显示了一个可以旋转的立方体,TouchRotate Activity 类的结构如下所示:

    public class TouchRotateActivity extends Activity {@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);mGLSurfaceView = new TouchSurfaceView(this); // 建立 GLSurfaceView setContentView(mGLSurfaceView); // 设置 View 到活动中mGLSurfaceView.requestFocus(); // 配置 GLSurfaceView mGLSurfaceView.setFocusableInTouchMode(true);}//......Resume()和 onPause()方法调用 GLSurfaceView 的对应方法private GLSurfaceView mGLSurfaceView; // 配置 GLSurfaceView }

TouchSurfaceView 是一个扩展 GLSurfaceView 类的实现,其中的 CubeRenderer 是扩展了
GLSurfaceView::Renderer 接口的实现,其主要内容如下所示:

    class TouchSurfaceView extends GLSurfaceView {public TouchSurfaceView(Context context) {super(context);mRenderer = new CubeRenderer(); // 建立渲染器setRenderer(mRenderer); // 设置渲染器setRenderMode(GLSurfaceView.RENDERMODE_WHEN_DIRTY);}private class CubeRenderer implements GLSurfaceView.Renderer {// 实现渲染器接口public void onDrawFrame(GL10 gl) {// 调用 OpenGL 的标准接口进行操作gl.glClear(GL10.GL_COLOR_BUFFER_BIT | GL10.GL_DEPTH_BUFFER_BIT);gl.glMatrixMode(GL10.GL_MODELVIEW);gl.glLoadIdentity();gl.glTranslatef(0, 0, -3.0f);gl.glRotatef(mAngleX, 0, 1, 0); // 对绘制的图形进行旋转gl.glRotatef(mAngleY, 1, 0, 0);gl.glEnableClientState(GL10.GL_VERTEX_ARRAY);gl.glEnableClientState(GL10.GL_COLOR_ARRAY);mCube.draw(gl); // 调用 draw()进行绘制}}}

CubeRenderer渲染器中的onSurfaceChanged()和onSurfaceCreated()两个函数进行了 Surface变化及创建时的操作。

    public void onSurfaceChanged(GL10 gl, int width, int height) {gl.glViewport(0, 0, width, height);float ratio = (float) width / height;gl.glMatrixMode(GL10.GL_PROJECTION);gl.glLoadIdentity();gl.glFrustumf(-ratio, ratio, -1, 1, 1, 10);}public void onSurfaceCreated(GL10 gl, EGLConfig config){gl.glDisable(GL10.GL_DITHER);gl.glHint(GL10.GL_PERSPECTIVE_CORRECTION_HINT,GL10.GL_FASTEST);gl.glClearColor(1,1,1,1);gl.glEnable(GL10.GL_CULL_FACE);gl.glShadeModel(GL10.GL_SMOOTH);gl.glEnable(GL10.GL_DEPTH_TEST);}

移动的效果:

    @Override public boolean onTrackballEvent(MotionEvent e) {mRenderer.mAngleX += e.getX() * TRACKBALL_SCALE_FACTOR;mRenderer.mAngleY += e.getY() * TRACKBALL_SCALE_FACTOR;requestRender();return true;}@Override public boolean onTouchEvent(MotionEvent e) {float x = e.getX();float y = e.getY();switch (e.getAction()) {case MotionEvent.ACTION_MOVE:float dx = x - mPreviousX;float dy = y - mPreviousY;mRenderer.mAngleX += dx * TOUCH_SCALE_FACTOR;mRenderer.mAngleY += dy * TOUCH_SCALE_FACTOR;requestRender();}mPreviousX = x;mPreviousY = y;return true;}

这篇关于速读原著-Android应用开发入门教程(基本的绘制)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/504718

相关文章

MySQL中between and的基本用法、范围查询示例详解

《MySQL中betweenand的基本用法、范围查询示例详解》BETWEENAND操作符在MySQL中用于选择在两个值之间的数据,包括边界值,它支持数值和日期类型,示例展示了如何使用BETWEEN... 目录一、between and语法二、使用示例2.1、betwphpeen and数值查询2.2、be

Android使用java实现网络连通性检查详解

《Android使用java实现网络连通性检查详解》这篇文章主要为大家详细介绍了Android使用java实现网络连通性检查的相关知识,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录NetCheck.Java(可直接拷贝)使用示例(Activity/Fragment 内)权限要求

Python+wxPython开发一个文件属性比对工具

《Python+wxPython开发一个文件属性比对工具》在日常的文件管理工作中,我们经常会遇到同一个文件存在多个版本,或者需要验证备份文件与源文件是否一致,下面我们就来看看如何使用wxPython模... 目录引言项目背景与需求应用场景核心需求运行结果技术选型程序设计界面布局核心功能模块关键代码解析文件大

MySQL基本表查询操作汇总之单表查询+多表操作大全

《MySQL基本表查询操作汇总之单表查询+多表操作大全》本文全面介绍了MySQL单表查询与多表操作的关键技术,包括基本语法、高级查询、表别名使用、多表连接及子查询等,并提供了丰富的实例,感兴趣的朋友跟... 目录一、单表查询整合(一)通用模版展示(二)举例说明(三)注意事项(四)Mapper简单举例简单查询

C++多线程开发环境配置方法

《C++多线程开发环境配置方法》文章详细介绍了如何在Windows上安装MinGW-w64和VSCode,并配置环境变量和编译任务,使用VSCode创建一个C++多线程测试项目,并通过配置tasks.... 目录下载安装 MinGW-w64下载安装VS code创建测试项目配置编译任务创建 tasks.js

2025最新版Android Studio安装及组件配置教程(SDK、JDK、Gradle)

《2025最新版AndroidStudio安装及组件配置教程(SDK、JDK、Gradle)》:本文主要介绍2025最新版AndroidStudio安装及组件配置(SDK、JDK、Gradle... 目录原生 android 简介Android Studio必备组件一、Android Studio安装二、A

Nginx内置变量应用场景分析

《Nginx内置变量应用场景分析》Nginx内置变量速查表,涵盖请求URI、客户端信息、服务器信息、文件路径、响应与性能等类别,这篇文章给大家介绍Nginx内置变量应用场景分析,感兴趣的朋友跟随小编一... 目录1. Nginx 内置变量速查表2. 核心变量详解与应用场景3. 实际应用举例4. 注意事项Ng

使用Python在PDF中绘制多种图形的操作示例

《使用Python在PDF中绘制多种图形的操作示例》在进行PDF自动化处理时,人们往往首先想到的是文本生成、图片嵌入或表格绘制等常规需求,然而在许多实际业务场景中,能够在PDF中灵活绘制图形同样至关重... 目录1. 环境准备2. 创建 PDF 文档与页面3. 在 PDF 中绘制不同类型的图形python

Java中的随机数生成案例从范围字符串到动态区间应用

《Java中的随机数生成案例从范围字符串到动态区间应用》本文介绍了在Java中生成随机数的多种方法,并通过两个案例解析如何根据业务需求生成特定范围的随机数,本文通过两个实际案例详细介绍如何在java中... 目录Java中的随机数生成:从范围字符串到动态区间应用引言目录1. Java中的随机数生成基础基本随

一文详解Python如何开发游戏

《一文详解Python如何开发游戏》Python是一种非常流行的编程语言,也可以用来开发游戏模组,:本文主要介绍Python如何开发游戏的相关资料,文中通过代码介绍的非常详细,需要的朋友可以参考下... 目录一、python简介二、Python 开发 2D 游戏的优劣势优势缺点三、Python 开发 3D