自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(149)
  • 资源 (2)
  • 收藏
  • 关注

原创 桥接模式-Bridge Pattern

基本概念桥接模式,将抽象部分与它的实现部分分离,使它们都可以独立地变化。这里的抽象与实现分离是指抽象类和它的派生类用来实现自己的对象。结构图 上图摘自《大话设计模式》应用场景实现系统如果可能有多角度分类,每一种分类都有可能变化,那么就把多角度分离出来让他们独立变化,减少他们之间的耦合。因为这种情况下如果只用继承,会造成大量的类增加,不能满足开放-封闭原则,因此需要考虑桥接模

2015-08-10 13:21:41 674

原创 装饰模式-Decorator Pattern

基本概念装饰模式,动态地给一个对象添加一些额外的职责,就增加功能来说,装饰模式比使用子类继承父类更为灵活,装饰模式可以有效地把类的核心职责和附加功能区分开。结构图 上图摘自《大话设计模式》应用场景当需要往旧的类中添加新的方法或新的逻辑的时候,如果在主类中添加,会增加主类的复杂度;这些需要加入的东西如果仅仅是为了满足某些特定行为的需要,可以作为装饰功能来添加,从而使用装饰模式

2015-08-06 11:11:19 685

原创 单例模式-Singleton Pattern

