
Android
文章平均质量分 74
昉钰
这个作者很懒,什么都没留下…
展开
-
DataBinding原理----双向绑定(4)
我们知道单向绑定是在数据发生变化的时候能够通知到UI,让数据的变化能够及时反应到UI上;而双向绑定则是不仅要让数据的变化能够反馈到UI上,而且还要让UI的变化也能够反馈到数据上,前面已经分析了数据的变化如何反馈到UI上,所以这篇文章就只分析UI的变化是如何反馈到数据上。 为了方便说明,我们使用如下的UI进行演示: 界面下方有个格式化时间,它是一个TextView,这里原创 2022-12-04 21:52:24 · 2193 阅读 · 1 评论 -
DataBinding原理----单向数据绑定(3)
在分析源码之前,在心里要有一个概念就是这里的数据绑定是基于观察者模式来实现的,所以在阅读这部分源码的时候要着重分清楚,谁是观察者谁是被观察者,把这个思想放在心理,这样就能抓住代码的本质。原创 2022-11-10 21:51:03 · 1660 阅读 · 0 评论 -
DataBinding原理----布局的加载(2)
上一章说明了DataBinding生存的类之间关系,现在这里来看看布局是如何加载的原创 2022-11-09 23:01:45 · 1034 阅读 · 0 评论 -
DataBinding原理----类关系说明(1)
DataBinding生存了哪些类?你都知道他们的是什么关系吗?原创 2022-11-08 22:58:13 · 826 阅读 · 0 评论 -
Part I 空气曲棍球 Chapter4 (4.3 Adding a New Color Attribute)
4.3 增加新的颜色属性(Adding a New Color Attribute)我们已经通过加入中心点更新了我们桌面顶点结构,现在可以对每个顶点增加一个颜色属性了,现在更新到到整个顶点数组,如下代码所示://AirHockey2/src/com/airhockey/android/AirHockeyRenderer.javafloat[] tableVerticesWithTria...原创 2019-01-17 23:58:11 · 240 阅读 · 0 评论 -
Part I 空气曲棍球 Chapter4 (4.2 Introducing Triangle Fans)
4.2 引入Triangle Fans(Introducing Triangle Fans) 在新的顶点结构中,中心处将会有一个顶点坐标,这样的话绘制矩形就必须采用四个三角形而不是两个了。我们把新的中心点放置在点(0,0)处。现在打开AirHockeyRenderer.java,并将三角形顶点坐标更新为如下://AirHockey2/src/com/airhockey/androi...原创 2019-01-17 23:31:12 · 207 阅读 · 0 评论 -
Part I 空气曲棍球 Chapter4 (4.1 Smooth Shading)
4.1 平滑着色(Smooth Shading)在第二章中,我们学习了如何使用uniform类型变量定义要绘制的三角形的颜色,如下图所示:我们已经知道OpenGL只支持绘制点、线、三角形的命令,如果我们想要绘制其它形状那只能从这三种形状组合而成。由于我们只能绘制这三种图元,我们如何使用多种不同的颜色和着色器绘制出一个复杂的场景呢?有一种方法是使用大量的三角形进行绘制,而每一个三角...原创 2019-01-16 22:47:16 · 334 阅读 · 0 评论 -
Part I 空气曲棍球 Chapter4 Adding Color and Shade)
由于后面的章节篇幅比较大点,所以我们会把每一章单独分成几篇文章来写(后面将采用这种模式,除非篇幅比较小)。在实际中,每个物体都会有不同的颜色;比如我们的家里面的墙壁,它都是使用同一种颜色进行粉刷的,但如果我们从不同的角度去看,就会发现有些地方比较明亮有些地方比较暗,问题的关键在于墙壁与环境光的角度问题。我们的大脑使用这些细微的差别进行合成视觉曲线进而表达我们所看到的东西,艺术家们很早就使用这种...原创 2019-01-16 22:39:36 · 200 阅读 · 0 评论 -
Part I A Simple game of air hockey(空气曲棍球) Chapter3 Compiling Shaders and Drawing to the Screen)
Chpater 3 编译着色器并绘制到屏幕上(Compiling Shaders and Drawing to the Screen) 这上章将在上章的基础上进行学习,在这里一章首先学习如何编译、链接我们已经定义好的着色器并得到一个OpenGL着色器程序,然后我们利用这个着色器程序把我们的球台桌面绘制到屏幕上。 现在打开AirHockey1,然后在上章的基础上继续完善我们的程序...原创 2019-01-13 21:29:12 · 1124 阅读 · 0 评论 -
Part I A Simple game of air hockey(空气曲棍球)-Chapter2 Defining Vertices and Shaders
上一章节简单介绍了OpenGL ES 2.0开发的简单入门知识,实际上你学没有真正进入OpenGL ES 2.0的世界,从这一章开始将会一步步的带着你开始你的OpenGL ES 2.0实战之旅,这里会最终会实现一个“空气曲棍球”的实例,学习完这一阶段的教程,你将了解如何绘制常规的几何图形,如三角形、四边形、正方体、球体,什么是顶点着色器,什么是片元着色器,如何进行纹理贴图。下面正式进入主题。...原创 2019-01-10 23:00:03 · 698 阅读 · 0 评论 -
一、开始前的准备
1.Install the tools开发工具:AndroidStudio。设备:支持OpenGL ES2.0的一台真机,系统至少API10(Android2.3.3,Gingerbread)2 Create our first program 现在我们的开发工具已经安装并且已经配置好,现在我们开始创建第一个OpenGL程序。这个程序很简单:它的功能功能仅仅是初始化Op...原创 2019-01-09 23:21:15 · 477 阅读 · 0 评论 -
Part I 空气曲棍球 Chapter7(7.5 Adding Classes for Our Shader Programs)
7.5增加着色器程序类(AddingClassesforOurShaderPrograms) 这一部分将会针对纹理着色器及颜色着色器创建两个不同的类,我们将会使用纹理着色器程序绘制桌面,使用着色器程序绘制小球;同时我们将会建立一个基类以便复用一些相同的功能函数,因为现在中心分隔线已经是纹理的一部分了所以并不需要考虑绘制;如下图是即将要创建的类结构: 现在在...原创 2019-03-01 10:03:01 · 178 阅读 · 0 评论 -
Part I 空气曲棍球 Chapter7(7.4 Creating a New Class Structure for Our Vertex Data)
7.4 创建新类结构(Creating a New Class Structure for Our Vertex Data) 首先我们将会建立不同的类,每个类代表一个物理实体;其中一个类代表桌面,另一个代表小球,中心线则不需要,因为在纹理图片中已经包含了。 我们还会专门创建一个类包装实际的顶点数据并减少代码重复,最终的类结构将会如下: 我们将会创建类Mallet管理...原创 2019-02-19 21:56:33 · 213 阅读 · 0 评论 -
Part I 空气曲棍球 Chapter4 (4.4 Rendering with the New Color Attribute)
4.4 使用新的颜色进行渲染(Rendering with the New Color Attribute) 现在我们已经在顶点数据中增加了一个颜色属性数据并且已经更新了相应的顶点着色器及片元着色器,下一步是移除老的使用uniform类型数据进行绘制的代码并且告诉OpenGL使用顶点属性颜色进行绘制。4.4.1 更新常量(Updating Constants) 在Air...原创 2019-01-19 12:56:57 · 196 阅读 · 0 评论 -
Part I 空气曲棍球 Chapter7(7.6 Drawing Our Texture)
7.6 绘制纹理(Drawing Our Texture) 现在我们已经把顶点数据与操作顶点数据的类解耦,接下来修改下render类以绘制纹理;打开AirHockeyRenderer并把除了onSurfaceChanged()以外的其它都部分删除,并添加如下的成员与构造函数://AirHockeyTextured/src/com/airhockey/android/AirHocke...原创 2019-03-02 17:37:58 · 282 阅读 · 0 评论 -
Part I 空气曲棍球 Chapter9(9.1 Adding Touch Support to Our Activity)
9.1 增加触摸反馈(Adding Touch Support to Our Activity) 这里将会拦截Android事件系统中的事件,首先持有渲染器的一个引用,打开AirHockeyActivity然后修改setRenderer(),代码如下://AirHockeyTouch/src/com/airhockey/android/AirHockeyActivity.java...原创 2019-03-30 13:01:36 · 191 阅读 · 0 评论 -
Part I 空气曲棍球 Chapter9(Adding Touch Feedback)
通过支持触控反馈获得好的用户交互体验是很多应用和游戏的基石,这样会让用户觉得他们能真正使用一些真实的东西,即使用户只是对着空白的屏幕也是如此。一些手机游戏之所以非常流行只是因为增加了一些触控而已;此时我想到了一个与鸟类有关的游戏(愤怒的小鸟?)。 现在我们通过OpenGL绘制的空气曲棍球看起来已经比较好了,但是假如我们能够真正使用的话岂不是更好?在这一章节里,我们首先会增加触摸反馈,然后...原创 2019-03-29 20:47:01 · 194 阅读 · 0 评论 -
Part I 空气曲棍球 Chapter8(Building Simple Objects)
我们的空气曲棍球项目已经捣鼓好久了,现在绘制出来的桌面也是呈现出了一个好视角并且配合纹理映射后看起来更好了;然而由于球棍只是一个点所以看起来并不像真正的球棍,你能想象下使用像一个点一样的球棍打球会是什么样的体验吗?很多应用程序都是通过组合简单的形体来绘制一些复杂的物体,在这一章里面我们将学习如何使用简单的形体绘制一个更好的球棍。 现在的应用里面还缺少一种简单的方法去放置、旋转及移动...原创 2019-03-07 22:00:34 · 419 阅读 · 0 评论 -
Part I 空气曲棍球 Chapter8(8.6 Integrating Our Changes)
8.6 代码集成(Integrating Our Changes) 这一章节最困难的部分已经完成,我们学习了如何使用基本的几何体组合成一些复杂的形体,同时相应的着色器也已经更新了。下一步是把前面的修改集成到AirHockeyRenderer中,同时我们还会学习如何通过添加view矩阵以反映OpenGL中一个比较重要的概念Camera。 但是为什么我们还需要添加另外一个矩阵呢?我们...原创 2019-03-10 20:38:20 · 264 阅读 · 0 评论 -
Part I 空气曲棍球 Chapter8(8.5 Updating Shaders)
8.5 更新着色器(Updating Shaders) 我还需要更新相应的着色器,我们之前使用atrribute类型属性定义了球棍或者冰球的顶点坐标,这里我们将会使用uniform类型定义相应的颜色,现在在ShaderProgram中加入一个新的常量,如下代码://AirHockeyWithImprovedMallets/src/com/airhockey/android/prog...原创 2019-03-10 16:45:43 · 192 阅读 · 0 评论 -
Part I 空气曲棍球 Chapter8(8.4 Updating Our Objects)
8.4 更新相应类(Updating Our Objects) 现在我们已经有了一个ObjectBuilder对象,时候更新Mallet类了因为我们不再把它画成一个点了。我们还需要增加新类Puck,在相同包下面新建类Puck,并添加如下代码://AirHockeyWithImprovedMallets/src/com/airhockey/android/objects/Puck.j...原创 2019-03-10 16:24:38 · 204 阅读 · 0 评论 -
Part I 空气曲棍球 Chapter8(8.3 Adding an Object Builder)
8.3构造形体(AddinganObjectBuilder) 现在开始创建我们的构建者类,在包com.airhockey.android.objects中创建类ObjectBuilder,并添加如下代码://AirHockeyWithImprovedMallets/src/com/airhockey/android/objects/ObjectBuilder.java...原创 2019-03-10 13:25:26 · 246 阅读 · 0 评论 -
Part I 空气曲棍球 Chapter8(8.2 Adding a Geometry Class)
8.2 定义形体(Adding a Geometry Class) 我们现在已经明确的知道需要些什么去构建冰球及球棍;为了构建冰球,我们使用triangle fan命令构建冰球的顶部,再使用triangle strip构建冰球的边缘;为了构建球棍,我们需要使用两个triangle fan及两个triangle strip;为了使得构建这些形体变得更容易,我们将会增加一个定义基本形体的Ge...原创 2019-03-09 17:33:51 · 200 阅读 · 0 评论 -
Part I 空气曲棍球 Chapter8(8.1 Combining Triangle Strips and Triangle Fans)
8.1 三角形绘制(Combining Triangle Strips and Triangle Fans) 在开始构建球棍或者冰球之前,我们可以站在一个更高的角度上来想象下,一个冰球可以使用一个扁平的圆柱来构建,如下图所示: 而对于球棍则稍微复杂些,可以使用两个圆柱来构建,把其中一个放在另外一个上面,如下图所示: 我知道你在想什么,一个真实的球棍并不是两个...原创 2019-03-09 16:53:17 · 269 阅读 · 0 评论 -
Part I 空气曲棍球 Chapter7(7.3 Creating a New Set of Shaders)
7.3 创建新着色器(Creating a New Set of Shaders) 在我们把纹理绘制到屏幕上之前,我们还需要创建一些着色器,这些着色器将会接收纹理图片数据然后把这些数据应用到将会绘制的片元上去;这些着色器与之前我们使用的着色器类似,为了支持纹理稍微变动了下而已。7.3.1 创建顶点着色器(Creating the New Vertex Shader) 在目录...原创 2019-02-19 21:30:39 · 220 阅读 · 0 评论 -
Part I 空气曲棍球 Chapter7(7.2 Loading Textures into OpenGL)
7.2 加载纹理(Loading Textures into OpenGL)首先我们需要把图片文件数据加载到OpenGL中,在com.airhockey.android.util包中创建类TextureHelper,并添加如下签名的函数://AirHockeyTextured/src/com/airhockey/android/util/TextureHelper.javapubli...原创 2019-02-18 22:05:02 · 251 阅读 · 0 评论 -
Part I 空气曲棍球 Chapter7(7.1 Understanding Textures)
7.1 理解纹理(Understanding Textures) 在OpenGL中纹理可以用来代表图形、图像或者程序生成的数据,每一个二维的纹理都是由我们之前讨论过的类似于片元或者像素的许多的像素元素组成,最普通的使用纹理的方法是直接从文件中加载一个图像。 我们将会使用如下所示的一张图片作为纹理并显示为桌面的表面。 这里推荐把纹理图片储存在项目的目录/res/dra...原创 2019-02-17 12:13:46 · 211 阅读 · 0 评论 -
Part I 空气曲棍球 Chapter5 (5.2 Working with a Virtual Coordinate Space)
5.2 虚拟坐标系(Working with a Virtual Coordinate Space) 为了适配屏幕旋转的情况,我们需要调整之前使用的坐标空间,如何调整呢?那就是不能直接使用规范化设备坐标而是需要调整会使用虚拟坐标空间。为了使用OpenGL能够正确的进行渲染,我们需要找一种把虚拟坐标空间转换到规范化坐标空间的方法。而为了使用我们的球台桌面的竖屏与横屏情况下都得到正确的显示,...原创 2019-01-19 22:32:47 · 200 阅读 · 0 评论 -
Part I 空气曲棍球 Chapter5 (5.1 We Have an Aspect Ratio Problem)
5.1 屏幕比例问题(We Have an Aspect Ratio Problem) 现在我们知道在OpenGL里面所有渲染的东西在x轴及y轴上都限制在[-1,+1]范围内,z轴上也存在同样的限制。在这个范围内的坐标有一个特殊的称呼:规范化坐标空间,同时独立于屏幕的大小和形状。不幸的是因为独立于实际屏幕尺寸,假如我们直接使用这些坐标那将会产生一些问题,比如横屏模式下的挤压问题。 ...原创 2019-01-19 18:00:32 · 168 阅读 · 0 评论 -
Part I 空气曲棍球 Chapter5 调整屏幕比例(Adjusting to the Screen’s Aspect Ratio)
你也许你还没注意到,但是我们现在的应用有一个屏幕比例问题。你可以运行上一章中的应用然后旋转屏幕,在竖屏模式下如图1所示,横屏模式如图2所示:图 1 (横屏模式)图 2 (竖屏模式) 桌面在横屏模式下产生了挤压,原因是我们直接把坐标传递给了OpenGL,而没了考虑屏幕比例。每一个2D和3D应用都有一个共同问题,那就是如何决定在屏幕上显示什么及如何根据屏幕尺寸进行显示...原创 2019-01-19 16:50:05 · 195 阅读 · 0 评论 -
View的事件传递机制-原理介绍(1)
日期:2015-03-13类型:View的事件传递机制 Android 中与 Touch 事件相关的方法包括:dispatchTouchEvent(MotionEvent ev)、onInterceptTouchEvent(MotionEvent ev)、onTouchEvent(MotionEvent ev);能够响应这些方法的控件包括:ViewGroup、Vie原创 2015-03-13 17:52:26 · 581 阅读 · 0 评论 -
View的事件传递机制-实例分析(2)
上一篇view的事件传递机制介绍的文章中,介绍了view的事件机制相关原理,主要围绕与 Touch 事件相关方法:dispatchTouchEvent(MotionEvent ev)、onInterceptTouchEvent(MotionEvent ev)、onTouchEvent(MotionEvent ev)展开分析,这里就围绕这几个方法进行实例分析,实例截图如下:原创 2015-03-16 23:00:40 · 420 阅读 · 0 评论 -
Android文件上传与下载
文件上传与下载分为客户端与服务器端,这里客户端为Android终端,服务器为web服务器,下面分别建立客户端与服务器端。 (一)客户端 客户端界面如下:上面的界面非常简单,左边一个按钮点击后执行上传动作,左右的图片就是要上传的图片,重点看看上传的代码:public static String uploadFiles(List files,String RequestU原创 2015-05-19 19:55:40 · 932 阅读 · 0 评论 -
Activity生命周期(二)
这里用主要是说明带屏幕旋转的Activity的生命周期,由于Android的多样性在诸多版本之间会存在稍许不同,这里以三星Galaxy Note3(Android4.4.2)的测试来说明,测试代码如下:public class MainActivity extends Activity {private String TAG = "MainActivity";/**原创 2015-03-21 10:13:13 · 370 阅读 · 0 评论 -
Activity生命周期(一)
这里用一个实例来说明生命周期的变化,代码结构大致是这样,两个Activity分别为MainActivity、FirstActivity,在MainActivity中可以跳转到FirstActivity,两个Activity都覆盖了常见的生命周期方法,如下:1 onCreate 2 onRestart 3 onStart 4 onResume 5 onPause 6 onSa原创 2015-03-21 10:12:00 · 322 阅读 · 0 评论 -
XML解析
现在在android平台上可以有三种对xml文件的解析方式,分别是DOM、SAX、PULL,他们各有有优缺点,如下:1 Dom解析是将xml文件全部载入,组装成一颗dom树,然后通过节点以及节点之间的关系来解析xml文件;从全部载入这点可知这种方式比较消耗内存。DOM是文档对象模型解析,构建文档的分层语法结构,在内存中建立DOM树,DOM树的节点以对象的形式来标识,文档解析文成以后,文档的原创 2015-06-01 15:10:46 · 313 阅读 · 0 评论 -
Fragment的基本使用技巧之add(1)
FragmentTransaction.add把fragment加入到当前的container里面去,commit之后fragment就会自动执行它的生命周期方法,下面是一个简单的fragment使用方法:package com.example.fragmentdemo;import java.util.List;import com.example.fragmentdemo.frag原创 2015-05-21 12:50:07 · 1175 阅读 · 0 评论 -
Part I 空气曲棍球 Chapter5 (5.3 Linear Algebra 101)
5.3 线性代数基础(Linear Algebra 101) 在OpenGL中向量和矩阵用的非常多,其中一个非常重要的应用就是设置正交投影和透视投影。使用矩阵进行投影你只需要做一些矩阵的加法与乘法,而且现代GPU是非常善于做这类工作。 现在让我们简单回忆下相关的一些基础,假如你不记得了、记性不好或者压根没有学过相关课程,那也不用担心;这里将会学习一些矩阵基础计算,一旦你理解了这些...原创 2019-01-24 23:10:06 · 206 阅读 · 0 评论 -
Part I 空气曲棍球 Chapter5(5.4 Defining an Orthographic Projection)
5.4 定义正侧投影(Defining an Orthographic Projection) 我们使用包android.opengl 下面的Matrix类定义一个正侧投影,在Matrix中有一个方法orthoM()将会为我们生存一个正侧投影矩阵,在这里我们将会使用这个投影来改变坐标空间,正如我们将会看到的,一个正侧投影矩阵与平移矩阵非常像。 下面来仔细看看orthoM()的方法参...原创 2019-02-02 10:35:50 · 202 阅读 · 0 评论 -
Part I 空气曲棍球 Chapter5(5.5 Adding an Orthographic Projection)
5.5 增加正侧投影(Adding an Orthographic Projection) 现在我们可以在项目中添加正交投影并且修复桌面压缩的问题了。5.5.1 更新着色器(Updating the Shader) 首先是更新着色器以便使用我们提供的矩阵对顶点位置进行变换,如果你还没有打开项目AirHockeyOrtho,那现在打开并按照如下代码更新着色器simple_ve...原创 2019-02-02 11:40:49 · 174 阅读 · 0 评论