- 博客(22)
- 资源 (5)
- 收藏
- 关注

原创 OpenGL ES:学习总结
学习阶段(一):OpenGL es基础的学习理论:OpenGL es渲染流程着色器的编写图元的绘制VAO、VBO、EBO、FBO纹理的绘制矩阵变换滤镜原理、卷积核实践:基本形状的绘制(三角形、正方形、正方体)纹理的绘制(绘制图片到图元、混合纹理绘制)矩阵的变换(缩放、平移、旋转、MVP矩阵)图像加滤镜效果(黑白、放大、四格)问题:绘制纹理遇见了大小比例不一被...
2019-07-21 19:57:01
718

原创 解决Flutter使用Column等容器包裹ListView报错的问题
报错如下所示:I/flutter ( 4625): ══╡ EXCEPTION CAUGHT BY RENDERING LIBRARY ╞═════════════════════════════════════════════════════════I/flutter ( 4625): The following assertion was thrown during performResi...
2019-05-07 21:16:24
8118
原创 Fragment:setUserVisibleHint方法和onHiddenChanged方法对比
setUserVisibleHint()适用于和ViewPager+Fragment组合使用,此方法与FragmentPagerAdapter类相关,可看如下代码: public Object instantiateItem(ViewGroup container, int position) { ... if (fragment != m...
2019-10-03 19:57:18
789
原创 Android:数据存储SharedPreferences工具类Set数据保存问题
存储Set的问题场景: 当我从SharedPreferences取出Set实例对象的时候,并且直接使用了它,进行修改,导致此后保存数据的时候后再杀掉App又从中获取的时候,取出来的数据并不是我所预期的。阅读源码发现: Note that you <em>must not</em> modify the set instance returned by thi...
2019-09-21 21:23:40
464
原创 Android:RecyclerView相关
关键类:Adapter:负责数据的绑定LayoutManager:负责item的布局协助RecyclerView完成OnMeasure过程通过onLayoutChildren完成对子View的布局滚动子视图滚动过程中判断何时添加View,何时回收View,也是对缓存时机的判断ItemDecoration:添加分割线,做一些装饰RecyclerView:view类,控制缓存...
2019-09-13 15:52:09
260
原创 Android:属性动画
属性动画是Android 3.0加入的,为了弥补View动画的不足,但是Android 3.0以下虽然可以使用动画兼容库但是其本质依旧是View动画View动画的不足之处动画效果单一,旋转,平移,缩放影像动画,并没有改变本身的参数,需要交互式view的时候暴露缺陷作用对象局促于View上ValueAnimator 类先改变值,然后 手动赋值 给对象的属性从而实现动画;是 间接 对对象属...
2019-09-13 14:49:43
229
原创 Android:ViewPager + fragment 取消预加载,实现懒加载
背景:主页三个viewpager中三个fragment同时加载,同一时刻占用的资源很大,很消耗性能,想实现用户点击的时候才加载某个页面,即懒加载。fragment中可使用setUserVisibleHint() 方法可以实现取消预加载,仅当fragment可见的时候才初始化view。但是却遇见了如下问题:如果viewpager的缓存数为1(三个页面,初始是中间页面,缓存左右俩个页面),当...
2019-09-13 14:44:46
673
原创 Android:解决ImageView图片圆角效果与ScaleType属性冲突问题
场景:在使用ImageView的时候设定了其固定的大小,因此当图片加载上去的时候无疑需要进行中心裁剪达到所需的效果,同时还要设置其圆角大小。我们知道,我们可以直接在ImageView设置其属性 android:scaleType="centerCrop" <ImageView android:id="@+id/iv_photo" ...
2019-09-12 15:52:24
2430
原创 Camera1、Camera2 API的使用
Camera1使用流程:检查相机权限(android.permission.CAMERA)Camera.getNumberOfCameras():获取相机硬件数量;Camera.getCameraInfo():获取指定相机信息;Camera.open():打开指定相机;camera.getParameters():获取相机参数并设置;camera.setPreviewTexture...
2019-09-05 16:09:02
3546
原创 OpenGL ES:相机预览添加滤镜效果
经过前面图片添加滤镜效果的实践,相机预览无非也就是将每一帧的bitmap放到OpenGL中去渲染。所以很容易想到如下方案:方案A 使用TextureView用于相机预览,TextureView表面再盖上一层GLSurfaceView用与OpenGL ES的渲染输出,从TextureView中获取每一帧的Bitmap交给OpenGL ES渲染到GLSurfaceView上。很容易看出,方案...
2019-09-04 17:02:02
849
原创 OpenGL ES:基本形状的绘制(三角形、正方形、正方体)
三角形的绘制编写顶点着色器和片段着色器代码//顶点着色器//声明OpenGL es版本#version 300 es//in 代表输入属性//顶点坐标属性layout(location = 0) in vec3 aPos;//颜色属性layout(location = 1) in vec3 aColor;//out 代表传递给片段着色器的属性out vec3 color...
2019-09-03 21:57:18
1544
原创 RecyclerView:item点击居中效果实现
原理步骤:继承LinearSmoothScroller,重写calculateDtToFit,计算滑动的距离;calculateSpeedPerPixel,计算每个像素滑动的速度。继承LinearLayoutManager,重写smoothScrollToPosition,使用LinearSmoothScroller进行滑动。使用自定义的layoutManager,在item点击回调中,调...
2019-08-14 12:28:57
2295
原创 OpenGL ES:视频加滤镜后导出
视频加滤镜播放:MediaCodec解码——>OpenGL es——> GLSurfaceView视频滤镜合成导出:MediaCodec解码——>OpenGL es——> MediaCodec编码大体来说就是OpenGL渲染后的输出不一样,需要使用编码器编码保存到本地,其次没有了GLSurfaceView为我们创建的上下文环境,因此我们需要使用相关的API初始化...
2019-08-04 17:22:35
1433
2
原创 OpenGL ES:EGL环境创建
在Android平台上,虽说系统自带的GLSurfaceView这个控件中已经帮我们创建好EGL环境了,一般来说使用GLSurfaceView就可以满足我们的需求了。而当我们用不着GLSurfaceView的时候,那又如何自己创建EGL环境呢?因此就来探究下 EGL环境的创建。在Java层,EGL封装了两套框架位于javax.microedition.khronos.egl包下的EGL10...
2019-07-19 15:45:31
1119
原创 OpenGL ES:缓冲对象(VBO、VAO、EBO)
顶点缓冲对象(Vertex Buffer Objects,VBO) 顶点缓冲对象VBO是在显卡存储空间中开辟出的一块内存缓存区,用于存储顶点的各类属性信息,如顶点坐标,顶点法向量,顶点颜色数据等。在渲染时,可以直接从VBO中取出顶点的各类属性数据,由于VBO在显存而不是在内存中,不需要从CPU传输数据,处理效率更高。 所以可以理解为VBO就是显存中的一个存储区域,可以保持大量的顶...
2019-07-14 20:39:55
575
原创 OpenGL ES:配合MediaCodec硬解码渲染(视频加滤镜播放)
MediaCodec 解码后的视频格式为yuv,而OpenGL所能渲染的格式为rgb,因此我们需要使用扩展库中的扩展纹理GLES11Ext.GL_TEXTURE_EXTERNAL_OES而它的作用就是实现YUV格式到RGB的自动转化。片段着色器中需使用扩展采样器:uniform samplerExternalOES sTexture原理步骤:生成一个oes纹理,并且以此得到一个S...
2019-07-11 10:09:47
4244
1
原创 Android音视频开发-播放视频(使用MediaExtractor、MediaCodec、AudioTract、SurfaceView)
看了一大堆的音视频理论知识,还是得实操一下。这次就来实现一个播放视频的Demo吧。使用到如下几个类:MediaExtractorextractor意思就是提取器,功能就是提取我们所需的流(音频/视频),选取指定的track。常用Api功能介绍setDataSource(String path)设置数据的来源(文件路径or网络流的url地址)int getT...
2019-07-04 09:59:26
942
原创 OpenGL ES:注意点
只申明一个采样器默认激活了采样单元并且绑定了。声明俩个或俩个以上需要将采样器绑定到相应的采样单元并激活再进行纹理的绑定。//x代表采样器要绑定的纹理单元序号 GLES30.glUniform1i(GLES30.glGetUniformLocation(mProgram, "texture0"),0); GLES30.glUniform1i(GLES30.gl...
2019-07-03 17:16:06
330
原创 OpenGL ES:滤镜效果(黑白、4宫格、放大)
正如我们所知,我们对OpenGL es 的操作也只是编写相应的着色器从而达到相应的图形或纹理。而所谓的滤镜也只是通过对着色器的编写,也是对某个像素或坐标做特定的一些变换,从而达到滤镜的效果。通过前面对顶点着色器、片段着色器、纹理的学习之后,也对OpenGL es有了一定的了解。可通用的顶点着色器:#version 300 es//变换矩阵uniform mat4 uMVPMatrix...
2019-07-03 16:59:18
1703
原创 OpenGL ES:矩阵变换(平移、旋转、缩放)
总的变换矩阵:mvpMatrix = projectionMatrix * viewMatrix * modelMatrix;投影矩阵(projectrionMatrix): //根据屏幕宽高计算 float ratio = (float) width / height; //计算投影矩阵 Matrix.frustumM(mProjectionMatrix, 0...
2019-07-01 20:21:11
6023
原创 Android音视频开发—编译FFmpeg源码(Windows环境)
Windows环境下编译FFmpeg源码由于最近需要学习Android音视频开发方面的知识,也就开始了FFmpeg方面的学习,往后的学习都会写成博客更新。要想在Android开发中使用FFmpeg,首先当然是需要编译FFmpeg源码。首先,网上很多编译环境大都是Linux、Mac,而我电脑是windows,不免觉得会有很多坑要踩,果不其然,花了我很多时间。流程如下:由于windows没...
2019-05-23 13:28:41
571
原创 关于Flutter的PageView控件无法保存状态的问题
可以通过将PageView中的子控件继承AutomaticKeepAliveClientMixin达到目的。
2019-05-14 18:29:15
1722
1
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人