- 浏览: 206372 次
- 性别:
- 来自: 上海
文章分类
最新评论
-
xumin_minzi:
我也在使用ndk编译,ffmpeg源码放在哪个目录里面?
[原创]Android ndkr8编译 FFmpeg 0.11.1 "Happiness" -
ericchan2012:
在Dialog调用show方法之后
【原创】Android 设置Dialog的长宽和位置 -
maohualei:
求解: 我设置的时候 位置居然没有反应 dial ...
【原创】Android 设置Dialog的长宽和位置
Andriod图形系统采用的是client/server架构,server(即SurfaceFlinger)主要由c++编写,client端又分为两部分,一部分是由Java编写的应用程序接口,其中调用了一些native代码,就是由另一部分的c++来实现的,实现方式是jni调用。
代码路径:
framework/base/services/surfaceflinger/SurfaceFlinger.cpp
framework/base/core/java/android/view/Surface.java
framework/base/core/jni/android_view_Surface.cpp
frameworks/base/libs/ui/SurfaceComposerClient.cpp
每个view(每个viewgroup共享一个surface)都需要在一个surface上绘制,而surface又通过canvas(每个canvas对象对应一个bitmap)来控制view,就是控制在view上面来画图,每个surface又对应一个layer, 而最终每个surface又是链接到surfaceflinger这个server的,SurfaceFlinger负责将各个layer的front buffer合成(composite)绘制 到屏幕上,具体的底层工作由surfaceflinger这个服务来做,surfaceflinger做了一些3d的转换,以及显示,渲染等事情。
对于Framebuffer的访问:
直接 FrameBuffer 的访问方式,并对 FrameBuffer 采用双缓存技术
没有采用X-Server等方案,直接操作framebuffer,可以减少X-Server带来的通信开销。打开framebuffer, 创建两个缓冲区,(一个是on screen front buffer, 另一个back buffer, 可能位于offscreen framebuffer,也可能位于系统内存)。 源代码中函数swapBuffers将back buffer内容拷贝到front buffer中。双缓存技术使得可以在back buffer中进行绘制,随后拷贝到front buffer中进行合成并显示。
Android 创建一个 Surface 的过程:
与图形相关的代码:
1. frameworks/base/graphics/java/android/graphics
2.frameworks/base/core/java/android/view
3.frameworks/base/core/java/android/widget
4.frameworks/base/opengl/
5.frameworks/base/libs/ui
6.frameworks/base/libs/surfaceflinger
7.frameworks/base/core/jni/android/graphics
8.frameworks/base/core/jni/android/opengl
9.frameworks/base/core/jni/android/android_view_*.cpp
10.external/skia
android.graphics, android.view和android.widget
1.frameworks/base/graphics/java/android/graphics
2.frameworks/base/core/java/android/view
3.frameworks/base/core/java/android/widget
android.graphics, android.view和android.widget
提供基本的图形原语(如画点画线,设置图形上下文等),事件机制,以及开发 图形用户界面 的控件 等。
canvas 用于开发2D图形, Surface 代表一个可供图形系统绘制的surface。可在其上绘制2D活3D图形。
opengl,3d库,参考http://developer.android.com/guide/topics/graphics/opengl.html
skia和cairo功能相当,封装底 层的图形硬件 ,为上面的图形库提供最基础的操作图形硬件的原语。
参考《淺談 Google Skia 圖形處理引擎》2和 《Android 的图形引擎 Skia》3
egl_native_window_t 定义了一个本地window类 。这个类提供了对本地window 的所有描述以及用于egl (opengl 与本地图形系统的接口)操作本地windwo的所有方法。
EGLNativeSurface是egl_native_window_t的一个派生类。
EGLDisplaySurface是EGLNativeSurface的派生类。 EGLDisplaySurface 是一个非常重要的类,在这个类里,真正打开framebuffer设备(/dev/graphics/fb0 或者/dev/fb0),并将这个设备封装成EGLDisplaySurface的形式供server使用。函数mapFrameBuffer打开framebuffer, 创建两个缓冲区,(一个是on screen front 缓冲区, 另一个back buffer, 可能位于offscreen framebuffer,也可能位于系统内存 )。函数swapBuffers将back buffer内容拷贝到front buffer中。
hardware/libhardware实现了HAL(Hardware Abstraction Layer)层,copybit device是其中一个模块
参考http://blog.csdn.net/dafeifly/article/details/4679853
http://blog.csdn.net/shenbin1430/article/details/4344897
代码路径:
framework/base/services/surfaceflinger/SurfaceFlinger.cpp
framework/base/core/java/android/view/Surface.java
framework/base/core/jni/android_view_Surface.cpp
frameworks/base/libs/ui/SurfaceComposerClient.cpp
每个view(每个viewgroup共享一个surface)都需要在一个surface上绘制,而surface又通过canvas(每个canvas对象对应一个bitmap)来控制view,就是控制在view上面来画图,每个surface又对应一个layer, 而最终每个surface又是链接到surfaceflinger这个server的,SurfaceFlinger负责将各个layer的front buffer合成(composite)绘制 到屏幕上,具体的底层工作由surfaceflinger这个服务来做,surfaceflinger做了一些3d的转换,以及显示,渲染等事情。
对于Framebuffer的访问:
直接 FrameBuffer 的访问方式,并对 FrameBuffer 采用双缓存技术
没有采用X-Server等方案,直接操作framebuffer,可以减少X-Server带来的通信开销。打开framebuffer, 创建两个缓冲区,(一个是on screen front buffer, 另一个back buffer, 可能位于offscreen framebuffer,也可能位于系统内存)。 源代码中函数swapBuffers将back buffer内容拷贝到front buffer中。双缓存技术使得可以在back buffer中进行绘制,随后拷贝到front buffer中进行合成并显示。
Android 创建一个 Surface 的过程:
与图形相关的代码:
1. frameworks/base/graphics/java/android/graphics
2.frameworks/base/core/java/android/view
3.frameworks/base/core/java/android/widget
4.frameworks/base/opengl/
5.frameworks/base/libs/ui
6.frameworks/base/libs/surfaceflinger
7.frameworks/base/core/jni/android/graphics
8.frameworks/base/core/jni/android/opengl
9.frameworks/base/core/jni/android/android_view_*.cpp
10.external/skia
android.graphics, android.view和android.widget
1.frameworks/base/graphics/java/android/graphics
2.frameworks/base/core/java/android/view
3.frameworks/base/core/java/android/widget
android.graphics, android.view和android.widget
提供基本的图形原语(如画点画线,设置图形上下文等),事件机制,以及开发 图形用户界面 的控件 等。
canvas 用于开发2D图形, Surface 代表一个可供图形系统绘制的surface。可在其上绘制2D活3D图形。
opengl,3d库,参考http://developer.android.com/guide/topics/graphics/opengl.html
skia和cairo功能相当,封装底 层的图形硬件 ,为上面的图形库提供最基础的操作图形硬件的原语。
参考《淺談 Google Skia 圖形處理引擎》2和 《Android 的图形引擎 Skia》3
egl_native_window_t 定义了一个本地window类 。这个类提供了对本地window 的所有描述以及用于egl (opengl 与本地图形系统的接口)操作本地windwo的所有方法。
EGLNativeSurface是egl_native_window_t的一个派生类。
EGLDisplaySurface是EGLNativeSurface的派生类。 EGLDisplaySurface 是一个非常重要的类,在这个类里,真正打开framebuffer设备(/dev/graphics/fb0 或者/dev/fb0),并将这个设备封装成EGLDisplaySurface的形式供server使用。函数mapFrameBuffer打开framebuffer, 创建两个缓冲区,(一个是on screen front 缓冲区, 另一个back buffer, 可能位于offscreen framebuffer,也可能位于系统内存 )。函数swapBuffers将back buffer内容拷贝到front buffer中。
hardware/libhardware实现了HAL(Hardware Abstraction Layer)层,copybit device是其中一个模块
参考http://blog.csdn.net/dafeifly/article/details/4679853
http://blog.csdn.net/shenbin1430/article/details/4344897
发表评论
-
Android锁屏的问题
2012-10-19 09:17 1356本文主要讨论Android锁屏的问题,具体有2个需求: 1、 ... -
android 修改开关机铃声
2012-10-18 16:52 18631,boot铃声,在surfaceflinger.cpp中re ... -
android输入法全屏问题
2012-10-18 15:18 1345两种方法: 一是在源码里进行修改。frameworks/bas ... -
android 解锁,锁屏流程
2012-10-16 15:36 7073解锁、锁屏界面状态改 ... -
android 从横屏到竖屏状态出现黑屏
2012-10-16 12:08 1841修改WindowManagerService.java中的pe ... -
android添加reboot选项
2012-10-13 15:33 14861,GlobalAction.java中mItems = Li ... -
手机硬件
2012-10-13 13:39 1007转自http://bbs.meizu.com/thread-4 ... -
Android编译后的文件结构
2012-10-09 18:57 856Android编译完成后,将在根目录中生成一个out文件夹,所 ... -
framework下资源文件---自定义统一的系统风格
2012-09-26 17:46 12211.系统资源文件位置:framework/base/core/ ... -
Android系统默认值的设置
2012-09-26 09:25 11641开机图片: android-logo-mask.png ... -
android apk安装原理分析
2012-09-25 14:16 1793参考了网上的资料和源码,肤浅分析了下,不够深入。 An ... -
android 触屏反馈原理
2012-09-25 14:13 1789android中触屏反馈原理 HOPE mt6516 a ... -
Android下的系统Intent大全
2012-08-23 08:58 9551.从google搜索内容 Intent intent = n ... -
修改Android framework定制重启功能
2012-08-15 15:08 4239涉及到的源码(4.0) ics/frameworks/base ... -
Android makefile mk 重要参数解释及 通用模板编写
2012-08-10 09:04 17361. LOCAL_MODULE_TAGS解释: 控制此模块在什 ... -
手机的AP和BP是什么?
2012-08-06 15:56 1395手机的AP和BP根据上下文可以指代硬件和软件两种意思. 1) ... -
Android 上层界面到内核代码的完整的流程分析,以alarm为例子
2012-07-31 17:15 1338Alarm 调用流程,alarm的流程实现了从上层应用一直到下 ... -
彩信APN切换流程(framework)
2012-07-31 15:46 2054TransactionService之前的流程比较简单不在赘 ... -
我架设的程序员问答网站
2012-06-12 18:20 1209我架设了一个程序员问答网站,欢迎来http://program ... -
Android编译系统三
2012-06-15 10:33 1153android编译系统的makefile文件Android.m ...
相关推荐
Android系统数据库管理工具SQLiteExpertSetup.zip是一个专门为Android开发者设计的实用工具,用于高效地管理和操作Android设备或模拟器上的SQLite数据库。SQLite是一个轻量级、关系型数据库管理系统,广泛应用于移动...
【Android 7.0 全套教程PPT 全部手写 原创】这一教程集合涵盖了Android开发的基础到高级知识,旨在帮助教师和初学者深入理解Android 7.0系统开发。作为一套原创的手写PPT,它强调了实践操作与理论知识的结合,以直观...
Android允许开发者创建自定义的屏保,这涉及到对Android系统的深度理解和对动画、图形的处理。源代码可能包括: 1. 自定义View类,实现屏保的显示逻辑和动画效果。 2. 使用Canvas和Paint进行绘图,创建独特的视觉...
2. **Canvas绘图**:Canvas是Android图形系统的核心组件,用于在Surface上绘制各种形状、文本、图像等。在onDraw()方法中,我们可以调用Canvas的各种API,如drawRect(), drawCircle(), drawBitmap()等,来进行图形...
总的来说,"android游戏开发原创实例人物移动+子弹+跳高"是一个综合性的项目,涵盖了Android游戏开发的多个核心领域。通过这个实例,开发者不仅可以掌握基本的2D图形编程,还能学习到如何处理用户输入、实现游戏逻辑...
在Android系统中,Menu主要用于在特定时刻显示一组可执行的操作,比如在活动(Activity)顶部出现的三个点(汉堡菜单)或在对话框中。下面将详细讲解Android Menus的各个方面。 1. **Menu类型**: - **Option Menu...
根据给定的文件信息,以下是对“[DevDiv原创]Android学习系列教程实例”的关键知识点的详细解析: ### 一、Android系统结构与初始化流程 #### 1.1 Android的发展历史回顾 Android操作系统是由Google公司主导开发...
Android 图形系统剖析 Android 立体效果图片 NDK动态库的调用 Android 姿态传感器 Android 很酷的图像旋转 Android 添加音频 在Android中实现多线程断点下载 Android提高篇内容整理 android移动开发案例精选 ...
3. **图形绘制**:Android提供了Canvas和Paint类用于在屏幕上绘制。俄罗斯方块的每个方块可以用一个自定义View来表示,重写onDraw()方法,在其中用Canvas绘制不同形状的方块。 4. **游戏逻辑**:编写处理方块生成、...
* Android是一个针对移动设备的操作系统和软件平台 * 基于Linux内核,由Google和开放手机联盟OHA开发 * 允许使用Java语言来开发和管理代码 * Android开放源代码,遵从Apache Software License (ASL)2.0版本的协议 ...
通过分析这个基于Android的移动应用屏幕锁源码,我们可以学习到Android开发中的多个重要方面,包括系统权限、UI设计、服务与广播接收器的使用,以及安全策略的实施。这对于提升Android开发技能和理解系统级别的安全...
在Android推箱子游戏中,2.5D视图可能会使用OpenGL ES或其他图形库来实现,使得游戏画面更具有立体感。 游戏的核心算法是推箱子的逻辑处理,包括箱子的移动、推动、以及解谜的判定。这通常涉及到一系列的条件判断和...
1. **Android 系统环境**:Android 是一个开源的移动操作系统,广泛用于智能手机和平板电脑。在Android平台上开发应用,需要熟悉其SDK(软件开发工具包)和编程语言Java或Kotlin。 2. **游戏设计**:解谜游戏的开发...
通过分析和学习这个源码,开发者可以深入了解Android系统事件处理、图形绘制、数据存储、用户界面设计以及安全性的实践应用。这对于开发自己的Android应用,尤其是涉及用户验证和安全功能的部分,具有很大的指导价值...
OpenGL ES是Android系统中用于图形渲染的主要库,特别是在处理3D图形时。 首先,我们要理解3D游戏开发的基础。3D模型是游戏中的基本元素,它们由多边形构成,如三角形或四边形,通过纹理贴图赋予色彩和细节。在这个...
在Android开发领域,2048游戏是一款广受欢迎的轻量级数字拼图游戏,源自意大利开发者Gabriele Cirulli的原创作品。本项目是一个基于Android平台的2048游戏源代码实现,旨在帮助开发者了解游戏开发过程,学习如何在...
3. OpenGL ES:作为Android上专门的图形API,需要了解其工作原理、图形管线、着色器语言GLSL、纹理映射、光照处理等。 4. 3D图形学:理解3D坐标系统、模型矩阵、视图矩阵、投影矩阵、向量和矩阵运算等基础概念。 5...