TextureView、SurfaceTexture、Surface的关系

上篇文章我们说了SurfaceView,接下来我们对Texture进行一下分析。
SurfaceView由于使用的是独立的绘图层,并且使用独立的线程去进行绘制。前面的文章中也说到SurfaceView不能进行Transition,Rotation,Scale等变换,这就导致一个问题SurfaceView在滑动的时候,SurfaceView的刷新由于不受主线程控制导致SurfaceView在滑动的时候会出现黑边的情况,看下面的效果图。
SurfaceView滑动出现黑边
这个Demo里的SurfaceView是上篇文章中定义的DrawSurfaceView,不了解的同学可以看上一篇文章

如果这里的SurfaceView是VideoView,由于视频刷新的速度比这个DrawSurfaceView速度大好几倍,那么这个黑边的情况将更恶劣,同学可以将DrawSurfaceView的刷新延时DELAY设置的更小一点,看的效果更明显。这里要讲到的TextureView就是用来解决这种问题的。

Read More

Gradle的那些坑

Gradle是Android Studio使用的构建系统,类似于Eclipse上的Maven(貌似新版的Eclipse也有支持Gradle的插件了),有了Gradle就可以很好的帮我们解决库依赖的问题了,而且也不要我们自己手动从网上下载。Gradle支持JCenter,Maven等中央仓库,关于JCenter与Maven的区别这里有篇文章。Gradle对下载下来的jar包进行统一管理,避免了一个jar包到处拷贝,搞得每个项目里面都有。

修改Gradle的默认路径

Read More

Android Handler消息机制源码分析——第一部分:Looper与MessageQueue

由于在Android中,网络请求不能运行在主线程中,同时一些耗时的操作也不建议运行在主线程中。因此多线程以及线程间通信在Android中显得更为重要了,而安卓SDK中也提供给我们很多的多线程机制,譬如:Handler,AsyncTask,以及基于这些机制而来的IntentService,AsyncService,Loader等常用类,其中AsyncTask又是基于Java的Concurrent框架而来的,虽然有些人对AsyncTask抱有怨言,但后面的文章中我们也会以学习的态度对AsyncTask进行深入剖析。这里我们先来对常用的Handler做更深层次的了解。Handler机制可以说是Android开发过程中最常用到的线程通信机制,比如说Activity.runOnUiThread方法,View.post,View.postDelayed等方法底层使用的都是该机制。但是在分析源码之前我们先来对整个框架机制中的几个相关类简单的说明一下。

Handler机制相关类的概括

Read More

安卓常用第三方框架-FastJson

简介

上次我们讲到Google的Gson库,作为国际大公司的阿里巴巴也不敢示弱,出了一款号称速度最快的Fastjson,这里有第三方给出的测试结果https://github.com/eishay/jvm-serializers/wiki, 虽然FastJson在Github上戏称Gson的“G”是“龟速”的意思,但FastJson在文档方面确实做得不如Gson(没办法天朝软件行业的通病)。废话不多说下面先给地址。

Read More

安卓常用第三方框架-Gson

Gson简介

json因其轻量、高效等特性,而被广泛用作移动开发的信息交互的载体。
我们知道AndroidSDK提供了org.json工具包来解析Json数据,但是仍然避免不了解析过程中的一系列重复工作。所以就出现了许多第三方JSON解析框架。JSON官方网站也给我们列出了在各种语言中JSON的解析策略:
这里写图片描述
可以看到java语言中解析JSON的库有很多,但由于移动设备硬件与软件等各方面的因素,在这些库中比较适合用于移动开发的主要有Gson和FastJson。
今天我们先来介绍以下Gson。

Read More

Windows C++界面库

记得大一学C语言的时候,觉得黑白窗很无聊,后来在网上找到了EasyX (一个模仿turbo c的图形库)http://www.easyx.cn ,用它写一些贪吃蛇、扫雷这类有图形界面的游戏来练手。 当时学的时候就很好奇为什么调用这些函数就能绘制图形,后来从网上了解到了Windows编程,于是从淘宝淘了本《Windows程序设计》看了起来,当时看的时候还有点吃力。
趁着大一结束后的那次暑假我看完了王爽老师编写的《汇编语言》,对计算机内存、CPU等底层方面的知识有了更深一层对的了解后,才重新拾起《Windows程序设计》。当时大二也开始学C++了,还记得“亮欧巴”教完谭浩强写的C++,还不能真正理解面向对象的意义,我在直接用Win32API写窗口程序的时候也感觉到要做很多重复工作,写很多模板代码(但当时自己完全不知道怎么用C++去封装Win32API),于是在网上找了些资料,还记得有一位大神出的视频里面讲了MFC的封装原理后,我自己才试着封装了Win32API(当然没使用MFC的消息映射机制,直接用了C++的虚函数多态),之后才明白C++的诞生是计算机工业发展的必然。学完后立马花了2个多月的时间写了个浏览器(为了应付学校的考试,也为了寒假回家过个好年,无奈拖长战线),当然网页显示直接使用MFC封装好的CHtmlView,这其中80%的时间都花在写界面上,当时还不知道开源社区有封装好的MFC控件,也不知道有CBitmapButton这类东西,完全自己封装,最终写出来的界面还贼TM丑,其实这也归结于当时不会PS,搞得后来很多功能都不愿完善了。

当时写的浏览器

Read More

View事件分发机制源码分析

1、事件传递规则概述

在解释事件分发机制之前,需要搞清楚几个概念。
1、事件:由于android设备对键盘依赖性的降低,导致触摸事件(MotionEvent)成为android最主要的事件,所以对于事件的分发,其实就是对MotionEvent对象的传递过程。
2、事件序列:从用户手指按下,到手里离开的这一系列事件的集合(可以看成用户在屏幕上的一个手势)。即事件序列以ACTION_DOWN开始,ACTION_UP结束:ACTION_DOWN–>ACTION_MOVE–>ACTION–>…->ACTION_UP事件。

Read More