Race604

Android

[第3期]Android周报

2015年第一期,新年快乐! 文章/教程 1. Android Service完全解析,关于服务你所需知道的一切 这篇文章比较老了,分为上下两篇文章,很清晰的讲解了Android Service的各方面的问题,值得看一下。 2. Android NDK开发(五)——C代码回调Java代码 记得以前面试的时候被问到JNI中Native代码怎么回调Java代码,本文有比较详尽的解答。 3. [Material Design] 打造简单朴实的CheckBox 从头打造一个漂亮CheckBox控件。 4. Android模拟产生事件 上周报,没理由。 源代码/库 1. TwoWayView RecyclerView的简化封装,能够横向/竖向的List/Grid/瀑布流等布局,还支持跟ListView类似的单选/多选模式。而且接口上也非常接近传统的ListView,还有什么理由不用RecyclerView来武装你的App? 2. awesome-android-ui Android UI库的大集合,按照类别归类的,在你打算自

By Race604

Android

Android模拟产生事件

我们有时候需要使用程序产生一些输入事件。例如一些“丧心病狂”的App,让你发疯的狂点屏幕来抽奖,程序来帮你,包你中奖。当然,本文并不是为了来作弊,而是开发过程中的一些实用工具。 给系统模拟注入输入事件有如下几种方式: 1. 使用shell命令 Android中自带一个input工具,使用方法如下: adb shell #进入系统 输入如下命令: input keyevent KEYCODE_BACK 或者 input keyevent 3 #模拟按返回键 input keyevent KEYCODE_HOME #模拟按Home键 上面的命令就给Android系统输入了相应的按键,使用方法是input keyevent <按键名或者按键值>。按键名或者值可以从官方文档查询,只要是以KEYCODE_开头的都可以。 如果系统的焦点在输入框内,还可以直接输入文本: input text hello 直接在输入框内输入hello。输入的文本不能带空格,也不能是中文,

By Race604

Android

[第2期]Android周报

文章/教程 1. Android Studio系列教程四--Gradle基础 Android Studio 1.0已经发布了,相信许多人已经用上了。Android Studio和ADT的最大却别就是使用Gradle来配置和管理项目的编译。本文介绍了Gradle的基础,会解决一些刚切换到Android Studio的迷茫感。 2. Android中使用MVP模式简介 随着Android应用的越来越复杂,项目越来越大,开发者门觉得传统的Android开发模式已经抗不住了。经常在各种地方看到有人提到MVP模式,MVP模式是解决这些问题的法宝么? 3. Android 属性动画 源码解析 深入了解其内部实现 看源码需要技巧和耐心,有大牛带着看源码,思路瞬间开朗。本篇博客将分析属性动画的实现源码,带你深入的了解Android属性动画的内部实现机制。 4. Android使用adb抓完整Log 会察看Log,是解决bug成功的一半。本文简要介绍了Android系统的各种Log的方法。 源代码/库 1. BottomSheet Materia

By Race604

Android

Android中使用MVP模式简介

经常在各种地方看到有人提到MVP,在Android的开发中MVP模式越来越流行,我这里也学习和总结一下MVP模式。 本文参考自:MVP for Android, The Clean Architecture以及Resources for Learning Dagger for Android。 软件架构的依赖规则: 软件是分层的,高层是基础业务逻辑和策略,低层是实现机制和展现形式。代码和数据依赖只能是低层代码依赖高层,而不能反过来。 什么是MVP? MVP是Model, View和Presenter的简称。是非常有名的MVC模式的演化版。MVP模式把显示逻辑和从业务逻辑层中分离出来,理想状况下,MVP模式中,在替换不同的视图(View)的情况下,可以实现完全相同的业务逻辑。 Presenter代替了MVC中Controller,它比Controller担当更多的任务,也更加复杂。Presenter处理事件,执行相应的逻辑,这些逻辑映射到Model的Command以操作Model。那些处理UI如何工作的代码基本上都位于Presenter。Presenter如同一个乐队的指挥家

By Race604

Android

[第1期]Android周报

