咕咚

2016 - Here I Am

开源协议小风波

今天无意间在做项目的过程中,因为没有遵守开源协议,导致了一个小误会,尽管已经跟drakeet同学致歉,但后来还是觉得有必要把事情再梳理一遍,让更多的开发者注重一下开源协议。 一开始在微博看到了@drakeet 同学开源了一个项目,叫 MeiZhi,一个干货集中营的 unofficial 客户端,客户端用于在手机端更好的显示技术干货信息,因为自己平时也比较关注技术干货,自己也就开始使用。 ...

MVP 模式在 GankDaily 中的应用

最近完成了一个干货客户端 GankDaily , 一个基于干货集中营的手机客户端,整个客户端借鉴 drakeet 的妹纸应用。但是在原项目的基础上, 自己使用 MVP 模式对项目进行重构,让代码结构进一步解耦,使业务逻辑和视图表现层相分离,从而让代码逻辑变得更简单, 以下就整理了自己在重构项目过程中对 MVP 这种模式的理解以及项目中如何实施 MVP 的模式。 关于MVP MVP 是 M...

在Android5.0以上设备实现过渡动画

从Android5.0开始,系统提供一个很好看的Activity间的转场动画,具体就是共享两个界面中一些共有的View,让前后两个界面的跳转变得很流畅 好看。 具体效果 一图胜千语,下面就是 Android 5.0 设备上使用转场动画后示意图,这样的交互在 Google 自家的 App 里已经司空见惯。比如 Google Play 中,从应用列表界面跳转到应用详情页,就使用了类似的转场动...

在Android 6.0 设备上动态获取权限