基本概念单例模式,保证一个类仅有一个实例,并提供一个访问它的全局访问点。结构图饿汉式单例结构图,摘自《大话设计模式》应用场景如果一个类只想保持其唯一实例的时候。源码示例1.饿汉式单例package com.spook.singleton;/** * 饿汉式单例 */public class Singleton { private stat

2015-08-05 10:12:11 568

原创 抽象工厂模式-Abstract Factory Pattern

基本概念抽象工厂模式,提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类。结构图上图摘自《大话设计模式》应用场景一个系统的产品有多于一个的产品族,同属于同一个产品族的产品是在一起使用的,这一约束必须在系统的设计中体现出来,系统提供一个产品类的库,所有的产品以同样的接口出现,从而使客户端不依赖于实现。源码示例1.创建电脑产品接口packag

2015-08-04 11:52:14 831

原创 工厂方法模式-Factory Pattern

基本概念工厂方法模式,定义一个用于创建对象的接口,让子类决定实例化哪一个类。工厂方法使一个类的实例化延迟到其子类。结构图上图摘自《大话设计模式》应用场景当你使用了简单工厂模式,再进行扩展时,本来是需要修改工厂类的,但这会违背开放-封闭原则,因此需要把简单工厂的内部逻辑判断转移到客户端来实现,达到对扩展开放的目的。源码示例1.创建Shape接口packag

2015-08-04 10:06:29 670

原创 简单工厂模式-Simple Factory Pattern

基本概念简单工厂模式是由一个工厂对象决定创建出哪一种产品类的实例,它是工厂模式家族中最简单实用的模式。简单工厂模式的实质是由一个工厂类根据传入的参数,动态决定应该创建哪一个产品类(这些产品类继承自一个父类或接口)的实例。结构图上图摘自http://www.tutorialspoint.com/design_pattern应用场景当需要工厂类负责创建的对象比较少,并且

2015-08-03 14:02:19 807

原创 备忘录模式-Memento Pattern

基本概念备忘录模式,在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。这样以后就可以将该对象恢复到之前保存的状态。结构图上图摘自《大话设计模式》应用场景备忘录模式比较适用于功能比较复杂的,但需要维护或记录属性历史的类,或者需要保存的属性只是众多属性中的一小部分,原始对象可以根据保存的备忘录信息恢复到原来的某个状态。源码示例1.创

2015-07-31 10:45:37 979

原创 如果让我重新设计一款Android App

转载请注明出处:本文来自aspook的博客:blog.csdn.net/ahence开发工具的选择开发工具我将选用Android Studio,它是Google官方指定的Android开发工具,目前是1.2.2稳定版,1.3的预览版也已经发布了。Android Studio的优点就不需多说了,GitHub上大部分的Android开源库也都已迁移到Android Studio上来

2015-07-30 19:10:57 12822 16

原创 模板方法模式-Template Pattern

基本概念模板方法模式,定义一个操作中的算法的骨架,而将一些步骤延迟到子类中。模板方法使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。也可以通俗地理解为把不变的行为移到超类,从而去除子类中的重复代码。结构图上图摘自《大话设计模式》应用场景当不可变和可变的行为同时出现在子类中时,在子类的方法中就不可避免地会重复实现那些不变的行为,这是就可以使用模板方法模

2015-07-30 10:25:09 857

原创 代理模式-Proxy Pattern

基本概念代理模式为其他对象提供一种代理以控制对这个对象的访问。结构图上图摘自《大话设计模式》应用场景1.远程代理,即为一个对象在不同的地址空间提供局部代表,这样可以隐藏一个对象存在于不同地址空间的事实。2.虚拟代理,即根据需要创建开销很大的对象,通过它来存放实例化需要很长时间的真实对象。3.安全代理,即用来控制真实对象时的权限。4.智能指引,即当调用真实对象

2015-07-29 10:02:17 782

原创 建造者模式-Builder Pattern

基本概念建造者模式将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示,又叫做生成器模式。建造者模式将一个产品的内部表象与产品的生产过程分割开来,从而可以使一个建造过程生成具有不同内部表象的产品对象。结构图上图摘自《大话设计模式》应用场景如果一个对象的创建有固定的组成和流程,如组装电脑,包括主机、显示器、键盘、鼠标等几个主要部分(示例代码就是以此为例

2015-07-28 12:54:28 815

原创 适配器模式-Adapter Pattern

基本概念适配器模式(Adapter),将一个类的接口转换成客户希望的另外一个接口。Adapter模式使得原本由于接口不兼容而不能一起工作的那个类可以一起工作。适配器模式类结构图应用场景对于一个已经存在的类,如果它的接口或方法跟需求不匹配,但又不方便修改时,可以考虑使用适配器模式。其主要作用是希望复用一些现存的类,但接口又与复用环境要求不一致。举一个生活中最常见的

2015-07-27 14:24:58 720

原创 观察者模式-Observer Pattern

先俗气的借百科来解释一下概念:观察者模式(有时又被称为发布-订阅Subscribe>模式、模型-视图View>模式、源-收听者Listener>模式或从属者模式)是软件设计模式的一种。在此种模式中,一个目标物件管理所有相依于它的观察者物件,并且在它本身的状态改变时主动发出通知。这通常透过呼叫各观察者所提供的方法来实现。此种模式通常被用来实现事件处理系统。接下来看观察者模式的类结构图:

2015-07-24 18:39:00 796

转载 Kotlin:Android世界的Swift

Kotlin是一门与Swift类似的静态类型JVM语言,由JetBrains设计开发并开源。与Java相比,Kotlin的语法更简洁、更具表达性,而且提供了更多的特性,比如,高阶函数、操作符重载、字符串模板。它与Java高度可互操作,可以同时用在一个项目中。按照JetBrains的说法,根据他们多年的Java平台开发经验,他们认为Java编程语言有一定的局限性和问题,而且由于需要向后兼容,

2015-07-24 09:26:27 998

原创 String、StringBuffer、StringBuilder主要区别及使用选择

1.首先String、StringBuffer、StringBuilder在JDK中都被定义为final类,这意味着他们不可以被继承。2.String最常见,与StringBuffer相比,String的性能较差,因为对String类型进行改变的时候都会重新生成一个新的String对象,这在字符串拼接操作时很明显,因此内容经常改变的字符串不应该使用String,如果不考虑多线程,则应使用Str

2015-07-07 16:04:05 839

转载 How to distribute your own Android library through jCenter and Maven Central from Android Studio

In Android Studio, if you wish to include any library to your application. You could just simply add a following line of dependency in module's build.gradle file.123d

2015-06-29 15:27:46 1827

原创 利用Android属性动画实现Banner的原理与实践

其实在Android刚推出属性动画的时候,就想利用它来设计一个Banner控件,一直没什么时间尝试。在当时看我们应用中的Banner,使用计时器来控制自动播放,设置一个很大的数,利用余数原理来实现ViewPager循环,在进行内存分析的时候,看似不起眼的Banner却是一个消耗内存的大户,相信很多App的Banner都是计时器加ViewPager的方式实现的。最近时间比较宽裕,可以做一些研究性

2015-06-26 10:04:17 3381

原创 在Android Studio中使用Android-PullToRefresh Library

随着新版本的陆续发布,Android Studio越来越好用,原来在ADT中使用的一些第三方库该如何迁移到Android Studio呢?比如Android-PullToRefresh(https://github.com/chrisbanes/Android-PullToRefresh),这是一个经典的下拉刷新库,虽然已不再提倡使用,但仍然有诸多粉丝,在ADT中它是以library的形式被引用的

2015-06-18 11:36:03 8752 3

原创 Android Studio的一些配置(去拼写检查、自动import、大小写智能提示等)

偶尔使用Android Studio写App,由于习惯了ADT的一些配置,如大小写均智能提示等,因此在AS中感觉非常不习惯,不过不用担心,AS也可以做上述配置,满足你的要求。1.去拼写检查AS默认会对代码做拼写检查,如果检查有错的话会打上波浪线,当然这并不影响编译运行,但如果对代码有高度的整洁规范要求,则似乎不可容忍,具体做如下配置,可以关闭AS的拼写检查。File-->Set

2015-06-15 10:52:34 10721

翻译 手把手教你打造一个Material Design风格的App(四)

——接上文。3.3实现导航抽屉菜单项的选择尽管导航抽屉已经实现了,但是你会发现选择抽屉列表项并没有反应,这是因为我们还没有实现RecycleView items的点击监听。因为我们在导航抽屉里有3个菜单(Home,Friends & Messages),所以需要为每一个菜单项创建一个独立的Fragment。(24)在res-->layout里面,创建一个名为fragment_h

2015-05-27 00:04:34 3193

翻译 手把手教你打造一个Material Design风格的App(三)

——接上文。3.2添加抽屉导航添加导航抽屉跟Android 5.0之前是一样的,只是以前我们使用ListView来作为菜单容器,现在我们则使用Material Design风格的RecyclerView。(14)在你工程的java文件夹中,创建3个名为activity、adapter、model的包,将MainActivity.java移到activtiy包中,这样做使得你的代码可

2015-05-26 23:52:44 2965

翻译 手把手教你打造一个Material Design风格的App(二)

——接上文。3.1添加ToolBar(ActionBar)添加ToolBar非常简单,你需要做的仅仅是为toolbar创建一个单独的layout布局,如果你想在哪里展示toolbar,只要在对应布局里将toolbar的布局文件include进来即可。(8)在res-->layout文件夹下创建一个名为toolbar.xml的文件,然后在里面添加一个android.support.v

2015-05-26 23:45:19 3818

翻译 手把手教你打造一个Material Design风格的App(一)

你应该听说过Android的Material Design,它是在Android 5.0(Lollipop)版本引入的。在Material Design中还引入了很多新东西,比如Material Theme,新的小部件,自定义的阴影,矢量图片及自定义动画等。如果你之前没有用过Material Design,那么本文将是一个很好的入门教程。在这篇教程中,我们将会学习Material Design

2015-05-26 23:33:09 9052

原创 LeakCanary小记

简要介绍:LeakCanary是Square提供的一个开源类库,用于快速检测内存泄露。在LeakCanary出现之前检测内存泄露很麻烦,需要先把内存Dump出来,再用MAT(Memory Analyzer tool)等工具来分析究竟是哪里出现了内存泄露。而如果使用了LeakCanary,一旦发生内存泄露,就会得到一个如下图的提示:这种内存泄露的表现方式超级优雅而且定位精准,

2015-05-26 15:36:06 2075

原创 仿迅雷下载进度的圆形面积进度条

老规矩,先上效果图:简要说一下实现原理:1.自定义view,继承View2.onDraw里面绘制圆形并填充3.已知圆形总面积,则可根据进度比率(假设最大进度值为100)计算蓝色面积4.通过圆形、三角形、扇形面积,角度等几何关系可以求解蓝色部分沿竖直直径方向的高度(具体可参考下图)5.绘制相关几何图形,填充适当颜色作为一个控件,目前还只是基本功能,些许

2015-05-25 09:49:18 2734

原创 IndicatorTabBar——可滑动的带指示条的TabBar

这篇文字给大家分享一个可以滑动的TabBar,这里叫做IndicatorTabBar。先上效果图:诸如网易新闻、腾讯新闻、百度新闻等客户端,都使用了类似的TabBar,这玩意儿都快成多页面APP的标配了。简单说一下实现原理:1.自定义IndicatorTabBar,继承自HorizontalScrollView。2.IndicatorTabBar里面放置一个水平方向的L

2015-05-12 17:57:13 2639

原创 图片会说话系列之Android事件的分发传递机制

在一些复杂布局中,经常会遇到事件冲突,事件失效等问题,这就需要我们深入理解Android事件的分发传递机制。最好的方法是自己写一个demo,打印事件相关的日志查看其运行流程,然后再结合源码去深入理解。当然这里不会做这些,这里只有总结性的东西,如果你喜欢这种东西,那么请继续往下看。老规矩,先上图:用户的交互一般发生在触摸屏上,因此Android事件的传递必然涉及到ViewGrou

2015-04-24 11:06:07 2727 2

原创 关于类似“Can't bind to local 8602 for debugger”错误的解决方案

为了适应Android5.0的开发,把JDK升级到了1.7,然后在ADT中想调试一下程序(我连接的真机),结果报错如下:[2015-04-23 15:31:37 - ddms] Can't bind to local 8602 for debugger[2015-04-23 15:31:37 - ddmlib] 您的主机中的软件中止了一个已建立的连接。java.io.IOExcepti

2015-04-23 15:50:49 25617

原创 图片会说话系列之Android图片缓存框架

前言:看过很多精彩的文章,作者写的非常好,但总觉得文字描述没有图片或图表说明来得直观,因为图片可以化抽象为具体。语言是有区域性的,而图片则是全世界通用的,即使语言不通,却能通过图片了解一切。因此想做一个系列的简博客,内容就是一张图附带一些必要的说明,这样就能迅速抓住重点,而不需要做太多的阅读,便能了解框架性的东西。文章所涉及到的图片有的可能来自官方网站,有的来自名家博客,或者是自己绘制的,都会一一

2015-04-17 14:49:47 1795

翻译 如何判断是否可以使用某个Intent

Android提供了一个称为Intent的强大易用的工具,Intent可以将应用转化为高等组件来使用并能比以前更好地重用代码。例如Android主屏幕和AnyCut广泛地使用Intent来创建快捷方式。虽然这种松耦合的API使用起来非常方便,但并不能保证你所发送的Intent一定会被另一个应用接收,这种情况会发生在某些特定的第三方应用程序,如Panoramio及它的RADAR Intent。在

2015-04-14 15:38:45 1888

原创 IndexExpandableListView快速索引定位控件的实现及源码

先抛玉引砖哈,IndexableListView(https://github.com/woozzu/IndexableListView)这个著名的开源控件大家一定很熟悉了,其效果如下:再来看IndexExpandableListView,顾名思义,就是将IndexableListView的ListView变成了ExpandableListView,同时快速索引定位的功能不变。先看

2015-04-03 16:54:10 2003

原创 Android布局的一些实用小策略

以下是一些项目中经常用到的布局实现方案,当然这些方案并非唯一的实现方式,也不一定是最好的实现方式,大概罗列一下,仅供参考,也欢迎大家共同讨论学习。1.需求:将一个Button在一行中居中,并且Button的宽度占屏幕宽度的一半。解决方案:先看具体的xml,如下    android:layout_width="match_parent"    android:lay

2015-04-03 14:40:27 1840

原创 关于使用了OkHttp和Android-PullToRefresh开源库后如何混淆

本人的一款App由于使用了OkHttp、Android-PullToRefresh、Universal-Image-Loader等开源库,其中Android-PullToRefresh是以library的形式引用,其他以jar形式引用,导致在混淆签名时出现错误,具体错误log就不贴了,意思就是找不到某个类,我们可以对应地将所需的包或类去除混淆即可。在我的APP中,Universal-Image

2015-04-03 10:45:37 5018 1

原创 Android集成微信分享的要点及源码示例

如今,社会化分享成了App必不可少的一个功能,而其中最重要的莫过于微信分享,由于微信庞大的用户群及活跃度,因此我们的App往往都需要集成微信分享,微信开放平台也提供了相应的分享SDK。鉴于看到很多人说调不起微信分享,下面就来分享下自己的经验以及在集成微信分享过程中需要注意的地方,最终会提供自己封装好的微信分享源码示例。 其实集成的步骤在微信开放平台的文档指南中已经写的很清楚了:1.申请

2015-03-10 16:59:52 2521 2

转载 Java(Android)线程池

介绍new Thread的弊端及Java四种线程池的使用,对Android同样适用。本文是基础篇,后面会分享下线程池一些高级功能。1、new Thread的弊端执行一个异步任务你还只是如下new Thread吗?new Thread(new Runnable() { @Override public void run() { // TODO

2015-03-06 10:10:04 862

翻译 Web(瓦片)地图的工作原理

【译者按:在看MapBox Guides文档时,看到这篇 How do web maps work?,这篇文档通俗易懂地阐述了Web地图是如何工作的,其实更偏向讲瓦片地图的工作原理,鉴于之前很多人不了解地图切片的原理,因此简单翻译一下,由于源自MapBox文档,文中免不了涉及MapBox的相关术语,但不会影响我们的理解】 在MapBox上打开的Web地图或在你自己的网站上嵌入的Web地图,

2015-03-04 11:16:14 12717 4

转载 WebP 探寻之路

前言不管是 PC 还是移动端,图片一直是流量大头,以苹果公司 Retina 产品为代表的高 PPI 屏对图片的质量提出了更高的要求,如何保证在图片的精细度不降低的前提下缩小图片体积,成为了一个有价值且值得探索的事情。但如今对于 JPEG、PNG 和 GIF 这些图片格式的优化几乎已经达到了极致, 若想改变现状开辟新局面,便要有釜底抽薪的胆量和气魄,而 Google 给了我们一个新选

2015-03-02 17:45:01 1354

翻译 Android图片缓存机制(Caching Bitmaps)

Android加载一张图片到用户界面是很简单的,但是当一次加载多张图片时,情况就变得复杂起来。很多情况下(像ListView、GridView或ViewPager等组件),屏幕上已显示的图片和即将滑动到当前屏幕上的图片数量基本上是没有限制的。这些组件通过重用已经移除屏幕的子视图来将降低内存的使用,垃圾回收器也会及时释放那些已经不再使用的已下载的图片,这些都是很好的方法,但是为了保持一个流畅的、

2015-02-09 15:54:37 2168

原创 关于WebView的一些用法探讨

众所周知,WebView是Android的一个重要视图组件,它基于WebKit内核,相当于一个内置浏览器,因此它主要的功能就是显示网页。其实WebView的功能非常强大,随着Web前端技术和Html5的发展,越来越多的APP不再是单纯的native开发,而是结合了Web方式,更有的甚至完全是Web APP的方式,当然其性能问题那就另讲了。相信每个开发者都或多或少地用过WebView,因此这里不再探

2015-02-03 16:21:09 1472

原创 PinnedSectionListView的实现原理

最近使用新浪体育客户端看NBA新闻,发现其比赛界面也采用了磁铁效果,即上下滑动ListView时,当前时间条会吸附在界面的顶部,具体效果如下图:其实Android手机自带的联系人界面(至少Nexus 4是)也实现了这种效果,滑动联系人列表时,会把当前联系人分组首字母固定在顶端。这种效果的确很酷,如果你问这么酷的效果是否很难实现呢?请记住在我们尚未成为最前沿拓荒者的时候,总有人会在我

2015-02-02 13:20:10 3593 2

Animation-Banner源代码

利用属性动画原理实现的Android Banner,不同于传统Banner使用ViewPager的实现

2015-06-26

Swift Language

苹果最新推出的开发语言Swift——The Swift Programming Language

2014-06-04

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除