Rocko's blog

Live in the moment


Android View.OnTouchListener 的子类

如下是几个实现了 OnTouchListener 接口的子类,OnTouchListener 我们是再熟悉不过了,在 Hello World 开始就接触了,但在 Support V4 中还有它的 3 个子类我们平时可能使用的较少但就其功能而言还是对我们很有帮助的。

三者的功能体现在 AutoScrollHelper 和 ZoomButtonsController,前者用于实现控件的自动滚动而后者用于对缩放控件(缩小放大按钮)的处理。

AutoScrollHelper

为了更好阐述它的功能,我们先来看如下的 Gif 图: ListViewAutoScrollHelper

所以,他能完成的功能就是在 View 的边缘长按时能自动地滚动视图。下面是它的主要方法说明:

Read more...

Python小程序-多说评论通知

前言

这段时间在学习Python,写了第一个稍有实用价值的Python脚本小程序,发文以作纪念。实现多说评论邮件通知的功能:利用多说的API定时去检查后台数据从而检测是否有新评论的数据产生,有的话就发邮件到指定邮箱。之所以做这个是因为多说官方的方法一直尝试失败,可以戳这个:同步用户到多说实现文章被评论时的提醒功能,作者用户是导入了,但测试发现一直没反应;另外一个就是多说官方的通知不是及时的,一天一封吧,强迫症患者可能受不了。写的不好求轻喷。

撸码

配置

方便他人修改使用。

[email_info]
email_host = 电子邮件主机,如:smtp.qq.com,注意你的邮箱是否开启了POP3/IMAP/SMTP/Exchange/CardDAV/CalDAV服务
from_address = 你要发送邮件的邮件地址
password = 邮箱的登陆密码
to_address = 你要接受邮件的地址

[duoshuo_account]
name = 多说的二级域名名, 如我的:rocko
secret = 多说的秘钥,在后台的设置查看

[period_time]
period = 定时检查评论的时间(s)

Python代码

代码比较简单,已加注释。用到多说的接口是这个,实时同步评论回本地数据库。需要注意的是在后台操作和文章有新评论时就会产生log的json数据返回,返回的数据可以去它的文档看一下,然后就找自己感兴趣的数据了,做为我们判断是否是文章有评论而不是自己在后台产生的是action这个字段,为create时就是我们要的。还有就是请求时的limit参数,文档上说默认是50,所以如果你没加使用了默认而你的log数>50时那就只能获取到50条了,不过是<200但我使用>200时区请求是没有问题的。

Read more...

【译】Spans,一个强大的概念

前言

原文:Spans, a Powerful Concept.

最近,我写了一篇关于 NewStand app 和 app 上 ActionBar 的图标的翻转动效的文章。Cyril Mottier 建议我采用一个很优雅的方案,即使用 Spans 去淡入淡出 ActionBar 的标题。 此外,我一直想尝试所有可用的 Sapn 色的类型:ImageSpanBackgroundColorSpan 等。他们非常简单易用但是(也)没有任何关于它们的文档和详细信息。 因此,在这篇文章中,我将探索在 Spans 的框架下什么是可以做的,然后,我将会告诉你怎么去进阶使用 Spans。 你可以下载和安装 demo 程序,查看源码

Read more...

仿有道云笔记头像背景

前言

如题,本文模仿实现有道云笔记的侧滑菜单中的头像背景的效果,这一效果可用借鉴使用,毕竟大多数时候我们在应用上的资料可能没有像play、微博等的个人页面的自定义背景图。没用过这款应用的童鞋可以下载这款应用看看。

分析

先来看看有道云笔记上的图片(重点是头像上的背景图,真机看起来效果比较好): 有道云笔记效果图

在手机上没找到背景的效果图,应该是在手机上生成的效果图,根据它的背景图片可以看出图片时黑白的而且是有点朦胧感,所以经过分析和实验得到做这一效果可以使用的方法:黑白效果用ColorFilter实现、模糊效果可以用RenderScript的API实现。代码的步骤也是先得到黑白的Bitmap再把它模糊处理。

Read more...

VPS主机搭建Git服务器

前言

上篇说道搬瓦工上搞了个主机挂起了SS,单单用来干这个有些浪费了,所以它的第二个用处就是用来搭Git服务,以后私用的代码就往上堆了毕竟Github不能全都往上放,本地又有些不保险。所以就用VPS在搬瓦工(bandwagonhost)的Ubuntu 14.04上搭建了这个Git服务,因为过程有些曲折,所以记录一下,在出现错误时在错误方向上瞎折腾了一下午,悲伤,看来程序员要学会遇到bug时要保持淡定的心态,不要思路一走进就不会拐弯了,这点要牢记。

搭建

