自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

原创 Android Studio 4.0正式版发布

文章目录简介实例化使用实例化绘制矩形使用实例化数组小行星带 简介 本章对应文档 如果我们想要绘制许多相同的物体,只是他们的位置或大小不同,按照之前学习的知识,正常的做法是构建一个变化矩阵数组,通过for循环进行循环绘制,当我们绘制的物体数量逐渐增加时会发现设备越来越卡。如果我们能够将数据一次性发送...

2020-05-30 09:57:34 1265 1

原创 学习OpenGL ES for Android(二十五)— 实例化

文章目录简介实例化使用实例化绘制矩形使用实例化数组小行星带 简介 本章对应文档 如果我们想要绘制许多相同的物体,只是他们的位置或大小不同,按照之前学习的知识,正常的做法是构建一个变化矩阵数组,通过for循环进行循环绘制,当我们绘制的物体数量逐渐增加时会发现设备越来越卡。如果我们能够将数据一次性发送...

2020-03-11 15:53:27 44 0

原创 学习OpenGL ES for Android(二十四)— 几何着色器

文章目录简介 在本章之前还有两章:高级数据和高级GLSL,都是比较理论的知识,有兴趣的话可以自己学习。 简介 几何着色器(Geometry Shader)是一个可选功能,他介于在顶点和片段着色器之间,接收一组顶点数据,可以对数据进行处理,而且可以根据数据生成不止一个图形,假如你想绘制四个顶点,按照...

2020-03-06 14:52:28 106 0

原创 Android Studio 3.6 正式发布

经历众多的测试版本后,谷歌终于发布了Android Studio 3.6的正式版本,这是Project Marble结束之后的第一个版本,增加了一些小功能,完善了现有的功能,解决了功能上的问题,改善了性能。可以通过下载地址https://developer.android.com/studio#d...

2020-02-26 18:02:48 2541 0

原创 学习OpenGL ES for Android(二十三)— 立方体贴图

我们前面学过纹理贴图,我们可以用6个2D纹理的纹理构建成立方体,而立方体贴图本身就是包含6个2D纹理的纹理,它优势在于可以通过一个方向向量来进行索引/采样。只要在立方体贴图的中心点,就能使用立方体的实际位置向量来对立方体贴图进行采样。 创建立方体贴图 与2D纹理区别不大,创建立方体贴图同样是创...

2020-01-16 20:40:59 508 0

原创 学习OpenGL ES for Android(二十二)— 帧缓冲

我们学过的颜色缓冲,深度缓冲已经模板缓冲结合起来就叫帧缓冲。默认系统会定义一个帧缓冲(在移动端就是EGL创建的),而且我们还可以创建自定义的帧缓冲来替代系统创建的。大概的步骤如下: 创建一个帧缓冲并绑定; 正常绘制我们的图像(此时绘制的图像会绘制到自定义的帧缓冲上); 重新绑定到系统帧缓冲上...

2020-01-14 20:24:55 140 0

原创 学习OpenGL ES for Android(二十一)— 面剔除