众所周知,Android 6.0 相比之前的Android版本有一个很大的不同点,就是动态获取权限。今天自己在做拨号功能时,正巧遇到这个问题, 顺手记录下在Android 6.0 上如何动态获取权限。 下面从自己一开始的问题入手 实现拨号功能 说到拨号,一个 Intent 就搞定,代码如下, private void callDirectly(String mobile){ ...

Bitmap相关的知识点整理

图片是Android应用常见的资源,在Android中,图片数据用Bitmap这个类封装。这篇文章整理跟他相关的一些知识点。 1、Bitmap.Config 这是Bitmap的一个内部类(枚举),是Bitmap关于色彩显示的配置,不同的配置对应不同的加载效果,下面是相应的文档介绍 Possible bitmap configurations. A bitmap configuratio...

我的 1024

“生活不止眼前的苟且,还有诗和远方” 今天是10月24,也就是所谓的程序员节,很多程序员朋友今天都是关上电脑,挂着免战牌,或游戏、或聚会玩耍…恩,我是个例外。以下纯粹以流水账的形式记录了我的一天。 如有雷同,纯属巧合。 早晨 9点起床,在洗漱的同时给自己做了个荷包蛋,因为上周买的老北京糖火烧还有三个没吃,所以2个荷包蛋+1个糖火烧就做了我的早餐,这配置还不错,哦,不对,应该是搭配...

Java类加载机制

作为一个Java程序员,我们写过很多Java类,那他们具体是怎么运行起来的呢? 一开始,我也没有去关心过这个问题,或者说是自己没有在这方面思考过,但是后来觉得,既然每天都在做这些事,为什么不深入了解下具体的原理逻辑呢。知其然还应该知其所以然,作为一个有追求程序员,我们应该对自己有更高的要求。博文是自己对Java类加载的一些认识,如有错误欠缺,欢迎指正补充。 这里,我们在开始主题之前,先梳理...

如何用好github中的watch、star、fork

在每个 github 项目的右上角,都有三个按钮,分别是 watch、star、fork,但是有些刚开始使用 github 的同学,可能对这三个按钮的使用却不怎么了解, 包括一开始使用 github 的我也是如此,这篇博客,结合自己的理解和使用,说说这三个按钮的用法以及一些个人见解。 如下图所示这是我们经常看到的三个按钮。 从左至右,依次是 watch star fork,下面分别说...

我的Android项目开发规范(不断更新)

代码永远写不完,但是写的时间久了,就应该形成自己的代码规范或者自己团队的规范,尽管一些规范已经形成于脑海,但是还是有必要记录下来。从现在开始,一点点积累开发规范。这里积累开发过程中所有的规范细节,尽可能详细。 类文件 项目目录结构 接口文件 命名规范 id命名采用右侧格式 {view缩写}{module_name}{view的逻辑名称} 空间 ...

build.gradle最佳实践之buildConfigField

使用AndroidStudio进行开发,其中很重要的一个文件就是build.gradle,他是整个项目的控制中心,这里收集一些日常会用到的语法或者使用技巧,以备后用。这篇博客主要说明 buildTypes节点下使用buildConfigField。 下面是默认的buildTypes形式 buildTypes { release { proguardFiles ge...

用Support包显示MaterialDialog

如果自己做个人App项目,很可能在一些情况下用到Dialog,Android自己也提供了系统Dialog,但是在MaterialDesigner出现之前,样子确实很丑,这篇博客讲解如何使用Support包中 的API来实现MD风格的Dialog。 Support V7包在22.1.0之前的任何一个版本,AlertDialog一直都是Android4.0风格,直到Support-V7:22....

Java关键字之volatile

Java有众多关键字,volatile作为一个和同步相关的关键字,很少在自己的项目中使用,今天在看Handler源码时无意看到,顺便便了解了下。 记录以备后用。 volatile关键字 可以被看作是一种 “程度较轻的 synchronized”;与 synchronized 块相比,volatile 变量所需的编码较少,并且运行时开销也较少,但是它所能实现的功能也仅是 synchroniz...

Unsafe类介绍

这个类是用于执行低级别、不安全操作的方法集合。尽管这个类和所有的方法都是公开的(public),但是这个类的使用仍然受限,你无法在自己的java程序中直接使用该类,因为只有授信的代码才能获得该类的实例。 从上面的描述,可以了解到该类是用来执行较低级别的操作的,比如获取某个属性在内存中的位置,(在AtomicInteger中就用到了)不过一般人很少会有这样的需求。 今天在看AsynTask源...

AtomicInteger 一个和高并发有关的工具类

AtomicInteger,一个提供原子操作的Integer的类。在Java语言中,++i和i++操作并不是线程安全的,在使用的时候,不可避免的会用到synchronized关键字。而AtomicInteger则通过一种线程安全的加减操作接口。 使用AtomicInteger是非常的安全的 那么为什么不使用记数器自加呢,例如count++这样的,因为这种计数是线程不安全的,高并发访问时统计...

Android使用WebView加载中文时,乱码问题解决

在做App+这个项目时,使用了WebView来展示更新日志,但是在加载本地Html文件的时候,出现了乱码问题。这篇博客记录自己错误出现的原因 、以及解决方法。 由于本地Html文件日志文件中包含中文,在加载时就出现了乱码,加载方式如下 String formatLodString = buf.toString(); webView.loadData(formatLodString, "t...

App中主题Theme使用以及Theme切换

在众多Android应用中,尤其是阅读类App,为了给用户提供更好的使用体验,App设计者一般都会提供两套主题,最常见的就是Light Theme和Dark Theme,分别对应了日间模式和夜间模式。比如第三方微博客户端Smooth,知乎等等他们都有这样的实现。 因为自己对这块一直也比较感兴趣,所以自己就先尝试着做了一次,目前只是简单的尝试了下,下面记录一下这个过程,如果能帮助到更多的人,...

在流式布局中使用PopupMenu,以及遇到的问题

在做 AppPlus 项目的过程中,因为每个 Item 上面都有一个 PopupMenu,但是当时在xml文件中设置icon后,却发现icon不生效,下面是这个问题的解决方案。 问题 自从MaterialDesigner出现后,像下图所示的设置流式布局随处可见。 其中每个Item上都有一个OverFlow(更多)的icon,点击会弹出一个菜单,实现方式很简单,首先在meun文件中,...

MAC 系统如何使用 Sublime Text 3 直接编译运行java代码

在Mac下使用Sublime时,如果要编译java文件,直接使用command+B命令就可以达到编译的效果,此时会在java源文件的目录下生成对应的.class文件,但这显然不能够满足我们的需求。 如何才能直接编译并运行java代码呢? 我最终通过如下解决方案,达到了command+B 在Sublime控制台显示运行结果的效果 第一步 打开Finder 应用程序-> Sublim...

和Jekyll相关的有用博客网址收集

在使用优化博客时,经常会去一些其他的博客学习别人的经验,或者一些技巧,这篇文章主要收集有用的和 Jekyll 相关的博文。 jekyll 官网文档部分翻译 Jekyll 语法简单笔记

Android通过颜色设置背景透明度

在开发过程中,经常需要把一个View的背景设置为某个颜色的半透明状态。通常我们可以通过设置颜色值的前两位而达到效果,一般情况下也能满足基本需求,比如白色色值为#ffffff,那么他的半透明颜色值可以写成#88ffffff,这样设置背景后也可以出现半透明效果。其实颜色值的前两位就是控制颜色的半透明状态的。 但是有时设计师可能会跟你提这样的要求,他需要你设置一个0.56等等很参数化的半透明颜色...