搭建一个几个人的小团队的Git服务器的方法比较简单,推荐的教程有服务器上的 Git - 架设服务器搭建Git服务器,本文不再介绍因为本文主要说的是在这个过程中的错误。当然也可以使用gitosis等方式搭建更为强大、控制力更强的Git服务器。

Read more...

科学上网-搭建Shadowsocks服务

前言

生命不息,折腾不止,方校长的丰功伟绩我天朝程序员为之叹息,说多了都是泪。既然现在不太存在把Q推倒的可能,那我们就只好自个F过去,之前一直用都在用Goagent上Youtube看视频,一卡一卡的,而且Goagent也要常更新才能使用,比较蛋疼。而用Hosts上谷歌虽然是一种最直接的方法,但要找到一封就更新IP的服务比较少,这里推荐两个:google-hosts, netsh,这些hosts都是说不定突然就会被封的,但自己使用来看netsh目前还挺靠谱,把它放在hosts那里也还不错的。额,其它的不扯了,下面来把Shadowsocks搭起来。

VPS的选择

VPS自己用的不多只根据网上的各种对比测评,最终还是选择了搬瓦工(Bandwagon Host logo),因为够便宜,选了个4.99刀一年的,人民币31.24元。配置:112M内存 24Mswap 3G HDD硬盘,够用了,其它的配置价格戳这里,当然也可以使用我的优惠链接。个人的话如果能申请到Student Developer Pack的选择DigitalOcean最好不过了,DigitalOcean还是按小时计费的,不用的话可以暂停掉不再计费,成功申请有Student Developer Pack能有100刀送,最低配置的能用两年了,无奈我的申请杳无音讯。。这里VPS就选好了,把支付链接什么的先弄好等待下一步。

Read more...

Android中的MVP

前言

MVP 作为一种 MVC 的演化版本在 Android 开发中受到了越来越多的关注,但在项目开发中选择一种这样的软件设计模式需保持慎重心态,一旦确定使用 MVP 作为你 App 的开发模式那么你就最好坚持做下去,如果在使用 MVP 模式开发过程中发现问题而且坑越来越大,那么就呵呵了。要知道在 Android 上 MVP 在现在为止并没有统一的标准或者框架,不像 Java Web 领域的项目有 SSH 这三个成熟稳重强而有力的三剑客支持推动着,所以在运用 MVP 时一定要做好自己的理解,并且尽量预知自己 App 各模块的需求以便提前做好充分的设计工作。当然 MVP 既然能出现那么必然有它的优点的,不然谁会理会这个冒出来的东西,下面就对 Android 中 MVP 做一些阐述。

MVP简介

相信大家对 MVC 都是比较熟悉了:M-Model-模型V-View-视图C-Controller-控制器,MVP作为MVC的演化版本,也是作为用户界面(用户层)的实现模式,那么类似的MVP所对应的意义:M-Model-模型V-View-视图P-Presenter-表示器。从MVC和MVP两者结合来看,Controlller/Presenter在MVC/MVP中都起着逻辑控制处理的角色,起着控制各业务流程的作用。而MVP与MVC最不同的一点是M与V是不直接关联的也是就Model与View不存在直接关系,这两者之间间隔着的是Presenter层,其负责调控View与Model之间的间接交互,MVP的结构图如下所示,对于这个图理解即可而不必限于其中的条条框框,毕竟在不同的场景下多少会有些出入的。在Android中很重要的一点就是对UI的操作基本上需要异步进行也就是在MainThread中才能操作UI,所以对View与Model的切断分离是合理的。此外Presenter与View、Model的交互使用接口定义交互操作可以进一步达到松耦合也可以通过接口更加方便地进行单元测试。

Read more...

Android 错误集锦ing...

Fork from my csdn blog: Android 错误集锦(ing…). Last update time: 2016-03-06 23:34:26.

温馨提示:Ctrl+F查找


系统环境: Windows7 64位 问题描述: Eclipse真机无法打印log信息 错误提示:解决方案: window–>show view–>android->devices,打开devices,点击右边的截屏图片的按钮。等到出现截图的时候,logcat就出来信息了(不保证每次都有用)


系统环境: Windows7 64位 问题描述: xml(资源)文件里面的错误 错误提示:

android: invalid start tag xxxxx 错误原因

解决方案: 今天在学shape这个属性,结果创建的xml总是提示这个错误百思不得其解,后来找到原因了我把这个xml文件放错了位置,放到了res/layout路径下应该放在drawable的路径下才对


系统环境: Windows7 64位 问题描述: 无法run(运行)工程 错误提示:

Conversion to Dalvik format failed with error 1

