- 博客(61)
- 资源 (1)
- 收藏
- 关注
原创 androidx中ViewPager导致的死循环绘制问题
目录简介查找原因onStop和onDestroy回调延时的原因在处理什么消息?WindowInsets总结简介最近项目升级到了androidx,突然出现了一些问题,Activity的onStop和onDestroy变得很慢,基本都在十秒了,导致一些页面表现不正常,于是来着手来解决这个问题。查找原因onStop和onDestroy回调延时的原因先看下onStop和onDestroy回调延时的原因,找到一篇文章写得很好:深入分析Android中Activity的onStop和onDestroy()回调
2022-01-29 18:00:00 1067
原创 Android Studio Bumblebee (2021.1.1)稳定版发布
文章目录简介Build and DeployNew Device Manager(全新改版的设备管理器 )ADB over Wi-FiLayout ValidationDevelop & Profile改进的CPU Profiler混淆代码的智能编辑器IntelliJ IDEA 2019.3更新Kotlin Android live templatesClangd support for C++Build构建分析器Java 8 Language library desugaring in D8 an
2022-01-28 14:28:21 4520
原创 解决AndResGuard在gradle 7.0上报错的问题
当Android Studio升级到Aretic Fox版本后,APG的版本也升级到了7.0,而gradle的版本也要随之升级到7.0了(参考官方文档)而AndResGuard在gradle升级到7.0后会出现错误,如下Some problems were found with the configuration of task ':app:resguardProdRelease' (type 'AndResGuardTask'). - In plugin 'AndResGuard' type 'c
2021-11-23 16:34:44 5761 4
原创 Android Studio 4.1正式版发布
文章目录简介DesignMaterial Design Components updatesDevelopDatabase Inspector直接在Android Studio中运行Android模拟器Dagger Navigation SupportUse TensorFlow Lite modelsBuild & TestAndroid Emulator - Foldable Hinge Support更新Apply ChangesExport C/C++ dependencies from A
2020-10-15 18:56:41 23616 8
原创 Android Studio 4.0正式版发布
文章目录简介实例化使用实例化绘制矩形使用实例化数组小行星带简介本章对应文档如果我们想要绘制许多相同的物体,只是他们的位置或大小不同,按照之前学习的知识,正常的做法是构建一个变化矩阵数组,通过for循环进行循环绘制,当我们绘制的物体数量逐渐增加时会发现设备越来越卡。如果我们能够将数据一次性发送给GPU,然后使用一个绘制函数让OpenGL利用这些数据绘制多个物体,就会更方便了。这就是实例化(Instancing)。实例化实例化只能在OpenGL ES 3.0之后才能使用,实例化会使用到这些方法gl
2020-05-30 09:57:34 18354 2
原创 学习OpenGL ES for Android(二十五)— 实例化
文章目录简介实例化使用实例化绘制矩形使用实例化数组小行星带简介本章对应文档如果我们想要绘制许多相同的物体,只是他们的位置或大小不同,按照之前学习的知识,正常的做法是构建一个变化矩阵数组,通过for循环进行循环绘制,当我们绘制的物体数量逐渐增加时会发现设备越来越卡。如果我们能够将数据一次性发送给GPU,然后使用一个绘制函数让OpenGL利用这些数据绘制多个物体,就会更方便了。这就是实例化(In...
2020-03-11 15:53:27 602
原创 学习OpenGL ES for Android(二十四)— 几何着色器
文章目录简介在本章之前还有两章:高级数据和高级GLSL,都是比较理论的知识,有兴趣的话可以自己学习。简介几何着色器(Geometry Shader)是一个可选功能,他介于在顶点和片段着色器之间,接收一组顶点数据,可以对数据进行处理,而且可以根据数据生成不止一个图形,假如你想绘制四个顶点,按照以前的方式,需要for循环四次,每次都顶点数据进行处理,最后传入顶点着色器中。而集合着色器就做了这样一...
2020-03-06 14:52:28 1113
原创 Android Studio 3.6 正式发布
经历众多的测试版本后,谷歌终于发布了Android Studio 3.6的正式版本,这是Project Marble结束之后的第一个版本,增加了一些小功能,完善了现有的功能,解决了功能上的问题,改善了性能。可以通过下载地址https://developer.android.com/studio#downloads下载,或者使用AS中的Help菜单下的Check for Updates进行应用内升级...
2020-02-26 18:02:48 3476
原创 学习OpenGL ES for Android(二十三)— 立方体贴图
我们前面学过纹理贴图,我们可以用6个2D纹理的纹理构建成立方体,而立方体贴图本身就是包含6个2D纹理的纹理,它优势在于可以通过一个方向向量来进行索引/采样。只要在立方体贴图的中心点,就能使用立方体的实际位置向量来对立方体贴图进行采样。创建立方体贴图与2D纹理区别不大,创建立方体贴图同样是创建纹理,只是我们的glBindTexture的方法的参数要变为GLES20.GL_TEXTURE_CU...
2020-01-16 20:40:59 1468
原创 学习OpenGL ES for Android(二十二)— 帧缓冲
我们学过的颜色缓冲,深度缓冲已经模板缓冲结合起来就叫帧缓冲。默认系统会定义一个帧缓冲(在移动端就是EGL创建的),而且我们还可以创建自定义的帧缓冲来替代系统创建的。大概的步骤如下:创建一个帧缓冲并绑定; 正常绘制我们的图像(此时绘制的图像会绘制到自定义的帧缓冲上); 重新绑定到系统帧缓冲上; 绘制我们自定义帧缓冲的内容(此时我们可以对帧缓冲的内容进行各种处理以此实现各种效果)。创建帧缓...
2020-01-14 20:24:55 837
原创 学习OpenGL ES for Android(二十一)— 面剔除
首先我们绘制一个立方体,想象一下能看到几个面。一般情况下我们最多能看到三个面,极端的情况我们甚至只能看到一个面,这时候如果不绘制看不到的面,是不是非常节省资源,忽略掉看不到的面就叫面剔除。那么怎么判断一个面是否面向观察点呢,在OpenGL中用了这样一个技巧:分析顶点数据的环绕顺序(Winding Order)。环绕顺序绘制三角形时用到了三个顶点,这三个顶点的顺序就是我们提到的环绕顺序。三个...
2020-01-09 19:53:59 479
原创 学习OpenGL ES for Android(二十)— 混合
在之前使用物体时没考虑过透明的情况,而混合就是除了物体透明度的一种方式。在处理物体透明时一般有两种方式,一种是直接丢弃掉透明度达到一定程度的部分;另外一种就是混合。例如一扇窗户如果是全透明的我们看到的物体就是窗口后的物体;如果它是半透明的有色玻璃时,看到的就是玻璃和窗口后物体的叠加。之前我们使用纹理的颜色都是纹理的rgb颜色,没有用到最后一个alpha(也就是透明度),alpha的范围是0到1,1...
2020-01-08 16:46:08 684
原创 学习OpenGL ES for Android(十九)— 模板测试
模板测试的文档https://learnopengl-cn.github.io/04%20Advanced%20OpenGL/02%20Stencil%20testing/,和深度测试类似,它也会丢弃片段。启用模板测试的代码GLES20.glEnable(GLES20.GL_STENCIL_TEST);注意:在Android中,只使用这句是无法启用模板测试的,还需要使用下面代码配置GLS...
2020-01-07 17:21:45 518
原创 学习OpenGL ES for Android(十八)— 深度测试
从这章开始学习高级OpenGL的内容。关于深度测试的理论知识,请参考https://learnopengl-cn.github.io/04%20Advanced%20OpenGL/01%20Depth%20testing/文档详细阅读,感觉文档讲得已经非常清楚了,这里就不再复制一遍了。启用深度测试GLES20.glEnable(GLES20.GL_DEPTH_TEST);每次渲染时还...
2020-01-06 20:22:34 320
原创 学习OpenGL ES for Android(十七)— 模型纹理
模型加载最后的一课,就是使用贴图,不再使用纯色显示物体。纹理的信息也是和材料一样存放在mtl文件中,格式也是类似的,只是一些信息以map开头的,我们先下载https://free3d.com/3d-model/crocus-flower-v1--75899.html这个模型的文件,找到mtl文件,同样根据https://en.m.wikipedia.org/wiki/Wavefront_.obj_...
2020-01-05 22:08:19 388
原创 学习OpenGL ES for Android(十六)— 模型材料
上一章我们简单学习了.obj模型文件的读取和使用,这章我们学习材料文件(.mtl)的读取和使用,.mtl文件是和.obj文件息息相关的。材料文件可能定义一种或多种材料,我们找一个简单带材料的模型:https://free3d.com/3d-model/-x96-slider-doorblack-v1--87538.html,打开其中的mtl看下文件格式,同样我们参考https://en.m.wik...
2020-01-04 18:11:45 312
原创 学习OpenGL ES for Android(十五)— 模型结构
在之前的文章中都是我们使用代码绘制的图形图像,而如果我们想要使用别人设计的模型时就需要使用到模型加载。和桌面不同的是,Android上的模型加载库推荐使用jPCT-AE,官网http://www.jpct.net/jpct-ae/,可以直接下载并参考文档学习使用。当3D大师们使用Blender、3DS Max或者Maya等软件制作模型后,可以导出例如.blend,.x3d,.obj等等各种类型的文...
2020-01-03 18:02:41 453
原创 学习OpenGL ES for Android(十四)— 多光源
在学习过光照,材质,投光物之后,现在我们把这些效果结合起来。我们显示这样的效果:在阳光照射下,有几个点光源,同时有一个聚光灯,此时在不同位置的物体被光照的效果。要定义多个光源,那么就需要定义不同的结构体,同时我们分开来不同的光照计算,使代码更清晰,GLSL定义方法和C相似,不过需要先声明,然后再定义,如下void calc(); //声明一个函数void calc() //定...
2020-01-02 15:06:52 298
原创 学习OpenGL ES for Android(十三)— 投光物
在之前的章节学习的光源都是一个点,虽然效果不错,和现实世界的光源还有一定的差距。将光投射(Cast)到物体的光源叫做投光物(Light Caster),这里我们学习几种比较常见的光源:定向光(Directional Light),点光源(Point Light)还有聚光(Spotlight)。定向光当光源非常远时,来自光源的每条光线就会近似于互相平行,而且光源强度相同。当我们使用一个假设光...
2020-01-02 09:31:00 243
原创 学习OpenGL ES for Android(十二)— 光照贴图
在之前文章中,我们模拟了物体的独特的光照特效,但是在一个面上所有点的效果都是一样的,显然和现实情况还有差距。在现实世界中,大部分物体的表面都是有不同材质的,对光的反应也不相同。在光照场景中,通常有漫反射和镜面光贴图(Map)两种方式,来精确控制物体的漫反射分量和镜面光分量以模拟现实世界的物体。漫反射贴图现在我们使用纹理来代替前面的纯色实现立方体的面,然后显示光照的效果。我们使用下面这样一幅...
2019-12-28 17:31:45 254
原创 学习OpenGL ES for Android(十一)— 材质
现实世界的物体各种各样,不同物体会对光产生不同的反应。陶瓷,铁片之类的物体会比墙壁,木柜的反射更强。想要模拟现实世界的光照效果就要了解物体对光线的反应效果。在我们的着色器代码中,我们定义一个结构体:Material,来表示材质。在上一节中,我们指定了一个物体和光的颜色,以及结合环境光和镜面强度分量,来定义物体的视觉输出。当描述一个物体的时候,我们可以用这三个分量来定义一个材质颜色(Material...
2019-12-27 17:20:15 262
原创 学习OpenGL ES for Android(十)—冯氏光照
想要模拟真实世界的光照效果是比较困难的,我们使用一种叫做冯氏光照模型(Phong Lighting Model)的模型来实现近似的效果。冯氏光照模型的主要结构由3个分量组成:环境(Ambient)、漫反射(Diffuse)和镜面(Specular)光照。下面这张图展示了这些光照分量看起来的样子:环境光照(Ambient Lighting):即使在黑暗的情况下,世界上通常也仍然有一些光亮(月...
2019-12-23 21:27:46 214
原创 学习OpenGL ES for Android(九)—简单光照
从这篇开始学习光照相关的知识,可以先阅读文档https://learnopengl-cn.github.io/02%20Lighting/01%20Colors/,了解光照的相关概念。光照至少需要一个光源和一个物体才能显示出的效果,那么我们就需要定义光源和物体的顶点位置和颜色,参考我们实现立方体的文章添加立方体并设置颜色,设置光源的颜色是白色,设置物体本来的颜色是橘色,那么光源照射之后的颜色就...
2019-12-20 14:49:21 538
原创 学习OpenGL ES for Android(八)
纹理不但可以和颜色叠加,纹理和纹理也可以叠加。纹理叠加时需要设置透明度,我们看下公式mix (x,y, a):返回x和y的线形叠加。a的范围0-1,结果= x*(1-a) + y * a根据上篇文章的着色器代码,修改gl_FragColor为两个纹理的叠加 vertexShaderCode = "uniform mat4 uMVP...
2019-12-17 23:51:46 228
原创 学习OpenGL ES for Android(七)
上篇我们简单的学习了纹理的显示,这篇我们先把图片等比显示,然后使纹理和颜色叠加显示。如果图片是正方形,直接使用缩放或投影即可,但是如果非正方形则需要计算图片的宽高比,然后和显示的宽高比一起计算得到真正的缩放,计算公式:比例=显示宽/显示高/(图片宽/图片高)。随后设置观察点,计算 @Override public void onSurfaceChanged(GL10 gl,...
2019-12-16 17:01:36 257
原创 学习OpenGL ES for Android(六)
前几篇主要学习的点线面的绘制,变换和投影的实现,绘制的都是颜色,如果想要绘制图片的话就需要使用纹理。一些相关的方法如下glGenTextures( int n, int[] textures, int offset ):生成n个纹理的index。其中n是就是数量,数组来保存这些index,offset是偏移量。glBindTexture( int target, int texture ...
2019-12-14 00:03:07 261
原创 学习OpenGL ES for Android(五)
上篇我们学习了对平面的变换,这篇我们将要学习对立体图形的变换。立体图形也可以称为3D图形,立体图形是由平面图形组合而来的,我先看下一个立方体的结构一个立方体有8个顶点,6个面,可以用12个三角形组合而成。我们可以使用36个(或24个)顶点的数据和glDrawArrays的方式来绘制,但是这样照成了浪费,有许多顶点都是可以复用的,所以我们使用8个顶点的数据和glDrawElements的方式...
2019-12-12 20:17:26 284
原创 学习OpenGL ES for Android(四)
在学习图形变换之前,可以先参考文档https://learnopengl-cn.github.io/01%20Getting%20started/07%20Transformations/学习基本概念。我们之前的绘制的都是静态的图像,如果我们使用改变顶点坐标的方式来让图像变换起来是非常麻烦的,而且会消耗更多的处理时间和性能。我们可以使用一个或多个矩阵(Matrix)对象可以更好的变换(Transf...
2019-12-11 17:39:48 595
原创 学习OpenGL ES for Android(三)
上篇我们看到绘制点和线,在平面上,点和线组成了面,我们先看绘制三角形。glDrawArrays的mode参数除了点和线,还有三角,是这三个:GL_TRIANGLE,GL_TRIANGLE_STRIP和GL_TRIANGLE_FAN。他们的绘制规则如下图所示,GL_TRIANGLE:每三个顶点绘制为三角形,如果不足三个则不绘制,绘制的三角形个数是:顶点数/3GL_TRIANGLE_ST...
2019-12-10 17:17:37 625
原创 学习OpenGL ES for Android(二)
本章将学习OpenGL ES中点和线的绘制,在绘制之前需要先了解这些:坐标系统;着色器;GLSL(OpenGL ES Shading Language),OpenGL ES着色语言;坐标系统和android布局的坐标不同,OpenGL是一个右手坐标系。简单来说,就是正x轴在你的右手边,正y轴朝上,而正z轴是朝向后方的。想象你的屏幕处于三个轴的中心,则正z轴穿过你的屏幕朝向你。坐标系画起来如...
2019-12-09 19:21:54 988
原创 学习OpenGL ES for Android(一)
OpenGL是用于渲染2D、3D矢量图形的跨语言、跨平台的应用程序编程接口(API),而在嵌入式和移动平台的版本是OpenGL ES。Android最初就支持OpenGL ES的1.0版本,到现在已经支持到最新的3.2版本,下面的支持变化图当然这个版本支持不是绝对的,还有看硬件是否支持,例如genymotion模拟器只有OpenGL ES 2.0版本,如果你使用了高版本的API会导致崩溃。...
2019-12-07 17:42:07 1032 1
原创 Android Studio添加自定义Template
在使用Android Studio的过程中,你会发现很多常用的快捷生成代码提示工具,例如在java代码中输入fori,按下Tab,就会自动生成一段for循环代码,非常方便。如下所示for (int i = 0; i <; i++) { }其实这就是Android Studio中自带的模板功能,还有很多,例如foreach(for each循环),fbc(f...
2019-11-03 22:47:28 820
原创 Android Fragments新功能
在刚刚过去Android Dev Summit 2019中,提到很多项目,如依旧大力推广的Kotlin,还有Jetpack Compose,CameraX,Room等新功能。其中也提到了android fragments,发布了androidx.fragment-1.2.0-rc01。fragment一直是开发中非常常用的工具,在以前的版本中由于生命周期的问题一直被诟病,虽然现在已经经过很多优...
2019-10-29 23:32:40 8137
原创 初探ViewBinding
视图访问的方式有常用的findViewById,ButterKnife等多种方式,这些方式的各方面对比如下如上图所示,在简明、编译安全和编译速度上都各有优势,那么有没有一种方式可以一石"三"鸟呢。谷歌在Android Studio 3.6 Canary 11版本中正式推出视图绑定(View Binding),来看下使用方法,首先需要使用AS 3.6 Canary 11之上的版本,这...
2019-10-27 16:40:04 16313 5
原创 Android Studio 3.5.1发布
Android Studio 3.5.1版本主要提高了稳定性和性能,并包含了一些bug修复。1.GradleIssue #136806086:使用动态功能时导致lintVitalRelease任务失败。2.ProfilersIssue #136112662:Android Studio会莫名的消耗大量的3.Core IDEIssue #138007389:编辑器中的资源显示...
2019-10-05 23:56:44 1807
原创 TextView的drawableTint兼容实现方法
在ImageView中有tint属性,用于设置图片的颜色,其实现原理是使用了ColorFilter的PorterDuffColorFilter,来重新生成drawable,关键代码是:读取tint,设置ColorFilter,生成新的Drawable,重新绘制// 读取tintint tint = a.getInt(com.android.internal.R.styleable.Imag...
2019-09-28 12:37:14 5285 1
原创 ripple的使用细则
当谷歌推出Material Design设计规范后,谷歌的产品都开始按照这一规范进行设计,包括了Android Mobile, Android Table, Web Chrome 在内的所有平台。按压产生水波纹(ripple)这一效果也登上舞台,在Android中的使用就是ripple xml资源文件和RippleDrawable。RippleDrawable就是ripple资源文件解析后生成...
2019-09-28 00:23:52 1905
原创 实现APNG图片解码及缩放显示
在实现GIF图片缩放的文章中,我们使用了GIF解码器来实现GIF图片的解码,然后修改了SSIV的代码来实现动图的缩放。而APNG也是一种动态图片,是在APNG格式上进行扩展而来的,关于apng的文档参考这个链接,关于PNG的详细资料参考这个链接。APNG的结构图普通的png的结构是Signature(校验)开头,然后是IHDR(包含图片信息),然后是各种辅助块,最后是IDAT数据块和I...
2019-09-22 23:08:01 2719
jadx-0.8.0
2018-09-29
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人