Android应用开发的几个小技巧
本人在开发Android版手机离线地图应用程序中的几个小经验,拿出来和大家分享。
1、 Android的Adb shell下常用的命令
ls : 列出目录下的文件项(相当于DOS下的dir)
ls -l 列出详细目录信息
ls -R 列出系统中的所有文件
cat :查看文本文件内容
cat text1.txt 查看text1的文件内容,ctrl + D,退出cat状态
rm :删除文件
mkdir :建立目录
rmdir :删除目录
2、 Android下的文件读写
使用Context关联的文件输入输出流是指向应用私有文件夹下的,比如:打开:
/data/data/应用名/files/数据文件.dat,可以直接使用:
Context.openFileInput(“数据文件.dat”)将文件打开成输入流,或:
Context.openFileOutput(“数据文件.dat”)将文件打开成输出流。
注意:这里的文件是直接使用文件名,没有前面的路径。
如果要想打开成随机输入输出文件流,使用RandomAccessFile(file,mode)函数此时使用的文件名则必须是全路径文件名:
RandomAccessFile(/data/data/应用名/files/数据文件.dat,“rw”);
在使用RandomAccessFile()函数打开文件之前一般应该用File(file)类检查一下文件是否存在,以保证打开的可靠性。
3、 Android下读取Windows下文件数据的整数、浮点数的转换问题
在android下读取整数,浮点数,有时需要调序,因为Windows下写的数据文件一般是低位在前,高位在后,而android中使用的数据是高位在前,低位在后,也就是通常所说的big_end。为此android在Integer类中给出了一个方法reverseBytes(),对于整数和长整数可以直接调序,对于double则需要先读成long型整数(8B),使用long.reverseBytes()调序后,再使用Double.longBitsToDouble(long)转换长整数到Double。
4、 关于Button等控件的焦点,有时对于屏幕上的Button等控件,需要禁止其接收焦点,以保证键盘按键的特殊服务功能。一般禁止焦点,使用Button的focusable和focusable in touch mode,但有时这还不够,还需要设置Descendant focusability = blockdDescendants,也就是要阻止焦点的传递,比如ZoomControls控件的禁止焦点过程。
5、 图片的背景透明处理,这里讲的背景透明,不是整个图片的透明,而是部分指定Pixels的透明那个。也就是说图片的背景部分需要透明,而前景部分正常显示,就像Button上的图片,其背景的灰色是处理成透明颜色的。这样看上去才没有背景方框。在Android下,编一个小程序进行转换即可:
private boolean ImgTransparentToView(ImageView Img,int clr){
Bitmap bmp =
BitmapFactory.decodeResource(getResources(),R.drawable.wait);
int i,j;
int w = bmp.getWidth();
int h = bmp.getHeight();
int[] Pixs = new int[w * h];
bmp.getPixels(Pixs, 0, w, 0, 0, w, h);
int TmpClr = clr & 0x00ffffff;//Alpha = 0;
for(j = 0; j < (h - 1); j ++){
for(i = 0; i < w; i++){
if(Pixs[j * w + i] == clr)
Pixs[j * w + i] = TmpClr;
}
}
Bitmapbmp1=Bitmap.createBitmap(Pixs, w, h, Config.ARGB_8888);
Img.setImageBitmap(bmp1);
return true;
}
以上是本人在编写“离线地图应用”时遇到的小问题,确实花费了一些时间才解决,看起来非常简单,如果你不知道,也许会引起麻烦。
本人编写了几款程序,除了《手机离线地图GPS定位》,还有《反应测试》《对比反应速度测试》等,在编写过成中的一些教训,写出来,供各位参考。
2011-4-25