解决方案: 第一种情况包导入错误.点击工程–>build path–>libraries–>选中android1.x 或者android2.x ,点击remove。然后再点击add library–>User Library –>next–>User Libraries–>new 你取一个名字 比如android2.1 点击OK,选中android2.1–>add jars–>\android-sdk-windows\platforms\android-7\android.jar 点击打开,点击ok–>finish.

第二种情况签名时没有成功。签名:java -jar signapk.jar platform.x509.pem platform.pk8 e:huaworkspace\hua\bin\hua.apk e:huaworkspace\hua\bin\hua_signaed.apk,如果hua_signaed.apk签名失败,那么请到你的工作目录中将hua_signaed.apk delete掉。

第三种情况包冲突,请到工程目录下将相同的包删除,重新导入一个,这一点和第一种情况类似,不过这是针对其他包,不是android包


系统环境: Windows7 64位 问题描述: 导入SlidingMenu和SlidingMenu所依赖的actionbarsherlock包后再导入supportv7(用来支持ActionBar),工程一直报错、无法生成R文件。 错误提示:解决方案: 不用导入v7包了,因为actionbarsherlock已经支持ActionBar,再导入v7会有冲突。


系统环境: Windows7 64位 问题描述: FragmentTransaction使用问题。 错误提示:

java.lang.IllegalStateException: commit already called.

解决方案: 是因为你的ft事务是全局的变量,只能commit一次。所以用两个局部ft事务去做commit即可。 原文地址:http://blog.csdn.net/knxw0001/article/details/9363411
补充:

FragmentManager fragmentManager = getSupportFragmentManager(); 
FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction(); 
detailFragment = new ProductDetailFragment(productId); 
commentFragment = new ProductCommentFragment(productId); 
fragmentTransaction.add(R.id.viewgroup, detailFragment); 
fragmentTransaction.add(R.id.viewgroup, commentFragment); 
fragmentTransaction.commit(); 
//下面这个是调用的时候需要用新的局部变量  
getSupportFragmentManager().beginTransaction().hide(commentFragment).show(detailFragment).commit();

系统环境: Windows7 64位 问题描述: 使用Genymotion调试出现错误INSTALL_FAILED_CPU_ABI_INCOMPATIBLE 错误提示:

Installation error: INSTALL_FAILED_CPU_ABI_INCOMPATIBLE
Please check logcat output for more details.
Launch canceled!

解决方案: 点击下载Genymotion-ARM-Translation.zip 将你的虚拟器运行起来,将下载好的zip包用鼠标拖到虚拟机窗口中,出现确认对跨框点OK就行。然后重启你的虚拟机。

Read more...

使用Gradle发布项目到JCenter仓库

这篇文章介绍通过Gradle把开源项目发布到公共仓库JCenter中,方便你我他的事情,我们都是很懒的嘛。JCenter现在是Android Studio中repositories的默认节点了,之前是Maven的,不过JCenter是兼容Maven的,所以放心使用。步骤基本是按Publishing Gradle Android Library to jCenter Repository这里来的,英文能看的直接看这篇也行。下面我的步骤正式开始,发布到JCenter仓库的是我的项目:BounceProgressBar

申请Bintray账号

Bintray的基本功能类似于Maven Central,一样的我们需要一个账号,Bintray传送门,注册完成后第一步算完成了。 Note: 如果你的账号(主页)中没有添加 maven 记得添加上。点击 Add New Repositories 然后 name 和 type 写上 maven 即可。

生成项目的JavaDoc和source JARs

简单的说生成的这两样东西就是我们在下一步中上传到远程仓库JCenter上的文件了。这一步需要android-maven-plugin插件,所以我们需要在项目的build.gradle(Top-level build file,项目最外层的build.gradle文件)中添加这个构建依赖,如下:

buildscript {
    repositories {
        jcenter()
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:1.0.0'
        classpath 'com.github.dcendents:android-maven-plugin:1.2'
        // NOTE: Do not place your application dependencies here; they belong
        // in the individual module build.gradle files
    }
}
allprojects {
    repositories {
        jcenter()
    }
}

然后在你需要发布的那个module(我这里的即是library)的build.gradle里配置如下内容:

Read more...

运算符的几点

开篇废话

运算符使用的几点小技巧,先给出Java的运算符的基本知识复习下,其它语言的大同小异。运算符需要注意的问题有:优先级(运算顺序问题)、结合方向(自左至右或自右至左问题)、要求运算对象个数(运算符需要有几个运算对象问题)
合理运用运算符能提高自己代码的BIG、能精简代码、还能提高程序的运行效率,滥用运算符可能导致逻辑混乱、代码不知所云什么的,所以有些问题还是要自己注意一下的。下面就列出一些运算符的使用技巧,换一换思路看下,当然还有先占着这个坑,以后会补(man)上(man)更(lai)新(ba)。

Read more...
Previous Page 2 of 3 Next Page