Archive for 七月 2013

Android开发 ListView显示不同类型的项(Adapter的getItemViewType,getViewTypeCount)用法

之前写代码都没有很注意性能的问题,以后这方面会多关注一些。
如果要在ListView显示布局完全不同的Item,我之前的做法是在getView里先判断那个position的对象是哪一个类型,再相应的inflate对应的xml,但这样有个问题,就是没法复用convertView,因为可能会混乱。
今天发现其实Adapter有getItemViewType和getViewTypeCount方法,看名字就知道功能了,一个是获取该项的类型,另一个是获取类型的数量。
所以,使用很简单,第一步,在自定义的Adapter里继承这两个方法,并实现。getItemViewType返回的值不能是自定义的,必须从0开始增长。
第二步,在getView方法里,根据getItemViewType返回的类型,分别inflate对应的xml,如果convertView不为空,可以直接使用.另外,建议使用ViewHolder保存控件引用,使用convertView.setTag(holder)方法保存到convertView上,可以减少不必要的findViewById.

Java 压缩,解压zip文件(支持中文)

JDK自带了zip相关的api,但遗憾的是,如果zip文件中有包含中文名的文件,就报错无法处理,所以,我这里的例子并没有用jdk的api,而是用了apache的ant包。
apache ant下载地址:
http://ant.apache.org/bindownload.cgi
把lib/ant.jar放到我们项目的构建路径中,只需要ant.jar。其实ant的zip API与jdk的高度相似,如果之前是用jdk的api写的,基本上只要更改顶部的import包就可以了 Continue reading ‘Java 压缩,解压zip文件(支持中文)’ »

Java 使用JMagick和ImageMagick获取图片缩略图(支持PSD)

其实,如果只是取缩略图,Java本身就自带了相关的API,不需要强大的ImageMagick,但是我的源图是PSD格式,Java默认是读不了的,有个java-psd-library开源项目,是纯java写的,经过测试,生成的图片全黑,放弃。最终选择了JMagick和ImageMagick的组合。做转换的是ImageMagick,Jmagick只是封闭的jni接口而已。
JMagick依赖ImageMagick,先装ImageMagick: Continue reading ‘Java 使用JMagick和ImageMagick获取图片缩略图(支持PSD)’ »

Ubuntu 源码编译安装 mysql 5.6.12

环境 ubuntu 12.04桌面版,mysql 5.6.12
mysql需要使用cmake编译,所以,先安装cmake Continue reading ‘Ubuntu 源码编译安装 mysql 5.6.12’ »

Java and Mongodb 保存/读取java对象到/从mongodb

Mongodb官方提供的Java驱动,保存与读取,需要的者是DBObject对象,这是一个接口,实现put,get等方法,跟map类似,如果我们要直接把普通的java对象保存到mongodb,就需要先转换成DBObject对象,或者直接实现DBObject接口,操作起来相当复杂。还好,monodb驱动带了把json转换成DBObject对象的功能,加上Google的Gson,就可以实现把普通的对象保存到mongodb中。如果要从mogodb中读出对象,反过来操作即可,但有一点需要注意的是,mongodb的文档没有固定的字段,所以用Gson转换,可能因为各个文档属性不同,转出的对象属性都是空的,要确保在插入时都是插入同一个类的对象。
下面的例子是把User对象插入到Mongodb中,并读出来 Continue reading ‘Java and Mongodb 保存/读取java对象到/从mongodb’ »

Linux下飞鸽iptux窗口大小调整方法(解决自动缩小)

iptux应该linux下是目前最好用的局域网聊天客户端了,与win下的飞鸽,飞秋完全兼容,但是有一BUG,不知道算不算BUG,也许是开发人员故意这样设计。当调整窗口大小时,iptux会自动缩小,小到只能看到图标,看不到主机名。解决方法:
拉大窗口,在自动缩小到合适的位置时,速度关闭客户端,重启,就能保持那个大小了。

PHP计算某月的第一天和最后一天

主要用到了strtotime函数,功能强大,支持相对日期



//计算本月第一天和最后一天
$today=date("Y-m-d");
//这个不需要解释吧,直接把第一天设为1号
$firstday = date('Y-m-01', strtotime($today)); 
//这个语法以前还真没见过,php manual http://www.php.net/manual/zh/datetime.formats.relative.php
$lastday = date('Y-m-d', strtotime("$firstday +1 month -1 day")); 

echo $firstday."<br/>";
echo $lastday;

Android开发 自制圆形带进度显示的进度条

Android默认的进度条,如果是圆型的,是不能显示进度的,只是在转圈圈,而基于官方的ProgressBar自定义,也只能换那个圈圈的图片而已,无法实现展示进度。下图是要实现的效果:
circleProgressbar
其实原理也很简单,定义一个类继承View,在onDraw方法里画圆即可.
Continue reading ‘Android开发 自制圆形带进度显示的进度条’ »