首先我们绘制一个立方体,想象一下能看到几个面。一般情况下我们最多能看到三个面,极端的情况我们甚至只能看到一个面,这时候如果不绘制看不到的面,是不是非常节省资源,忽略掉看不到的面就叫面剔除。那么怎么判断一个面是否面向观察点呢,在OpenGL中用了这样一个技巧:分析顶点数据的环绕顺序(Winding ...

2020-01-09 19:53:59 146 0

原创 学习OpenGL ES for Android(二十)— 混合

在之前使用物体时没考虑过透明的情况,而混合就是除了物体透明度的一种方式。在处理物体透明时一般有两种方式,一种是直接丢弃掉透明度达到一定程度的部分;另外一种就是混合。例如一扇窗户如果是全透明的我们看到的物体就是窗口后的物体;如果它是半透明的有色玻璃时,看到的就是玻璃和窗口后物体的叠加。之前我们使用纹...

2020-01-08 16:46:08 144 0

原创 学习OpenGL ES for Android(十九)— 模板测试

模板测试的文档https://learnopengl-cn.github.io/04%20Advanced%20OpenGL/02%20Stencil%20testing/,和深度测试类似,它也会丢弃片段。启用模板测试的代码 GLES20.glEnable(GLES20.GL_STENCIL_...

2020-01-07 17:21:45 159 0

原创 学习OpenGL ES for Android(十八)— 深度测试

从这章开始学习高级OpenGL的内容。关于深度测试的理论知识,请参考https://learnopengl-cn.github.io/04%20Advanced%20OpenGL/01%20Depth%20testing/文档详细阅读,感觉文档讲得已经非常清楚了,这里就不再复制一遍了。 启用深度...

2020-01-06 20:22:34 78 0

原创 学习OpenGL ES for Android(十七)— 模型纹理

模型加载最后的一课,就是使用贴图,不再使用纯色显示物体。纹理的信息也是和材料一样存放在mtl文件中,格式也是类似的,只是一些信息以map开头的,我们先下载https://free3d.com/3d-model/crocus-flower-v1--75899.html这个模型的文件,找到mtl文件,...

2020-01-05 22:08:19 74 0

原创 学习OpenGL ES for Android(十六)— 模型材料

上一章我们简单学习了.obj模型文件的读取和使用,这章我们学习材料文件(.mtl)的读取和使用,.mtl文件是和.obj文件息息相关的。材料文件可能定义一种或多种材料,我们找一个简单带材料的模型:https://free3d.com/3d-model/-x96-slider-doorblack-v...

2020-01-04 18:11:45 65 0

原创 学习OpenGL ES for Android(十五)— 模型结构

在之前的文章中都是我们使用代码绘制的图形图像,而如果我们想要使用别人设计的模型时就需要使用到模型加载。和桌面不同的是,Android上的模型加载库推荐使用jPCT-AE,官网http://www.jpct.net/jpct-ae/,可以直接下载并参考文档学习使用。当3D大师们使用Blender、3...

2020-01-03 18:02:41 208 0

原创 学习OpenGL ES for Android(十四)— 多光源

在学习过光照,材质,投光物之后,现在我们把这些效果结合起来。我们显示这样的效果:在阳光照射下,有几个点光源,同时有一个聚光灯,此时在不同位置的物体被光照的效果。 要定义多个光源,那么就需要定义不同的结构体,同时我们分开来不同的光照计算,使代码更清晰,GLSL定义方法和C相似,不过需要先声明,然后...

2020-01-02 15:06:52 50 0

原创 学习OpenGL ES for Android(十三)— 投光物

在之前的章节学习的光源都是一个点,虽然效果不错,和现实世界的光源还有一定的差距。将光投射(Cast)到物体的光源叫做投光物(Light Caster),这里我们学习几种比较常见的光源:定向光(Directional Light),点光源(Point Light)还有聚光(Spotlight)。 ...

2020-01-02 09:31:00 46 0

原创 学习OpenGL ES for Android(十二)— 光照贴图

在之前文章中,我们模拟了物体的独特的光照特效,但是在一个面上所有点的效果都是一样的,显然和现实情况还有差距。在现实世界中,大部分物体的表面都是有不同材质的,对光的反应也不相同。在光照场景中,通常有漫反射和镜面光贴图(Map)两种方式,来精确控制物体的漫反射分量和镜面光分量以模拟现实世界的物体。 ...

2019-12-28 17:31:45 38 0

原创 学习OpenGL ES for Android(十一)— 材质

现实世界的物体各种各样,不同物体会对光产生不同的反应。陶瓷,铁片之类的物体会比墙壁,木柜的反射更强。想要模拟现实世界的光照效果就要了解物体对光线的反应效果。在我们的着色器代码中,我们定义一个结构体:Material,来表示材质。在上一节中,我们指定了一个物体和光的颜色,以及结合环境光和镜面强度分量...

2019-12-27 17:20:15 57 0

原创 学习OpenGL ES for Android(十)—冯氏光照

想要模拟真实世界的光照效果是比较困难的,我们使用一种叫做冯氏光照模型(Phong Lighting Model)的模型来实现近似的效果。冯氏光照模型的主要结构由3个分量组成:环境(Ambient)、漫反射(Diffuse)和镜面(Specular)光照。下面这张图展示了这些光照分量看起来的样子: ...

2019-12-23 21:27:46 38 0

原创 学习OpenGL ES for Android(九)—简单光照

从这篇开始学习光照相关的知识,可以先阅读文档https://learnopengl-cn.github.io/02%20Lighting/01%20Colors/,了解光照的相关概念。 光照至少需要一个光源和一个物体才能显示出的效果,那么我们就需要定义光源和物体的顶点位置和颜色,参考我们实现立方...

2019-12-20 14:49:21 287 0

原创 学习OpenGL ES for Android(八)

纹理不但可以和颜色叠加,纹理和纹理也可以叠加。纹理叠加时需要设置透明度,我们看下公式 mix (x,y, a):返回x和y的线形叠加。a的范围0-1,结果= x*(1-a) + y * a 根据上篇文章的着色器代码,修改gl_FragColor为两个纹理的叠加 vert...

2019-12-17 23:51:46 66 0

原创 学习OpenGL ES for Android(七)

上篇我们简单的学习了纹理的显示,这篇我们先把图片等比显示,然后使纹理和颜色叠加显示。 如果图片是正方形,直接使用缩放或投影即可,但是如果非正方形则需要计算图片的宽高比,然后和显示的宽高比一起计算得到真正的缩放,计算公式:比例=显示宽/显示高/(图片宽/图片高)。随后设置观察点,计算 ...

2019-12-16 17:01:36 70 0

原创 学习OpenGL ES for Android(六)

前几篇主要学习的点线面的绘制,变换和投影的实现,绘制的都是颜色,如果想要绘制图片的话就需要使用纹理。一些相关的方法如下 glGenTextures( int n, int[] textures, int offset ):生成n个纹理的index。其中n是就是数量,数组来保存这些index,of...

2019-12-14 00:03:07 60 0

原创 学习OpenGL ES for Android(五)

上篇我们学习了对平面的变换,这篇我们将要学习对立体图形的变换。立体图形也可以称为3D图形,立体图形是由平面图形组合而来的,我先看下一个立方体的结构 一个立方体有8个顶点,6个面,可以用12个三角形组合而成。我们可以使用36个(或24个)顶点的数据和glDrawArrays的方式来绘制,但是这...

2019-12-12 20:17:26 72 0

原创 学习OpenGL ES for Android(四)

在学习图形变换之前,可以先参考文档https://learnopengl-cn.github.io/01%20Getting%20started/07%20Transformations/学习基本概念。我们之前的绘制的都是静态的图像,如果我们使用改变顶点坐标的方式来让图像变换起来是非常麻烦的,而且...

2019-12-11 17:39:48 148 0

原创 学习OpenGL ES for Android(三)

上篇我们看到绘制点和线,在平面上,点和线组成了面,我们先看绘制三角形。 glDrawArrays的mode参数除了点和线,还有三角,是这三个:GL_TRIANGLE,GL_TRIANGLE_STRIP和GL_TRIANGLE_FAN。他们的绘制规则如下图所示, GL_TRIANGLE:每三...

2019-12-10 17:17:37 241 0

原创 学习OpenGL ES for Android(二)

本章将学习OpenGL ES中点和线的绘制,在绘制之前需要先了解这些:坐标系统;着色器;GLSL(OpenGL ES Shading Language),OpenGL ES着色语言; 坐标系统 和android布局的坐标不同,OpenGL是一个右手坐标系。简单来说,就是正x轴在你的右手边,正y...

2019-12-09 19:21:54 512 0

原创 学习OpenGL ES for Android(一)

OpenGL是用于渲染2D、3D矢量图形的跨语言、跨平台的应用程序编程接口(API),而在嵌入式和移动平台的版本是OpenGL ES。Android最初就支持OpenGL ES的1.0版本,到现在已经支持到最新的3.2版本,下面的支持变化图 当然这个版本支持不是绝对的,还有看硬件是否支持,例...

2019-12-07 17:42:07 163 0

原创 Android Studio添加自定义Template

在使用Android Studio的过程中,你会发现很多常用的快捷生成代码提示工具,例如在java代码中输入fori,按下Tab,就会自动生成一段for循环代码,非常方便。如下所示 for (int i = 0; i <; i++) { } 其实这就是Andr...

2019-11-03 22:47:28 112 0

原创 Android Studio tools attributes

1

2019-11-02 23:50:18 299 0

原创 Android Fragments新功能

在刚刚过去Android Dev Summit 2019中,提到很多项目,如依旧大力推广的Kotlin,还有Jetpack Compose,CameraX,Room等新功能。其中也提到了android fragments,发布了androidx.fragment-1.2.0-rc01。 frag...

2019-10-29 23:32:40 496 0

原创 初探ViewBinding

视图访问的方式有常用的findViewById,ButterKnife等多种方式,这些方式的各方面对比如下 如上图所示,在简明、编译安全和编译速度上都各有优势,那么有没有一种方式可以一石"三"鸟呢。谷歌在Android Studio 3.6 Canary 11版本中正式推...

2019-10-27 16:40:04 8175 4

原创 Android Studio 3.5.1发布

Android Studio 3.5.1版本主要提高了稳定性和性能,并包含了一些bug修复。 1.Gradle Issue #136806086:使用动态功能时导致lintVitalRelease任务失败。 2.Profilers Issue #136112662:Android Stud...

2019-10-05 23:56:44 1486 0

原创 TextView的drawableTint兼容实现方法

在ImageView中有tint属性,用于设置图片的颜色,其实现原理是使用了ColorFilter的PorterDuffColorFilter,来重新生成drawable,关键代码是:读取tint,设置ColorFilter,生成新的Drawable,重新绘制 // 读取tint int ti...

2019-09-28 12:37:14 576 0

原创 ripple的使用细则

当谷歌推出Material Design设计规范后,谷歌的产品都开始按照这一规范进行设计,包括了Android Mobile, Android Table, Web Chrome 在内的所有平台。按压产生水波纹(ripple)这一效果也登上舞台,在Android中的使用就是ripple xml资源...

2019-09-28 00:23:52 181 0

原创 实现APNG图片解码及缩放显示

在实现GIF图片缩放的文章中,我们使用了GIF解码器来实现GIF图片的解码,然后修改了SSIV的代码来实现动图的缩放。而APNG也是一种动态图片,是在APNG格式上进行扩展而来的,关于apng的文档参考这个链接,关于PNG的详细资料参考这个链接。 APNG的结构图 普通的png的结构是Si...

2019-09-22 23:08:01 329 0

原创 调用系统照相机拍摄视频

调用系统相机拍照使用的比较频繁,相关代码如下 Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); Uri fileUri; if (Build.VERSION.SDK_INT >= Build.VERSION_CODE...

2019-09-19 00:44:11 79 0

原创 okhttp上传文件出现OOM

okhttp是一个比较优秀的库,使用非常广泛,相信大家都比较熟悉。在最近的使用中却发现了一个OOM的情况,在上传比较大的图片或视频时会发生,日志如下 Caused by: java.lang.OutOfMemoryerror: Failed to alocate a 267201798 byt...

2019-09-18 23:56:25 692 0

原创 多渠道打包时修改apk的输出目录

在使用productFlavors进行多渠道打包时,在打release包时可能需要对所有的release包进行拷贝到一个目录中,这里有两种方法,一种是直接修改输出的目录,一种是拷贝到另外的目录中。 1.修改输出目录:在以前版本的gradle中可以使用outputFile的方式,而新版本只能使用o...

2019-09-15 23:28:26 210 0

原创 实现GIF图片的缩放

在图片选择器中提到gif文件是使用了普通的ImageView来实现的,如果需要实现gif图片的缩放那么就需要自定义SSIV。 首先需要GIF解码器,可以选择使用glide的gif decoder,也可以使用原版的https://gist.github.com/devunwired/4479231...

2019-09-15 22:29:54 91 0

原创 设计一个图片选择器(下篇)

在前两篇中已经完成了数据的展示,就剩下图片显示功能。可以自己写图片加载库,或者使用当前使用比较广泛的图片加载库例如Picasso,Glide或Fresco。自己写的话还是比较麻烦,需要处理内存管理,性能,图片处理等方面,而且如gif等动图就无法加载。选择库的话Picasso有些弱了,Fresco又...

2019-09-12 23:41:00 41 0

提示
确定要删除当前文章?
取消 删除