文章/教程 1. 代码规范和Android项目中的一些可用工具 本文介绍了关于代码规范的相关问题,和在Android项目中如何利用一些工具进行规范和检查。介绍了什么是代码规范及其好处,介绍了工具Checkstyle、Findbugs、PMD的使用方法。 2. Dalvik虚拟机垃圾收集(GC)过程分析 作者从Android源代码层分析和讲解Android的GC过程。文章很长,做好心里准备。 3. Android BitmapShader实战 实现圆形、圆角图片 本篇博客详细讲解了使用BitmapShader实现圆角或者圆形绘制自定义的ImageView。 4. Android 优秀开源项目实现原理解析 我们不重复造轮子不表示我们不需要知道轮子该怎么造及如何更好的造!解析最流行的开源库的原理。 源代码/库 1. Android testing samples Google官方的Android自动化测试例子,有什么理由不看? 2. SuperRecyclerView 对RecyclerView的封装,内建功能:加载Prog

By Race604

Web

Ghost添加代码高亮

参考的这篇文章:Add code highlighting to your Ghost blog. 使用的是Prism代码高亮库,使用很简单,只要在你的网页中引入prism.css和Prism.js即可。 使用方法如下: ```language-markup <h1>Hello World!</h1> ``` 效果如下: <h1>Hello World!</h1> Prism代码不会自动换行,如果你要自动换行的话,可以添加如下CSS代码: code { white-space: pre-wrap; /* CSS 3 */ white-space: -moz-pre-wrap; /* Mozilla */ white-space: -pre-wrap; /* Opera 4-6 */ white-space: -o-pre-wrap; /* Opera

By Race604

Web

Ghost添加评论

今天看到一个技术博客-Glow技术团队博客,也是使用的Ghost,甚是亲切,并且还有评论。Google一下,果然有给Ghost添加评论的教程:How to Add Comments to Ghost。(PS: 这里参考的这篇文章,来自Ghost for Beginners,看名字就知道,这个站点提供的都是Ghost的教程,计划有空的时候,都研究一下。) 这里是集成的是第三方的评论服务-DISQUS。集成过程非常简单,3步就搞定: 1. 注册/登陆DISQUS; 2. 添加你的网站: 在这里注册一个你的站点,这里名字啥的可以你任意填写。 在网页上添加代码: 上面一步完成注册,选择你要继承的平台,因为我们是Ghost平台,选择Universal Code即可,会得到一段代码。把这段代码添加到你的Theme文件中: /path/to/ghost/content/themes/casper/post.hbs 添加的位置如下: <section

By Race604

Web

博客从MEAN到Ghost迁移

从启程开始搭建基于MEAN.IO的博客,从Change log中也能看到,博客的每个功能都需要自己去折腾。整个过程中还是挺好玩的。其实还有很多功能没有实现,比如博客草稿箱,图片上传,标签等。今天偶然发现这个Ghost博客平台。Ghost本身是开源的Github,可以下载代码自己搭建,也可以使用其博客服务(收费的)。 第一眼看到这个博客,就被惊艳到,体验非常好。 1. 使用Markdown编写博文,编辑器非常棒; 2. 完美适配移动设备; 3. 博客功能齐全; 4. 界面交互也深得我心 5. 支持博文链接自定义 6. ... 也有一些不爽的地方,数据库还不支持MongoDB,让我还要装一个MySql,听说会在后续版本中支持NoSQL数据库。 另外,插入图片功能方便的超出的我想象,如果能支持上传到图片托管服务器就好了,例如七牛,后面准备自己折腾一下。 从自己搭建到使用成熟的博客产品,体会到一句话: 不要重复发明轮子!

By Race604

Web

博客加载很慢的问题

在家里打开博客,发现加载非常慢,使用Chrome的开发工具看一下网络加载。发现是加载fonts.googleapis.com一直加载不成。显然是Google的网站被和谐掉了,看到网上也有不少解决方案,例如这里,就是替换这种资源。 国内有一些完整的替换方案,例如360网站卫士提供常用全套的CDN服务,还有开放静态文件。替换之后,网站加载速度果然瞬间加载完成了。

By Race604

Android

Android中的Context详解

注:本文翻译自Context, What Context?,原文链接在这里,作者是Dave Smith。ps:这个网站的是设计风格非常清新。 Context可能是Android应用中最常用的元素,而它也可能是最容易误用的。 Context对象是如此常见和传递使用,它可能会很容易产生并不是你预期的情形。加载资源、启动一个新的Activity、获取系统服务、获取内部文件路径以及创建view(其实还远不止这些)统统都需要Context对象来完成。我(原文作者)想做的只是给大家提供一些Context是如何工作的见解,以及让大家在应用中更有效的使用Context的技巧。 Context的类型 并不是所有的context实例都是等价的。根据Android应用的组件不同,你访问的context推向有些细微的差别。 * Application - 是一个运行在你的应用进程中的单例。在Activity或者Service中,它可以通过getApplication()函数获得,或者人和继承于context的对象中,通过getApplicationContext()方法获得。不管你是通过何种方法在

By Race604

Web

博客添加SEO

本博客的前段是AngularJS的,所以内容都是通过JS动态渲染的。我也在Google的Webmaster上提交了我的网站,内容一直没有被检索到。搜索site:www.race604.com只有一条内容。 搜索了一下angularjs seo indexing,发现Google的爬虫并不能很好检索JS渲染的网页,大牛门建议把网页静态化,专门给爬虫抓取。而且还有很多这样的服务的提供方,专门静态化缓存你的AngularJS网页。我这里就选择了Prerender.io来解决。 原理是Google爬虫在抓去AngularJS的网站的时候,遇到#!这样的URL,会自动替换为?_escaped_fragment_=。例如本来访问的是: http://www.race604.com/#!/articles实际上被替换为了http://www.race604.com/?_escaped_fragment_=/articles。我们就可以把?_escaped_fragment_=这样的URL,路由到一个静态的缓存网页上去。 使用Caching服务 Prerender本身是一个开源的项目,也提供C

By Race604

Android

无设计开发漂亮App

作为一个纯技术码农,不会设计,也不会PS。开发App只能利用系统控件,界面看起来各种土气。这篇文章说说怎么在没有设计师帮助的情况下开发漂亮App。 Material design Google 在设计上第一次发布最全面的设计指南。可以看成是 UI 上的设计模式,是一个UI框架。Material design 把框架搭建好了,往里面填内容可以了。也可以看这个中文同步翻译版。现在基本上推崇的是扁平化,街面上表现的基本上纯色块,不需要借助PS软件,代码就可以搞定了。 另外,这里有个 Material design 调色板,可以选定你的App的主色调,然后自动生成一系列颜色的颜色值。 Material design icon Google想的更周到,怕你不会画icon,提供了全套的官方 Material design 风格的 icon,基本上你需要的常用icon都能在这里找到。提供 Android 版本 icon(hdpi, mdpi, xhdpi, xxhdpi, xxxhdpi)

By Race604

Android

Android不需要重新编译打渠道包

原文参考Android批量打包提速 - 1分钟900个市场不是梦 Apk打渠道包简直是一个噩梦,每个apk打包需要两分钟的话,40个包那就是需要很长时间。 这篇文中使用了一个技巧就是: 如果在META-INF目录内添加空文件,可以不用重新签名应用。因此,通过为不同渠道的应用添加不同的空文件,可以唯一标识一个渠道。 从Apk中读取渠道名字的代码如下: /** * 从apk中获取版本信息 * @param context * @param channelKey * @return */ private static String getChannelFromApk(Context context, String channelKey) { //从apk包中获取 ApplicationInfo appinfo = context.getApplicationInfo(); String sourceDir = appinfo.sourceDir; //注

By Race604

Android

绚酷的ViewPager动画

参考自原文Great animations with PageTransformer。 以前的对ViewPager动画只是停留在整个Pager切换的动画。例如这个JazzyViewPager库,把各种专场动画做的非常绚丽。其实,利用ViewPager还有更迷人的动画效果。例如雅虎的News Digest应用的开场动画: 滑动翻页的同时,里面的View也分别也做各种动画。 实现的方法就是利用ViewPager.PageTransformer。作者实现了一个简单的例子,先看效果: 实现方法就是: mPager.setPageTransformer(false, new ViewPager.PageTransformer() { @Override public void transformPage(View view, float position) { .... } }); 其中transformPage()的实现如下: public void transformPage(View view, f

By Race604

Android

从ListView迁移到RecyclerView

RecyclerView是Google在Support库中新发布的控件。从名字上看,就知道其作用了。意图是用来替换ListView和GridView这类的AdapterView。但是其灵活性却远比AdapterView高。RecyclerView只是一个框架,具体的布局需要LayoutManager来控制。 文章Migrating to RecyclerView from ListView这里号召了大家转移到RecyclerView。介绍了使用RecyclerView需要注意的地方。 实际上使用RecyclerView和ListView基本一样,如果不自定Layout的话,切换起来非常方便。使用方法可以参考官方demo。也可以参考我的上一篇博客Android上实现进入详情展开的动画中提到的那个例子。 需要注意的是,默认RecyclerView是不支持HeaderView和FooterView的。但是也非常容易让它支持,这里有一个解决方案,方法就是使用ViewType来实现。这里也可以看出它的灵活。 另外,默认RecyclerView是不支持OnItemClick和OnItemL

By Race604