- 博客(188)
- 资源 (7)
- 收藏
- 关注

原创 HTML5原生WebGL开发系列教程
1. OpenGL中的坐标变换、矩阵变换2. OpenGL ES 2.0编程基础3. 原生WebGL简单Demo4. 在WebGL中使用drawElements绘图5. WebGL不同几何图形的渲染方式6. 使用自定义glTranslate与glRotate7. 原生WebGL+ArcGIS JS API绘制旋转的地球8. WebGL矩阵、Camera基础操作9. WebGL使用一张贴图纹理绘制地球
2017-05-02 12:20:56
11454

原创 [GitHub开源]基于HTML5实现的轻量级Google Earth三维地图引擎,带你畅游世界
A WebGL virtual globe and map engineWebGlobe WebGlobe是基于HTML5原生WebGL实现的轻量级Google Earth三维地图引擎。GitHub:https://github.com/iSpring/WebGlobeDemo: https://ispring.github.io/WebGlobe/index.html如果觉得不
2016-09-27 12:49:11
35224
4

原创 我的Android博文整理汇总
时间久了,零碎的知识点容易忘,现在从头梳理Android中各个模块的知识结构,总结成文。Intent相关博文: Android中Intent概述及使用 Android中Intent对象与Intent Filter过滤匹配过程详解 Android中常见Intent习惯用法-上篇(附源码下载)Handler相关博文: Android中Handler的使用 深入源码解析Android中的
2015-08-16 00:20:45
11459
原创 自定义实现JavaScript中的Promise
目录浏览器兼容性自定义Promise实现参考Promise是JavaScript ES6规范中的一个重要对象,可以方便地实现各种异步操作。浏览器兼容性以下是各种浏览器对Promise的支持情况:对于不支持Promise的浏览器我们可以自定义Promise实现,将其作为原生Promise的Polyfill。自定义Promise实现以下是自定义实现的Promise:/** * 自定义...
2020-03-29 23:07:50
1367
原创 JavaScript中使用new操作符实例化对象时构造函数有返回值的情况分析
目录函数的两面性作为普通函数执行作为类的构造函数实例化对象作为类的构造函数使用时在不同返回值情况下的情况分析构造函数无返回值构造函数返有返回值,返回值是一个非null的对象构造函数有返回值,返回值不是对象或者返回值是null总结参考JavaScript中的函数具有两面性,既可以作为普通的函数进行执行,也可以作为类的构造函数实例化对象。函数的两面性作为普通函数执行当函数作为普通函数执行时...
2020-03-26 14:02:42
2245
原创 JavaScript中遍历对象属性方法详解
JavaScript中有多种方式遍历对象中的属性,本文中所说的对象都是普通的Object对象,不包括Array、Map、Set等实现了Iterator接口的对象。对象属性的遍历主要受几方面的影响: 能否遍历原型链上的属性、能否遍历不可枚举属性、能否遍历Symbol属性。遍历对象属性的方式包括: for...in、Object.keys()、Object.getOwnPropertyNames...
2020-03-22 17:18:33
6425
1
原创 详解JavaScript对象中的getter和setter
目录getter和setter的作用添加伪属性的方式1. 通过`Object.prototype.__defineGetter__()` 和 `Object.prototype.__defineSetter__()`定义getter和setter2. 在新对象初始化时定义getter和setter3. 通过Object.defineProperty()和Object.definePropertie...
2020-03-16 14:29:33
3549
1
原创 Object.defineProperty()详解
目录为什么要使用Object.defineProperty()?方法签名方法描述属性描述符示例浏览器兼容性参考为什么要使用Object.defineProperty()?我们对一个Object对象设置属性时,一般是通过对象的.操作符或者[]操作符直接赋值的,例如obj1.a = 1 或 obj1['a'] = 1,通过这种方式添加的属性后续可以更改属性值,并且默认该属性是可枚举的,即通过for...
2020-03-16 00:12:56
6618
3
原创 JavaScript原型链以及ES3、ES5、ES6实现继承的不同方式
本文首发于GitHub,《JavaScript原型链以及ES3、ES5、ES6实现继承的不同方式》,欢迎关注我的GitHub。原型执行代码var o = new Object();,此时o对象内部会存储一个指针,这个指针指向了Object.prototype,当执行o.toString()等方法(或访问其他属性)时,o会首先查看自身有没有该方法或属性,如果没有的话就沿着内部存储的指针找到Object
2017-03-15 12:33:50
8055
1
原创 Android源码解析Activity#setContentView()方法
在Activity初始化的过程中,会调用Activity的attach方法,在该方法中会创建一个PhoneWindow的实例,将其作为Activity的mWindow成员变量。在执行完了Activity#attach()方法之后,会执行Activity#onCreate()方法。我们在Activity#onCreate()方法中会就调用setContentView()方法,我们将一个Layout的资
2016-07-27 11:13:43
9342
2
原创 [GitHub开源]Android自定义View实现微信打飞机游戏
之前写了很多自定义View理论方面的文章,具体可以参见《Android中自定义View、ViewGroup理论基础详解》 。 理论指导实践,本博文演示了如何通过自定义View实现微信打飞机游戏。全部源码已经开源到GitHub,如果觉得不错,欢迎大家Star和Fork!GitHub: https://github.com/iSpring/GamePlane/游戏说明飞机一直发射子弹,用手指滑动可以
2016-07-24 17:26:21
11584
4
原创 Android中AIDL实现进程通信(附源码下载)
AIDL概述之前的博客《Android中通过Messenger与Service实现进程间双向通信》演示了如何通过Messenger实现与Service进行跨进程通信,即IPC。但用Messenger实现的IPC存在一点不足:Service内部维护着一个Messenger,Messenger内部又维护着一个Hanlder,当多个client向该Service发送Message时,这些Message需要
2016-07-10 15:01:10
11870
2
原创 Okhttp使用详解
在Android开发中,发送HTTP请求是很常见的。SDK中自带的HttpURLConnection虽然能基本满足需求,但是在使用上有诸多不便,为此,square公司实现了一个HTTP客户端的类库——Okhttp 。Okhttp是一个支持HTTP 和 HTTP/2 的客户端,可以在Android和Java应用程序中使用,其具有以下特点: 1. API设计轻巧,基本上通过几行代码的链式调用即可获取结
2016-06-24 13:39:46
53880
12
原创 HTTPS理论基础及其在Android中的最佳实践
我们知道,HTTP请求都是明文传输的,所谓的明文指的是没有经过加密的信息,如果HTTP请求被黑客拦截,并且里面含有银行卡密码等敏感数据的话,会非常危险。为了解决这个问题,Netscape 公司制定了HTTPS协议,HTTPS可以将数据加密传输,也就是传输的是密文,即便黑客在传输过程中拦截到数据也无法破译,这就保证了网络通信的安全。密码学基础在正式讲解HTTPS协议之前,我们首先要知道一些密码学的知识
2016-06-09 13:05:44
31480
14
原创 Android中HttpURLConnection使用详解
认识Http协议Android中发送http网络请求是很常见的,要有GET请求和POST请求。一个完整的http请求需要经历两个过程:客户端发送请求到服务器,然后服务器将结果返回给客户端,如下图所示: 客户端->服务器 客户端向服务器发送请求主要包含以下信息:请求的Url地址、请求头以及可选的请求体,打开百度首页,客户端向服务器发送的信息如下所示:请求URL(Request URL) 上图中的R
2016-05-22 12:29:47
76659
13
原创 Android中自定义View、ViewGroup理论基础详解
Android自身提供了许多widgets,但是有时候这些widgets并不能满足我们的需求,这时我们就需要自定义View,本文会详细说明自定义View的各种理论基础,只有理解了这些知识,我们才能更好地实现各种功能的控件。我觉得自定义View中最重要的部分就是绘图和交互,自定义的绘图使得你的View与众不同,交互使用户可以与你的View进行交互,而绘图的前提是View的量算与布局,交互的基础是触摸事
2016-05-04 13:04:06
18742
原创 无需Root实现Android手机屏幕流畅投影到电脑进行演示(附软件下载)
最近要在公司的会议上演示App,需要在投影仪上显示出来给大家演示。由于投影仪不是智能投影仪,只能将App先投影到自己的笔记本上,然后再将笔记本上的内容投影到投影仪上。该App是个游戏,实时交互性比较高,之前试过一些各种手机助手,比如腾讯的应用宝、360手机助手、豌豆荚手机助手等,这些手机助手可以在电脑上显示手机屏幕,但是非常卡顿,基本没法演示游戏App。我的手机是小米Note,最开始的时候用的是An
2016-04-12 19:54:54
274582
1
原创 源码解析ListView中的RecycleBin机制
在自定义Adapter时,我们常常会重写Adapter的getView方法,该方法的签名如下所示:public abstract View getView (int position, View convertView, ViewGroup parent) 此处会传入一个convertView变量,它的值有可能是null,也有可能不是null,如果不为null,我们就可以复用该convertView
2016-04-05 23:38:57
19524
4
原创 使用详解及源码解析Android中的Adapter、BaseAdapter、ArrayAdapter、SimpleAdapter和SimpleCursorAdapter
Adapter相当于一个数据源,可以给AdapterView提供数据,并根据数据创建对应的UI,可以通过调用AdapterView的setAdapter方法使得AdapterView将Adapter作为数据源。常见的AdapterView的子类有ListView、GridView、Spinner和ExpandableListView等。本文就以ListView为例讲解各种常见的Adapter的使用。
2016-03-06 00:22:19
24068
4
原创 Android中View自定义XML属性详解以及R.attr与R.styleable的区别
为View添加自定义XML属性Android中的各种Widget都提供了很多XML属性,我们可以利用这些XML属性在layout文件中为Widget的属性赋值。如下所示:<TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:t
2016-03-02 00:59:55
40918
22
原创 Android中AsyncTask使用详解
在Android中我们可以通过Thread+Handler实现多线程通信,一种经典的使用场景是:在新线程中进行耗时操作,当任务完成后通过Handler向主线程发送Message,这样主线程的Handler在收到该Message之后就可以进行更新UI的操作。上述场景中需要分别在Thread和Handler中编写代码逻辑,为了使得代码更加统一,我们可以使用AsyncTask类。AsyncTask是And
2016-02-19 18:50:44
56989
6
原创 源码解析Android中AsyncTask的工作原理
在之前的博客《Android中AsyncTask使用详解》中我们提到AsyncTask是对Thread和Handler的组合包装,本文将通过解析的方式让大家了解AsyncTask的工作原理。AsyncTask的源码链接https://github.com/android/platform_frameworks_base/blob/master/core/java/android/os/AsyncTa
2016-02-17 23:03:36
17359
16
原创 Android中Canvas绘图之Shader使用图文详解
概述我们在用Android中的Canvas绘制各种面图形时,可以通过Paint.setShader(shader)方法为画笔Paint设置shader,这样就可以绘制出多彩的图形。那么Shader是什么呢?做过GPU绘图的同学应该都知道这个词汇,Shader就是着色器的意思。我们可以这样理解,Canvas中的各种drawXXX方法定义了图形的形状,画笔中的Shader则定义了图形的着色、外观,二者结
2016-01-15 00:05:02
33220
1
原创 Android中Canvas绘图之PorterDuffXfermode使用及工作原理详解
概述类android.graphics.PorterDuffXfermode继承自android.graphics.Xfermode。在用Android中的Canvas进行绘图时,可以通过使用PorterDuffXfermode将所绘制的图形的像素与Canvas中对应位置的像素按照一定规则进行混合,形成新的像素值,从而更新Canvas中最终的像素颜色值,这样会创建很多有趣的效果。当使用PorterD
2016-01-11 00:05:14
51400
79
原创 Andorid中.9.png图片的使用及制作
我们有一个TextView,其里面的内容是可以通过代码动态改变的,我们想用一张图片作为TextView的背景,实现类似于手机QQ对话中的气泡文本效果。TextView定义如下:<TextView android:text="@string/hello_world" android:layout_width="wrap_content" android:layout_h
2016-01-06 20:23:26
9125
4
原创 图文详解Andorid中用Shape定义GradientDrawable
Android中提供了各种类型的Drawable,也可以用XML定义各种Drawable。本文重点讲述如何用XML中的shape节点定义GradientDrawable。用XML定义的drawable文件放在res/drawable目录下。用XML文件定义GradientDrawable的语法如下所示:<?xml version="1.0" encoding="utf-8"?><shape
2016-01-01 16:30:33
14387
2
原创 源码解析Android中View的layout布局过程
Android中的Veiw从内存中到呈现在UI界面上需要依次经历三个阶段:量算 -> 布局 -> 绘图,关于View的量算、布局、绘图的总体机制可参见博文 《 Android中View的布局及绘图机制》。量算是布局的基础,如果想了解量算的细节,可参见博文《源码解析Android中View的measure量算过程》。本文将从源码角度解析View的布局layout过程,本文会详细介绍View布局过程中的
2015-12-20 23:10:11
13834
3
原创 Android中TouchEvent触摸事件机制
当我们的手指在Android屏幕上点击或滑动时,就会触发触摸事件TouchEvent。在App中ViewGroup和View存在多级嵌套,在最外层的是Activity,最内层的View,介于Activity与View之间的是一些ViewGroup。本文为了简化讨论,我们假设一个Activity中只有一个ViewGroup,这个ViewGroup中只有一个View。当我们用手指触摸到View的UI时,
2015-12-20 16:28:52
21485
3
原创 Android图文详解属性动画
Android中的动画分为视图动画(View Animation)、属性动画(Property Animation)以及Drawable动画。从Android 3.0(API Level 11)开始,Android开始支持属性动画,本文主要讲解如何使用属性动画。关于视图动画可以参见博文《Android四大视图动画图文详解》。概述视图动画局限比较大,如下所述:视图动画只能使用在View上面。视图动
2015-12-16 00:15:58
7645
原创 Android四大视图动画图文详解
Android中的动画分为视图动画(View Animation)、属性动画(Property Animation)以及Drawable动画。Android从最初的版本就支持视图动画,视图动画顾名思义,就是应用在视图View上的动画。视图动画的核心类是android/view/animation/Animation,该类是一个抽象类,该类有五个子类,分别是AlphaAnimation、Transla
2015-12-03 22:43:58
9625
原创 Android中Canvas绘图之MaskFilter图文详解(附源码下载)
如果对Canvas绘图不熟悉,强烈建议您阅读博文《Android中Canvas绘图基础详解(附源码下载)》,该文对Android中的Canvas绘图基础进行了详细的描述。本文着重讲解如何使用MaskFilter创建模糊阴影以及浮雕效果。我们知道Canvas中的各种drawXXX方法决定了绘制的几何图形的形状,而画笔Paint则决定了以什么效果绘制这些图形。Paint中有一个setMaskFilter
2015-11-17 01:03:24
11559
3
原创 Android中GPU硬件加速控制及其在2D图形绘制上的局限
图形的渲染可分为两种:软件渲染和硬件渲染。软件渲染是靠CPU计算各种坐标并绘制,主要是占用内存;硬件渲染是靠GPU,主要占用显存,一般的3D图形程序(OpenGL、DirectX)都是GPU加速的。在Android3.0之前,2D绘图API只支持软件渲染模式,从Android3.0开始,2D绘图API开始支持GPU硬件渲染,即View中的Canvas的绘图操作会使用GPU,所以从Android 3.
2015-11-14 12:58:00
12903
1
原创 Android中Canvas绘图基础详解(附源码下载)
Android中,如果我们想绘制复杂的自定义View或游戏,我们就需要熟悉绘图API。Android通过Canvas类暴露了很多drawXXX方法,我们可以通过这些方法绘制各种各样的图形。Canvas绘图有三个基本要素:Canvas、绘图坐标系以及Paint。Canvas是画布,我们通过Canvas的各种drawXXX方法将图形绘制到Canvas上面,在drawXXX方法中我们需要传入要绘制的图形的
2015-11-11 00:30:38
44935
10
原创 Android中Activity执行restart过程中涉及到的四种数据存储恢复的方法
我们知道,当Configuration Change发生的时候(比如横竖屏切换等),会导致Activity重启,即先destroy,然后会restart,一般情况下restart的时间比较短,为了保证一致的用户体验,我们应该在Activity重启前将一些数据存储下来,然后在restart的时候重新根据这些数据更新UI。当然你可能想将这些数据写到物理文件或数据库中,但是这样有缺点,因为IO操作时耗时操
2015-11-06 13:13:25
6230
1
原创 源码解析Android中View的measure量算过程
View的measure方法还是比较聪明的,知道如何偷懒利用以前量算过的数据,如果情况有变,那么就调用onMeasure方法进行实际的量算工作,在onMeasure中,View要根据父ViewGroup给其传递进来的widthMeasureSpec和heightMeasureSpec,并结合View自身想要的尺寸,综合考虑,计算出最终的量算的宽度和高度,并存储到相应的成员变量中,这才标志着该View量算有效的完成了,
2015-10-25 14:08:54
13387
2
原创 Android中View的量算、布局及绘图机制
1. Android自上而下对所有View进行量算,这样Android就知道了每个View想要的尺寸大小,即宽高信息2. 在完成了对所有View的量算工作后,Android会自上而下对所有View进行布局,Android就知道了每个View在其父控件中的位置,即View到其父控件四边的left、right、top、bottom3. 在完成了对所有View的布局工作后,Android会自上而下对所有View进行
2015-10-17 14:42:04
16102
2
原创 深入源码解析Android中Loader、AsyncTaskLoader、CursorLoader、LoaderManager
如果对Loader、AsyncTaskLoader、CursorLoader、LoaderManager等概念不明白或不知道如何使用Loader机制,可参见博文Android中Loader及LoaderManager的使用(附源码下载)。本文主要通过研究Loader及其子类的生命周期的方式来对Loader及其子类、LoaderManager的源码进行研究。Loader是靠LoaderManager管
2015-10-08 00:01:34
7891
3
原创 Android中Loader及LoaderManager的使用(附源码下载)
managedQuery方法的缺陷Loader是用来更好地加载数据的,在我们谈论Loader之前,我们先研究一下Activity的managedQuery方法,该方法也是用于在Activity中加载数据的。在Android 3.0之前的版本中,我们如果想在Activity中通过ContentResolver对ContentProvider进行查询,我们可以方便的调用Activity的managedQ
2015-09-30 22:59:58
14919
3
原创 Android中常见Intent习惯用法-上篇(附源码下载)
Android中的Intent是一个非常重要的类,如果对Intent不是特别了解,可以参见博文《Android中Intent概述及使用》。如果对Intent Filter不是特别了解,可以参见博文《Android中Intent对象与Intent Filter过滤匹配过程详解》。本文着重讲一下Android中一些常见的Intent的习惯用法,比如如何通过Intent发送短信、发送邮件、启动摄像机拍照录
2015-09-19 19:42:53
7106
Android使用MaskFilter的Demo
2015-11-17
Android中Canvas绘图基础详解
2015-11-11
Android中使用Loader读取联系人信息(兼容低版本Android)
2015-09-30
Android利用Intent拍照、摄像、打电话、发短信、发邮件等示例
2015-09-19
ArcObjects开发基础与技巧——基于Visual+Basic.NET-蒋波涛
2010-04-28
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人