速读原著-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

相关文章

Python中re模块结合正则表达式的实际应用案例

《Python中re模块结合正则表达式的实际应用案例》Python中的re模块是用于处理正则表达式的强大工具,正则表达式是一种用来匹配字符串的模式,它可以在文本中搜索和匹配特定的字符串模式,这篇文章主... 目录前言re模块常用函数一、查看文本中是否包含 A 或 B 字符串二、替换多个关键词为统一格式三、提

Java MQTT实战应用

《JavaMQTT实战应用》本文详解MQTT协议,涵盖其发布/订阅机制、低功耗高效特性、三种服务质量等级(QoS0/1/2),以及客户端、代理、主题的核心概念,最后提供Linux部署教程、Sprin... 目录一、MQTT协议二、MQTT优点三、三种服务质量等级四、客户端、代理、主题1. 客户端(Clien

Go语言数据库编程GORM 的基本使用详解

《Go语言数据库编程GORM的基本使用详解》GORM是Go语言流行的ORM框架,封装database/sql,支持自动迁移、关联、事务等,提供CRUD、条件查询、钩子函数、日志等功能,简化数据库操作... 目录一、安装与初始化1. 安装 GORM 及数据库驱动2. 建立数据库连接二、定义模型结构体三、自动迁

ModelMapper基本使用和常见场景示例详解

《ModelMapper基本使用和常见场景示例详解》ModelMapper是Java对象映射库,支持自动映射、自定义规则、集合转换及高级配置(如匹配策略、转换器),可集成SpringBoot,减少样板... 目录1. 添加依赖2. 基本用法示例:简单对象映射3. 自定义映射规则4. 集合映射5. 高级配置匹

使用Python绘制3D堆叠条形图全解析

《使用Python绘制3D堆叠条形图全解析》在数据可视化的工具箱里,3D图表总能带来眼前一亮的效果,本文就来和大家聊聊如何使用Python实现绘制3D堆叠条形图,感兴趣的小伙伴可以了解下... 目录为什么选择 3D 堆叠条形图代码实现:从数据到 3D 世界的搭建核心代码逐行解析细节优化应用场景:3D 堆叠图

SpringBoot开发中十大常见陷阱深度解析与避坑指南

《SpringBoot开发中十大常见陷阱深度解析与避坑指南》在SpringBoot的开发过程中,即使是经验丰富的开发者也难免会遇到各种棘手的问题,本文将针对SpringBoot开发中十大常见的“坑... 目录引言一、配置总出错?是不是同时用了.properties和.yml?二、换个位置配置就失效?搞清楚加

Android DataBinding 与 MVVM使用详解

《AndroidDataBinding与MVVM使用详解》本文介绍AndroidDataBinding库,其通过绑定UI组件与数据源实现自动更新,支持双向绑定和逻辑运算,减少模板代码,结合MV... 目录一、DataBinding 核心概念二、配置与基础使用1. 启用 DataBinding 2. 基础布局

Python中对FFmpeg封装开发库FFmpy详解

《Python中对FFmpeg封装开发库FFmpy详解》:本文主要介绍Python中对FFmpeg封装开发库FFmpy,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐... 目录一、FFmpy简介与安装1.1 FFmpy概述1.2 安装方法二、FFmpy核心类与方法2.1 FF

Android ViewBinding使用流程

《AndroidViewBinding使用流程》AndroidViewBinding是Jetpack组件,替代findViewById,提供类型安全、空安全和编译时检查,代码简洁且性能优化,相比Da... 目录一、核心概念二、ViewBinding优点三、使用流程1. 启用 ViewBinding (模块级

基于Python开发Windows屏幕控制工具

《基于Python开发Windows屏幕控制工具》在数字化办公时代,屏幕管理已成为提升工作效率和保护眼睛健康的重要环节,本文将分享一个基于Python和PySide6开发的Windows屏幕控制工具,... 目录概述功能亮点界面展示实现步骤详解1. 环境准备2. 亮度控制模块3. 息屏功能实现4. 息屏时间