
开源项目
文章平均质量分 84
由此及彼
代码可以更优雅。
展开
-
项目实战:超实用小工具isFastClick解决重复点击按钮问题
相信大家在项目开发中都遇到过这种case,点击按钮时,由于手机一时卡顿或者手速过快,造成按钮重复多次点击,跳转生成多个Activity(然后一个个关)或者其他重复操作。现在,就让我们通过几行代码一劳永逸的解决它。小工具的核心思想就是借助System.currentTimeMillis()计算多次点击按钮的时间差,如果这个时间差很小,我们就认为这是无效的重复点击。封装一个Utils工原创 2017-04-01 13:46:31 · 1709 阅读 · 0 评论 -
深入浅出Android消息机制的原理(示意图和源码)
Android系统中的视图组件并不是线程安全的,如果要更新视图,必须在主线程中更新。因此,我们通过Handler在子线程中通知主线程,让主线程做更新操作。这个过程中消息机制起着重要的作用。下面,我们就来分析一下Android中的消息机制。熟悉Windows编程的朋友知道Windows程序是消息驱动的,并且有全局的消息循环系统。Google参考了Windows的消息循环机制,也在An原创 2016-10-31 14:16:13 · 391 阅读 · 0 评论 -
Unit Testing With Android Studio
This article covers the basics of using Android Unit Tests with Android Studio.Enabling Unit Testing In Android StudioMany guides out there will encourage you to add some lines in your “build转载 2016-10-08 16:38:54 · 327 阅读 · 0 评论 -
5min通过ViewPager实现简易微信主界面(2)-移动指示器
今天我们1min实现微信主界面中的移动指示器,当我们切换ViewPager时,上方的小三角指示器联动。最终效果如图所示:1.初始化数据时实现ViewPager.OnPageChangeListener并重写onPageScrolled方法: main_vp_main.setOnPageChangeListener(new ViewPager.OnPageC原创 2016-10-08 15:51:33 · 362 阅读 · 0 评论 -
1min初识SwipeRefreshLayout
Android开发中使用最多的数据刷新方式应该就是下拉刷新,我们可以使用第三方的开源库PullToRefresh或者Google自己的下拉组件SwipeRefreshLayout,下面我们1min快速学习如何使用SwipeRefreshLayout。我们先写好布局文件,RelativeLayout里有一个SwipeRefreshLayout,SwipeRefreshLayout里有一个List原创 2016-10-27 15:14:36 · 240 阅读 · 0 评论 -
Android高效加载大图、多图解决方案,有效避免程序OOM
高效加载大图片我们在编写Android程序的时候经常要用到许多图片,不同图片总是会有不同的形状、不同的大小,但在大多数情况下,这些图片都会大于我们程序所需要的大小。比如说系统图片库里展示的图片大都是用手机摄像头拍出来的,这些图片的分辨率会比我们手机屏幕的分辨率高得多。大家应该知道,我们编写的应用程序都是有一定内存限制的,程序占用了过高的内存就容易出现OOM(OutOfMemory)异常。我们可转载 2016-09-30 11:42:43 · 272 阅读 · 0 评论 -
3min初识ListView(7)-从源码角度重看ArrayAdapter
承接上一篇文章3min初识ListView(6)-数组适配器介绍,今天我们从源码的角度在好好看看ArrayAdapter。从构造方法入手分析,点开如下: /** * Constructor * * @param context The current context. * @param resource The resource ID for原创 2016-10-25 21:30:40 · 314 阅读 · 0 评论 -
Android访问网络,使用HttpURLConnection还是HttpClient?
最近在研究Volley框架的源码,发现它在HTTP请求的使用上比较有意思,在Android 2.3及以上版本,使用的是HttpURLConnection,而在Android 2.2及以下版本,使用的是HttpClient。我也比较好奇这么使用的原因,于是专门找到了一位Google的工程师写的一篇博客,文中对HttpURLConnection和HttpClient进行了对比,下面我就给大家简要地翻译转载 2016-09-29 11:09:17 · 310 阅读 · 0 评论 -
Android弹幕功能实现,模仿斗鱼直播的弹幕效果
记得之前有位朋友在我的公众号里问过我,像直播的那种弹幕功能该如何实现?如今直播行业确实是非常火爆啊,大大小小的公司都要涉足一下直播的领域,用斗鱼的话来讲,现在就是千播之战。而弹幕则无疑是直播功能当中最为重要的一个功能之一,那么今天,我就带着大家一起来实现一个简单的Android端弹幕效果。分析首先我们来看一下斗鱼上的弹幕效果,如下图所示:这是一个Do转载 2016-11-05 19:28:45 · 627 阅读 · 0 评论 -
通过微信小程序看前端
前言2016年9月22日凌晨,微信官方通过“微信公开课”公众号发布了关于微信小程序(微信应用号)的内测通知。整个朋友圈瞬间便像炸开了锅似的,各种揣测、介绍性文章在一夜里诞生。而真正收到内测邀请的公众号据说只有200个。虽然内测名额十分稀少,但依赖中国广大开发者的破解和分享精神,在网络上很快出现了开发工具的破解版本和API文档。然而可能是微信的妥协或者早已预料,9月24日微信官方发布了不转载 2016-09-29 09:57:27 · 323 阅读 · 0 评论 -
你可能不知道的Activity(1)-onPause、配置文件、filter、返回结果
今天我们一起来学习Google官方文档中的Activity部分,梳理一下你可能不知道的Activity。要创建一个activity,你必须创建一个Activity(或者它存在的子类)的子类。 在你的子类里,你需要实现系统调用的回调方法,这些方法用于activity在生命周期中进行事务处理。例如创建,停止,恢复,销毁。其中两个最重要的回调方法分别为:onCreate()你必须实现这个方法原创 2016-11-22 16:03:40 · 433 阅读 · 2 评论 -
Google官方Training读后感-权重、onClick
当前EditText和Button部件只是适应了他们各自内容的大小,如下图所示:这样设置对按钮来说很合适,但是对于文本框来说就不太好了,因为用户可能输入更长的文本内容。因此如果能够占满整个屏幕宽度会更好。LinearLayout使用权重属性来达到这个目的,你可以使用android:layout_weight属性来设置。权重的值指的是每个部件所占剩余空间的大小,该值与同级部件所占空间大小原创 2016-11-23 15:47:34 · 562 阅读 · 0 评论 -
Android Studio系列教程四--Gradle基础
其实很早之前也写了一篇Gradle的基础博客,但是时间很久了,现在Gradle已经更新了很多,所以暂且结合Stduio 1.0正式版与最新的Gradle语法来详细讲解下,小伙伴们直接跟我一步步来学习吧。什么是Gradle?Gradle是一种依赖管理工具,基于Groovy语言,面向Java应用为主,它抛弃了基于XML的各种繁琐配置,取而代之的是一种基于Groovy的内部领域特定(DSL)语言转载 2016-12-23 10:21:14 · 249 阅读 · 0 评论 -
项目实战:几十行代码实现更加强大的Log,全方位输出类-方法-行数-信息
在项目开发中,我们经常使用Log帮助我们调试代码。但是,Log可以更加强大。在这里我对Log进行封装,借助StackTraceElement类,几十行代码实现更加强大的Log,全方位输出类-方法-行数-内容。我们先看一下Android的Log: /** * Send a {@link #DEBUG} log message. * @param tag Used t原创 2017-03-22 19:19:26 · 849 阅读 · 0 评论 -
项目实战:滚动刷新场景(从ArrayList到LinkedList)
如果有这样一个需求,有这样一个列表显示数据,现假设一共显示25项,初始状态为空。首先从0-24添加数据,满了之后,覆盖最早数据,即继续从0-24追加数据。习惯性思维ArrayList开始搞。java.util 类 ArrayListjava.lang.Object java.util.AbstractCollection java.util.Abstra原创 2016-09-20 17:16:35 · 4017 阅读 · 6 评论 -
一个登录Demo初识MVP
从我们的项目到招聘网站的JD,处处可见Android MVP 模式的身影。项目越来越庞大,开发越来越多,MVP的优势越来越明显。今天我们通过一个简单的登录Demo,初步学会MVP的使用。首先,什么是MVP?MVP模式是MVC模式在Android上的一种变体,要介绍MVP就得先介绍MVC。在MVC模式中,Activity应该是属于View这一层。而实质上,它既承担了V原创 2017-03-08 16:20:45 · 458 阅读 · 0 评论 -
千呼万唤始出来的CoordinatorLayout
亲可记得我之前转载的INTRODUCTION TO COORDINATOR LAYOUT ON ANDROID,今天将它翻译一遍,以飨读者。在这一年的I/O开发者大会上,Google引入了一个新的Android设计支持库来帮助开发者们在他们的APP中翻译 2017-03-04 15:27:13 · 433 阅读 · 0 评论 -
Git的核心概念
本文不是Git使用教学篇,而是偏向理论方面,旨在更加深刻的理解Git,这样才能更好的使用它,让工具成为我们得力的助手。版本控制系统Git 是目前世界上最优秀的分布式版本控制系统。版本控制系统是能够随着时间的推进记录一系列文件的变化以便于你以后想要的退回到某个版本的系统。版本控制系统分为三大类:本地版本控制系统,集中式版本控制系统和分布式版本控制系统本地版本控制(Loca转载 2017-02-23 11:20:47 · 556 阅读 · 0 评论 -
从源码分析,初步了解开源项目SlidingMenu(侧滑菜单)
我们看到的很多APP都有侧滑菜单的功能,今天我们学习一个Github上的开源项目SlidingMenu,对SlidingMenu 还不是很了解的童鞋,可以参考下本博客。本博客从源码入手,写一个小Demo引入SlidingMenu,后续开发大家可以自行扩展。jfeinstein10/SlidingMenuGitHub链接: https://github.com/jfeinstein10/Sl原创 2017-01-17 16:07:28 · 367 阅读 · 0 评论 -
Android SlidingMenu 使用详解
很多APP都有侧滑菜单的功能,部分APP左右都是侧滑菜单~SlidingMenu 这个开源项目可以很好帮助我们实现侧滑功能,如果对SlidingMenu 还不是很了解的童鞋,可以参考下本篇博客。将侧滑菜单引入项目的方式很多中,本博客先通过例子介绍各种引入方式,然后给大家展示个实例:主布局ViewPager,左右各一个侧滑菜单的用法,差不多已经能满足大部分应用的需求了。关于常用属性,在文章末尾介绍。转载 2017-01-17 11:59:32 · 296 阅读 · 0 评论 -
JavaSE系列:从源码和API分析StringBuffer(概述、构造方法)
下面我们将从概述、构造方法···几个方面简单介绍StringBuffer:概述,提到StringBuffer,下意识的蹦出两点,1.我们如果通过String对字符串进行拼接操作,每次拼接,都会构建一个新的String对象,既耗时,又浪费空间。而StringBuffer就可以解决这个问题。2.线程安全的可变(长度和内容)字符序列。ps:线程安全:同步,依次顺序执行,安全性高;线程不安原创 2017-01-06 11:40:53 · 310 阅读 · 0 评论 -
AS技巧合集「常用技巧篇」
1. 书签(Bookmarks)描述:这是一个很有用的功能,让你可以在某处做个标记(书签),方便后面再跳转到此处。调用:Menu → Navigate → Bookmarks快捷键:添加/移除书签:F3(OS X) 、F11(Windows/Linux);添加/移除书签(带标记):Alt + F3(OS X)、Ctrl + F11转载 2016-12-23 10:35:18 · 684 阅读 · 0 评论 -
Android Volley完全解析(四),带你从源码的角度理解Volley
经过前三篇文章的学习,Volley的用法我们已经掌握的差不多了,但是对于Volley的工作原理,恐怕有很多朋友还不是很清楚。因此,本篇文章中我们就来一起阅读一下Volley的源码,将它的工作流程整体地梳理一遍。同时,这也是Volley系列的最后一篇文章了。其实,Volley的官方文档中本身就附有了一张Volley的工作流程图,如下图所示。多数朋友突然看到一张这样的图,应转载 2016-09-28 13:49:01 · 383 阅读 · 0 评论 -
Android应用程序窗口(Activity)的运行上下文环境(Context)的创建过程分析
在前文中,我们简要介绍了Android应用程序窗口的框架。Android应用程序窗口在运行的过程中,需要访问一些特定的资源或者类。这些特定的资源或者类构成了Android应用程序的运行上下文环境,Android应用程序窗口可以通过一个Context接口来访问它,这个Context接口也是我们在开发应用程序时经常碰到的。在本文中,我们就将详细分析Android应用程序窗口的运行上下文环境的创建过程。转载 2016-09-28 10:55:24 · 418 阅读 · 0 评论 -
Android Volley完全解析(三),定制自己的Request
经过前面两篇文章的学习,我们已经掌握了Volley各种Request的使用方法,包括StringRequest、JsonRequest、ImageRequest等。其中StringRequest用于请求一条普通的文本数据,JsonRequest(JsonObjectRequest、JsonArrayRequest)用于请求一条JSON格式的数据,ImageRequest则是用于请求网络上的一张图片转载 2016-09-27 19:24:42 · 301 阅读 · 0 评论 -
Git初体验(2)-暂存区和版本库
Git和其他版本控制系统如SVN的一个不同之处就是有暂存区的概念。先来看名词解释。工作区(Working Directory)就是你在电脑里能看到的目录,比如我的learngit文件夹就是一个工作区。版本库(Repository)工作区有一个隐藏目录.git,这个不算工作区,而是Git的版本库。Git的版本库里存了很多东西,其中最重要的就是称为sta转载 2016-08-12 17:46:07 · 251 阅读 · 0 评论 -
Git初体验(1)-初始化、添加、查看
实用性强,边学边练,一点也不枯燥。而且,所学的Git命令是“充分且必要”的,掌握了这些东西,就可以通过Git轻松地完成工作。Git是什么?他是目前世界上最先进的分布式版本控制系统(没有之一)。那什么是版本控制系统?如果你用Microsoft Word写过长篇大论,那你一定有这样的经历:想删除一个段落,又怕将来想恢复找不回来怎么办?有办法,先把当前文件“另存为……”一原创 2016-08-11 16:24:14 · 733 阅读 · 0 评论 -
大话Docker
如何通俗解释Docker是什么?Docker的思想来自于集装箱,集装箱解决了什么问题?在一艘大船上,可以把货物规整的摆放起来。并且各种各样的货物被集装箱标准化了,集装箱和集装箱之间不会互相影响。那么我就不需要专门运送水果的船和专门运送化学品的船了。只要这些货物在集装箱里封装的好好的,那我就可以用一艘大船把他们都运走。docker就是类似的理念。现在都流行云计算了,云计算就好转载 2016-08-31 20:11:37 · 616 阅读 · 0 评论 -
Git初体验(7)-标签管理和Github
标签管理发布一个版本时,我们通常先在版本库中打一个标签(tag),这样,就唯一确定了打标签时刻的版本。将来无论什么时候,取某个标签的版本,就是把那个打标签的时刻的历史版本取出来。所以,标签也是版本库的一个快照。Git的标签虽然是版本库的快照,但其实它就是指向某个commit的指针(跟分支很像对不对?但是分支可以移动,标签不能移动),所以,创建和删除标签都是瞬间完成的。转载 2016-08-31 10:48:41 · 901 阅读 · 0 评论 -
Git初体验(5)-分支管理
在版本回退里,你已经知道,每次提交,Git都把它们串成一条时间线,这条时间线就是一个分支。截止到目前,只有一条时间线,在Git里,这个分支叫主分支,即master分支。HEAD严格来说不是指向提交,而是指向master,master才是指向提交的,所以,HEAD指向的就是当前分支。一开始的时候,master分支是一条线,Git用master指向最新的提交,再用HEAD指向master,就能转载 2016-08-19 15:50:41 · 1405 阅读 · 0 评论 -
Git初体验(4)-远程仓库
到目前为止,我们已经掌握了如何在Git仓库里对一个文件进行时光穿梭,你再也不用担心文件备份或者丢失的问题了。可是有用过集中式版本控制系统SVN的童鞋会站出来说,这些功能在SVN里早就有了,没看出Git有什么特别的地方。没错,如果只是在一个仓库里管理文件历史,Git和SVN真没啥区别。为了保证你现在所学的Git物超所值,将来绝对不会后悔,同时为了打击已经不幸学了SVN的童鞋,本章开始转载 2016-08-18 19:10:16 · 276 阅读 · 0 评论 -
需求分析,我们应当怎样做
又到新年了,日历又要从2011年翻到2012年了,这使我有太多的感慨,进而勾起了对太多往事的回忆。过去的10年,毫无疑问是中国软件业发展最快的10年。当我们刚刚毕业的时候,还在使用VB、PB开发一些简单的数据库应用,而现在却几乎看不到它们的踪影,换来的是诸如J2EE和.NET这样的大型web应用。而这期间,RUP、XP、敏捷开发、持续集成••••••一个接一个的新概念层出不穷,令人眼花缭乱。现在想转载 2016-08-16 21:42:07 · 1398 阅读 · 0 评论 -
Github版本控制入门–合并分支
话不多说,简单操作,直接上图。协作开发,版本管理:添加功能,新建分支-测试成功,合并分支-收尾工作,删除分支。原创 2016-06-19 20:46:05 · 523 阅读 · 0 评论 -
Qualcomm DragonBorad 410c GET!
Qualcomm DragonBorad 410c,一个强大的低成本设计平台,在推动全球嵌入式计算产品创新中扮演关键角色。Dragon Board410c更是全球首批高性能、低成本的64位ARM开发平台之一。千呼万唤始出来,期待已久的高性能开发板--Qualcomm DragonBorad 410c终于迎来了国内首次公开试用征集活动!本人很荣幸的成为第一批试用者。现在还有点小激动哈。原创 2016-02-26 20:01:05 · 1160 阅读 · 0 评论 -
Git初体验(3)-撤销和删除
撤销修改自然,你是不会犯错的。不过现在是凌晨两点,你正在赶一份工作报告,你在readme.txt中添加了一行:$ cat readme.txtGit is a distributed version control system.Git is free software distributed under the GPL.Git has a mutable index c转载 2016-08-15 19:00:11 · 286 阅读 · 0 评论 -
Git初体验(6)-分支的冲突、管理、Bug、feature和多人协作
解决冲突人生不如意之事十之八九,合并分支往往也不是一帆风顺的。准备新的feature1分支,继续我们的新分支开发:$ git checkout -b feature1Switched to a new branch 'feature1'修改readme.txt最后一行,改为:Creating a new branch is quick AND simpl转载 2016-08-30 11:48:32 · 5777 阅读 · 1 评论 -
Git初体验(8)-自定义(忽略、别名、服务器)和总结
自定义Git在安装Git一节中,我们已经配置了user.name和user.email,实际上,Git还有很多可配置项。比如,让Git显示颜色,会让命令输出看起来更醒目:$ git config --global color.ui true这样,Git会适当地显示不同的颜色,比如git status命令:文件名就会标上颜色。我们在后面还转载 2016-09-01 10:08:47 · 1273 阅读 · 0 评论 -
Android Volley完全解析(二),使用Volley加载网络图片
在上篇文章中有提到过,Volley是将AsyncHttpClient和Universal-Image-Loader的优点集成于一身的一个框架。我们都知道,Universal-Image-Loader具备非常强大的加载网络图片的功能,而使用Volley,我们也可以实现基本类似的效果,并且在性能上也豪不逊色于Universal-Image-Loader,下面我们就来具体学习一下吧。1. Ima转载 2016-09-27 11:23:17 · 253 阅读 · 0 评论 -
Android Volley完全解析(一),初识Volley的基本用法
1. Volley简介我们平时在开发Android应用的时候不可避免地都需要用到网络技术,而多数情况下应用程序都会使用HTTP协议来发送和接收网络数据。Android系统中主要提供了两种方式来进行HTTP通信,HttpURLConnection和HttpClient,几乎在任何项目的代码中我们都能看到这两个类的身影,使用率非常高。不过HttpURLConnection和Http转载 2016-09-27 10:27:31 · 254 阅读 · 0 评论 -
你不知道的TextView实现原理
在前面一个系列的文章中,我们以窗口为单位,分析了WindowManagerService服务的实现。同时,在再前面一个系列的文章中,我们又分析了窗口的组成。简单来说,窗口就是由一系列的视图按照一定的布局组织起来的。实际上,每一个视图都是一个控件,这些控制可以将自己的UI绘制在窗口的绘图表面上,同时还可以与用户进行交互,即获得用户的键盘或者触摸屏输入。在本文中,我们就详细分析窗口控件的上述实现原理。转载 2016-09-27 09:56:43 · 521 阅读 · 0 评论