Android
文章平均质量分 87
weiers
逝去了青春至少还留下了代码
展开
-
利用OpenGL ES进行Android手游录屏研究
前面在Android5.0录屏方案中研究过关于手机录屏直播直播的问题,只是使用系统自带的API需要21以上,大部分手游引擎底层封装一般都是opengl es,这篇博客继续研究这个问题,实现使用opengl es录制手机屏幕,希望在手游录屏方面有所作用。依前面在OpenGL ES 帧缓冲对象(FBO):Render to texture中使用的例子为例,就当它是一个游戏,录屏的相关接口我封装到一个库里原创 2016-11-18 12:16:38 · 4923 阅读 · 1 评论 -
OpenGL ES EGL介绍
前面已经在android平台上使用OpenGL ES的API了解了如何创建3D图形已经使用FBO渲染到纹理进行一些其他的操作,起初我学习OpenGL ES的目的就是为了研究Android平台上录制屏幕的方案。到目前为止,基础知识已经具备了,还差一点需要了解的是Embedded Graphics Library (EGL),EGL是连接OpenGL ES和本地窗口系统的接口,由于OpenGL ES是跨原创 2016-11-16 18:03:52 · 10540 阅读 · 1 评论 -
AndroidStudio使用NDK配置方法
配置Gradle生成so编译多个模块关联Androidmk到Gradle使用cmake配置Gradle生成so在AndroidStudio2.1及以前我是通过下面的方式配置NDK的,不知道是从哪个版本开始的,我第一次在AS上使用NDK的时候用的就是AndroidStudio2.1了。首先在gradle.properties里面添加android.useDeprecatedNDK = true原创 2016-11-21 17:28:11 · 15542 阅读 · 8 评论 -
利用EGL在android上使用C/C++写OpenGL ES程序
使用Native代码GLSurfaceView在Java层使用EGL在native层使用EGL很多教程都是在C/C++写的OpenGL的代码,其中有很多优秀的框架,除了前面提过的Assimp库外,还有很强大的库glm,从另外一个角度来看,在学习EGL的时候,很多的资料都是C语言的代码,我在android上写OpenGL ES的代码似乎从来没见过那些代码,不使用一下总觉得缺少点什么。事实上,An原创 2016-11-30 23:37:30 · 15020 阅读 · 0 评论 -
最近面试Android的一些面试题
最近一个多月面试过一下公司(均为实习): 腾讯:内推一面卒。正式校招拿到offer 阿里:内推二面卒。 蘑菇街:面完三面技术面,等待HR面 网易:拿到offer。 可以看到,大部分问题不难,但是能回答对和回答的好不好又是两个两个不同的情况了。任何问题都尽量回答的越详细,越清晰,越全面,面试官就会越认为你掌握的越好。 比如问一下内存泄露,那么试着多列举一些情况: 首先解释内存泄露是什么原创 2016-04-22 15:22:27 · 5876 阅读 · 5 评论 -
Android5.0录屏方案
导语 本文主要是围绕android直播助手的功能做了一些研究,因为之前对Android多媒体相关的内容知之甚少,只有概念,于是查阅了相关资料并做以总结。由于我对音视频相关知识零基础所以补充了一些相关知识视音频编解码技术零基础学习方法视音频数据处理入门:RGB、YUV像素数据处理采集音频原始数据---->压缩编码----> 封装采集视频原始数据---->压缩编码----> 封装音视频编码原创 2016-08-08 14:19:37 · 8042 阅读 · 4 评论 -
Android绘制View相关的几个问题
前面关于View绘制的话题好像零散的写过博客,虽然好久没有认真的研究一些东西了,平时忙其他的东西,但是本着每个月必须花几天时间看看android的想法,今天整理了几个View绘制相关的问题,这里不会涉及View测量布局绘制的那部分细节,因为这些前面已经写过了。主要有以下几个问题1.View绘制流程 invalidate/requestLayout2.View树和DecorView4.真原创 2016-06-21 10:50:19 · 4661 阅读 · 0 评论 -
Android点阵屏效果的控件
最近发现了一个比较好玩的效果,android实现的LED点阵屏幕效果,挺有意思的,于是花了点时间实现了一下,这个用在演唱会上的粉丝当成牌子举是不是挺好的呢,或者是送给妹子?哈哈~实现思路比较简单,主要是计算汉字对应的点阵矩阵,汉字通过GB2312编码,每个汉字对用两个byte来表示,而一个汉字被存储为点阵时,以16*16表示,需要16*16=256bit,也就是32byte,GB2312编码也原创 2016-06-25 10:50:14 · 4172 阅读 · 3 评论 -
AndroidStudio导入第三方开源库
AndroidStudio还是0.8的版本的时候下载下来看了一下,都推出三年左右的工具了,我竟然没有用过,昨天打算好好研究一下以便以后转向AS,毕竟google出的这么好的IDE,不用都对不起自己。不过真心很好用,尤其黑色的主题风格很舒服,但对于一直使用eclipse的我还是有点不习惯,主要是导包的方式和eclipse差异是在很大,于是在网上各种搜索,研究了很久才弄明白,根据别人的资料加上自己的理原创 2016-05-24 15:33:57 · 5002 阅读 · 1 评论 -
OpenGL ES 帧缓冲对象(FBO):Render to texture
帧缓冲对象FBO创建帧缓冲对象纹理附着渲染缓冲对象附着渲染到纹理Render to Texture渲染到深度纹理帧缓冲对象FBO渲染管线的最后一个阶段是到帧缓冲区。前面学习的好多知识所做的渲染操作都是在默认的帧缓冲中进行的,这个默认的帧缓冲是我们创建一个Surface时自动创建和配置好的,这篇博客就创建我们自己的缓冲区而不使用系统提供的缓冲区,这样就有了另一种渲染方式,默认情况下,我们使用原创 2016-11-15 00:26:48 · 12768 阅读 · 6 评论 -
OpenGL ES 加载3D模型
前面绘制的矩形、立方体确实确实让人看烦了,并且实际生活中的物体是非常复杂的,我们不可能像前面哪样指定顶点来绘制,因此本篇博客就说明通过OpenGL ES加载一个3D模型。这样复杂物体的设计工作就可以交给专业的设计师来做了,进行3D建模的工具比如3dmax、maya等。设计师通过这些软件构建出来漂亮的3D模型,并且可以通过软件导出有关该模型的各种数据信息文件,比如顶点坐标,法向量,纹理坐标等信息。模型原创 2016-11-07 23:23:52 · 6851 阅读 · 0 评论 -
OpenGL ES 片元操作
剪裁测试模板测试深度测试混合片元着色器后续操作还包括剪裁测试、模板测试、深度测试、混合等,最终才会被送到帧缓冲区。剪裁测试剪裁测试可以在渲染时用来限制绘制区域,通过制定一个矩阵进一步限制帧缓冲区可以写入的像素,启用剪裁测试后,绘制不会在整个屏幕(帧缓冲区)进行,而是在指定的矩形区域进行。不在矩形区域中的片元被丢弃,在矩形区域内的片元才能被送往帧缓冲区,实际效果就是在屏幕上开辟了一个小窗口。剪裁原创 2016-11-05 20:37:35 · 2547 阅读 · 0 评论 -
OpenGL ES入门
OpenGL ES渲染管线概述渲染管线一般是由显示芯片GPU内部处理图形信号的并行处理单元组成,这些并行处理单元之间是独立的,从另一个角度看,渲染管线实际上也是一系列绘制过程,这一系列过程的输入是待绘制物体的相关描述信息,输出的是要显示的图像帧数据。OpenGL ES管线主要包括:读取顶点数据—>顶点着色器—>组装图元—>光栅化图元—>片元着色器—>写入帧缓冲区—>显示到屏幕上读取顶点数据指的是将原创 2016-10-22 16:56:08 · 2605 阅读 · 2 评论 -
OpenGL ES 着色器
OpenGL ES 着色器OpenGL ES 着色器着色器语言向量矩阵向量和矩阵的分量采样器数组类型转换变量限定符varying变量的原理获取着色器变量内建变量顶点着色器片元着色器函数片元着色器浮点变量精度着色器程序1.着色器语言着色器语言是一种高级图形编程语言,和C/C++语言很类似,但存在很大差别,比如,不支持double,byte,short,不支持unin,e原创 2016-10-22 21:36:31 · 2220 阅读 · 0 评论 -
OpenGL ES 正交投影
OpenGL ES 正交投影OpenGL ES 正交投影绘制正方形引入投影正交投影背后的数学摄像机设置视口绘制正方形在最开始绘制的六边形里面好像看起来挺容易的,也没有出现什么问题,接下来不妨忘记前面绘制六边形的代码,让我们按照自己的理解来绘制一个简单的正方形。按照我的理解,要想在屏幕中间显示一个正方形,效果如下图所示应该创建的数据如下图所示即传给渲染管线的顶点数据如下图:float[] v原创 2016-10-23 15:59:14 · 6262 阅读 · 1 评论 -
OpenGL ES 透视投影
图元装配剪裁坐标透视除法视口变换利用w分量产生三维效果透视投影透视投影背后的数学原理透视投影例子前面我们知道了一个顶点要想显示到屏幕上,它的x、y、z分量都要在[-1,1]之间,我们回顾一下渲染管线的图元装配阶段,它实际上做了以下几件事:剪裁坐标、透视分割、视口变换。图元装配的输入是顶点着色器的输出,抓哟是物体坐标gl_Position,之后到光栅化阶段。图元装配剪裁坐标当顶点着色器写原创 2016-10-23 21:09:03 · 3986 阅读 · 0 评论 -
OpenGL ES 矩阵变换及其数学原理
矩阵变换及其数学原理引子推荐这篇文章线性代数的本质,这篇文章挺不错的,揭示了矩阵和向量的内涵。首先概要性的提一下向量刻画的是线性空间中的对象。矩阵刻画的是向量在线性空间中的运动(变换,跃迁),相似矩阵本质上就是同一个线性变换的不同的描述。在一个线性空间中,选定了一组基,对于任何一个线性变化都可以用一个确定的矩阵来描述矩阵不仅可以作为线性变换的描述,而且可以作为一组基的描述,作为变换的矩阵,不原创 2016-10-24 10:41:35 · 3792 阅读 · 2 评论 -
OpenGL ES 光照效果
一个立方体光照模型环境光散射光镜面光为了演示光照效果,在前面学习过的内容基础上我们首先创建一个立方体,同时为了看起来直观一些,这个立方体每个面采用中心为白色,周围红色的渐变方案,不然看上去同样的颜色混在一起,看不出来是否是立方体。并且添加上转动旋转功能,这样转动起来立体感更强一些。一个立方体立方体类Rectangle.javapublic class Rectangle { priv原创 2016-10-24 22:54:53 · 3645 阅读 · 2 评论 -
OpenGL ES 纹理
纹理概念纹理对象和纹理加载应用纹理的例子使用前面学过的技术已经可以利用OpenGL ES构建立体图形,并通过顶点着色器和片元着色器对其进行各种变化呢和光照等效果使得三维效果更加真实,实际上我看看到很多的3D游戏漂亮多了,那是因为有各种各样的漂亮的图像带给人很多视觉盛宴,这篇文章在前面的基础上,增加物体的表面贴图,使得物体更加好看。纹理概念纹理用来表示图像照片或者说一系列的数据,使用纹理可以使物体原创 2016-10-27 16:44:45 · 2369 阅读 · 1 评论 -
OpenGL ES 纹理设置
纹理过滤纹理采样最近点采样线性纹理采样MIPMAP纹理纹理过滤纹理拉伸:重复拉伸和截取拉伸用于指定纹理坐标超过(00.0,1.0)范围时所发生的行为,使用glTexParameterf函数指定,GL_TEXTURE_WRAP_S 定义 s 坐标超出范围[0.0, 1.0]的情况,GL_TEXTURE_WRAP_T 设定 t 坐标。GL_REPEAT 重复纹理,超过1的部分其实只看它的小数原创 2016-10-31 15:10:19 · 2272 阅读 · 0 评论 -
Android动态加载Activity原理
加载一个Activity肯定不会像加载一般的类那样,因为activity作为系统的组件有自己的生命周期,有系统的很多回调控制,所以自定义一个DexClassLoader类加载器来加载插件中的Activity肯定是不可以的。首先不得不了解一下activity的启动流程,当然只是简单的看一下,太详细的话很难研究清楚。通过startActivity启动后,最终通过AMS进行跨进程回调到Applica原创 2016-04-07 18:18:01 · 13613 阅读 · 6 评论 -
利用DexClassLoader动态加载dex文件
Java中也有类加载器ClassLoader,其作用是动态装载Class文件,当我们从网络下载Class文件,或者在编译时不参与而在运行时动态调用时就需要用类加载器。由于Android对class文件进行了重新打包和优化,最终APK文件中包含的是dex文件,加载这种文件就需要用到DexClassLoader。DexClassLoader(dexPath, optimizedDirectory,原创 2016-04-05 15:50:12 · 4444 阅读 · 0 评论 -
Android中Handler原理
Handler主要是主线程和子线程通信。一般子线程中做一些耗时操作做完之后通知主线程来修改UI。实际上android系统在Activity启动或者状态变化等都是通过Handler机制实现的。首先进入到ActivityThread的main方法中public static void main(String[] args) { …… Looper.pre原创 2015-03-14 00:19:42 · 5588 阅读 · 1 评论 -
android View的布局宽高之LayoutInflater函数详解
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/main_layout" android:layout_width="match_parent" android:layout_height="match_parent" >原创 2014-11-20 18:19:43 · 8643 阅读 · 11 评论 -
Android之View和ViewGroup事件分发
Android时间分发View的时间分发过程dispatchTouchEvent—> onTouch –-> onTouchEvent dispatchTouchEvent的返回值由是否设置触摸回调的返回值或者onTouchEvent的返回值决定。一个触摸事件发生后,首先如果设置了触摸事件的侦听,并且返回了true,表示该事件已经被消费了,dispatchTouchEve原创 2014-11-17 17:50:05 · 2040 阅读 · 0 评论 -
Android初始化的时候获取加载的布局的宽高(续)--RelativeLayout的陷阱
Android初始化的时候获取加载的布局的宽高(续)--RelativeLayout的陷阱接着上次的问题,已经介绍过,在初始化或者说OnCreate方法中获取加载的布局的宽高,最后说到,调用view.measure(0, 0);然后在调用getMeasuredWidth和getMeasuredHeight就可以获得测量的宽高。可以参考:Android如何在初始化的时候获取加载的布局的宽高今天在写类似的效果时,给ListView加载一个头部视图,通过listView$addHeadView添加到ListV原创 2014-11-28 09:07:57 · 7798 阅读 · 8 评论 -
Android视图加载到窗口的过程分析
上一篇博客Android中Handler原理在讲到Handler的时候谈到了android的Activity启动是如何执行到onCreate方法的,这篇主要从onCreate方法里面我们必须要写的方法setContentView开始,研究布局视图是如何加载到手机窗口上的。当在执行到setContentView时,实际上执行的是public void setContentView(int原创 2015-03-16 12:31:32 · 7506 阅读 · 3 评论 -
Android如何在初始化的时候获取加载的布局的宽高
在自定义ListView中,需要将下拉刷新的View在初始化的时候设置padding隐藏起来,这时就要在初始化的时候获得要加载的布局View的高度。 private View headView; headView = inflater.inflate(R.layout.header, null); 如果接下来调用: headView.getHeight(); headView.getMeas...原创 2014-11-26 15:50:37 · 10304 阅读 · 5 评论 -
Android控件捕获点击事件的范围
View的Tween动画过程中点击事件的位置并不会因为动画位置的改变而改变,是因为在动画过程中layout的位置实际上没有变,因此曾经一度认为View的点击事件(其实不仅仅是点击事件,包括所有的触摸事件)触发的范围是该View在layout的时候指定的left,top,right,bottom。今天才发现不完全是这样的。一切都是因为平时看代码没有仔细一点所造成了对问题理解不全面。在这里记录一下原创 2014-12-11 09:37:46 · 6630 阅读 · 4 评论 -
Android中图像变换Matrix的原理
第一部分 Matrix的数学原理在Android中,如果你用Matrix进行过图像处理,那么一定知道Matrix这个类。Android中的Matrix是一个3 x 3的矩阵,其内容如下: Matrix的对图像的处理可分为四类基本变换:Translate 平移变换Rotate 旋转变换Scale转载 2014-12-01 00:25:47 · 3933 阅读 · 0 评论 -
android之View绘制到窗口上的过程
以前在研究自定义空间的时候,查看过View和ViewGroup绘制的流程的。只是定性的知道会经过onMeasure—onLayout—onDraw这些流程。上一篇Android视图加载到窗口的过程分析中分析了视图加载到窗口的过程。主要就是一系列的addView操作,这篇就从addView方法开始看看View是如何绘制到窗口上的。ActivityThread#handleResumeActi原创 2015-03-30 23:32:27 · 1884 阅读 · 0 评论 -
android事件拦截处理机制详解
转载自:http://blog.csdn.net/chunqiuwei/article/details/41084921前段时间刚接触过android手机开发,对它的事件传播机制不是很了解,虽然网上也查了相关的资料,但是总觉得理解模模糊糊,似是而非,于是自己就写个小demo测试了一下。总算搞明白了它的具体机制。写下自己的结论,分享之,希望对初学android的人有所帮助布局效果转载 2014-11-14 14:59:02 · 3146 阅读 · 1 评论 -
WindowManager 中LayoutParams的各种属性
WindowManager中LayoutParams的各种属性1.public int x; 如果忽略gravity属性,那么它表示窗口的绝对X位置。 什么是gravity属性呢?简单地说,就是窗口如何停靠。 当设置了Gravity.LEFT 或 Gravity.RIGHT 之后,x值就表示到特定边的距离。2.2. public int y; 如果忽略grav转载 2014-11-14 14:23:05 · 1244 阅读 · 0 评论 -
简单说Binder(2)
几个问题接着上一篇的内容,本片博客讨论几个问题1.跨进程传递IBinder对象的情形2.跨进程回调3.分析Toast的显示过程:跨进程回调的例子跨进程传递IBinder对象的情形会不会觉得传递IBinder有点奇怪呀?Binder机制不是用来做进程间通信的吗,那传递IBinder是为了干啥呢?没错,通信可以是双向的呀,Process A和Process B通信,进程A作为客原创 2016-02-23 20:45:23 · 2355 阅读 · 3 评论 -
简单说Binder(1)
Binder算是Android中比较难懂的一部分内容了,但是非常的重要,要想研究Framework层无论如何也绕不开Binder。网上也有很多讲解Binder的文章,有的很深入涉及到底层C层面,理解起来难度较大,要完全理解还需要Linux驱动的知识,看了还也是似懂非懂,我认为也不需要理解那么深入。写这篇博客主要是我从最学习理解Binder的过程的角度出发,也来谈谈Binder。Binder是什原创 2016-02-20 01:29:12 · 7730 阅读 · 12 评论 -
从HashMap到LruCache的源码分析
android的图片加载库Android-Universal-Image-Loader中的缓存策略,内存缓存LruCache,是一个最近最少使用算法LRU。前几天看操作系统也看到了LRU算法,是用在缺页中断发生时,进行置换算法才用的一种。缓存中的LruCache和操作系统中的页置换算法思想是一样的,于是心血来潮,决定把这部分实现看看,然后就有了这篇博客,从HashMap的实现到LinkedHash原创 2016-01-07 00:43:15 · 2940 阅读 · 3 评论 -
硬盘缓存方案DiskLruCache源码解析
硬盘缓存方案DiskLruCache前面研究了LruCache,它作为现在用的最多的内存缓存方案已经在很多开源缓存框架中使用,同样的还有硬盘缓存方案也就是DiskLruCache。它的大致用法如下存储:DiskLruCache diskLruCache= open(File directory, int appVersion, int valueCount, long maxS原创 2016-02-18 21:00:35 · 5181 阅读 · 0 评论 -
自定义ViewGroup实现瀑布流效果
今天情人节,我却在家里看书写代码,真屌丝啊哈~回顾:ViewGroup的时间分发流程:Android之View和ViewGroup事件分发dispatchTouchEvent ----- onInterceptTouchEvent----- onTouchEvent最外层的ViewGroup首先接收到触摸事件,然后遍历他的子View或者ViewGroup,将触摸时间分发给包含触摸位原创 2015-02-14 12:36:37 · 4373 阅读 · 9 评论 -
Android漂亮的对话框项目sweet-alert-dialog
漂亮的对话框 sweet-alert-dialog项目地址: https://github.com/pedant/sweet-alert-dialogandroid原生的dialog太生硬了,之前看到了这个效果非常不错但是没有用过,今天给别人推荐使用,他遇到了问题,导入后错误非常多,也没有库工程。于是自己认真看了一下,这是个AndroidStudio的工程,并且里面还依赖于materi原创 2015-06-02 21:22:04 · 18573 阅读 · 7 评论 -
异步消息处理机制-Android中Handler原理(续)
异步消息处理线程是指线程启动后会进入一个无限循环,每循环一次,从内部的消息队列里面取出一个消息,并回调相应的消息处理函数。一般在任务常驻,比如用户交互任务的情况下使用异步消息处理线程。之前在Android中Handler原理里面研究过android里实现异步消息处理线程的方式,基本逻辑如图所示 今天就用java将其简单的模拟出来加深印象,下面的类图是用工具导出的,不太正规,不过能大概看出类之间原创 2015-10-22 21:39:46 · 2673 阅读 · 0 评论