手机APP五大秘技之支持触摸屏

新手学堂

2-f13-1-3.jpg
陈跃峰

多年来一直从事手机应用开发,开发过多款手机游戏和手机应用产品,出版过多部编程书籍,创办了爪哇米工作室,专门进行Java手机应用开发。

由于环境改变了,手机APP与PC平台上的程序相比有五大不同之处,手机APP要考虑支撑触摸屏,要考虑手机屏幕的大小,要考虑按键少如何高效利用,要考虑手机内存不足如何减少内存占用,要考虑如何省电。

在PC平台上程序员基本上不考虑这些,但现在转入手机APP开发,如果不考虑这些,开发出来的APP就容易出错,轻则导致APP无法使用,重则导致手机死机,那就会被用户骂死。如何避免上述“杯具”发生呢?看完我们的系列文章,相信你一定会茅塞顿开。

随着智能手机的增多,为了提供更好地用户体验,支持触摸屏就成为手机APP入驻智能手机的标配功能。手机APP如何支持触摸屏呢(本期平台是Android)?

工作原理:记忆坐标响应操作

在PC上,开发应用时不需要考虑支持触摸屏,但高级的手机APP大多都支持触摸屏,特别是触摸屏越来越普及的状况下,手机APP支持触摸屏也逐渐成为了趋势。因此,大家有必要掌握相关的知识。

触摸屏操作类似于PC中的鼠标操作,首先获得当前触点的位置,然后根据事件的类型进行不同的处理,处理完成以后根据需要重绘屏幕即可。

开发核心:三种触摸屏判

判断触点区域

一般来说触点是以区域为单位,例如按钮区域、信息条区域,点击区域内任何一处都可以激活相应的功能,如何规划区域就显得尤为重要,现在,用得最多的是矩形区域(topLeftX,topLeftY)。

判断拖动事件

在触摸屏中拖动某个组件或事物,方法如下:存储移动以前的触点坐标,和当前触点坐标进行比较,依据比较的结果处理拖动的逻辑。例如x坐标扩大了则向右移动,y坐标扩大了则向下移动等。

判断多点触控

每次可以获得多个触点的坐标,可以根据触点的坐标进行操作,例如先使用MotionEvent对象中的getPointerCount方法获得触点的数量n,则每个触点的ID依次是0~(n-1),然后使用该对象中的getX(int id)和getY(int id)方法依次获得每个触点的坐标,最后根据程序的逻辑,处理所有的触点。

示例代码:APP支持触摸屏

本示例的目的是在触摸屏中响应用户的缩放操作。绘制一个简单的矩形,当触点位于该矩形区域内则变换颜色,当触点在矩形区域内并拖动时则改变矩形的位置。

第一步:新建一个工程

在Eclipse中选择“File→New→Android Project”打开新建项目窗口,然后设置application name为TouchDemo、package name为com.javamestudio.android.touch、Create Activity为TouchDemoActivity。最后,点击“File→New→Class” 新建一个类名为TouchDemoView的类。

第二步:绘制界面

在TouchDemoView类中覆盖onDraw方法,并添加绘制的代码(在界面中绘制宽高说明文字以及一个矩形):

public void onDraw(Canvas canvas){

//清屏

paint.setColor(Color.WHITE);

paint.setStyle(Style.FILL);

canvas.drawRect(new Rect(0,0,width,height), paint);

//绘制说明文字

paint.setColor(Color.RED);

canvas.drawText(info, 30, 30, paint);

//绘制矩形框

paint.setColor(Color.BLACK);

if(isSelect){

paint.setStyle(Style.FILL);

}else{

paint.setStyle(Style.STROKE);

}

canvas.drawRect(new Rect(x,y,x + rectWidth,y + rectHeight), paint);

}

第三步:编写触摸屏支持代码

在TouchDemoView类中覆盖onTouchEvent方法,然后编写逻辑处理的代码,其核心代码为(完整代码下载地址:http://www.icpcw.com/bzsoft):

public boolean onTouchEvent(MotionEvent motion){

//分类处理各种事件

int action = motion.getAction();

float px = motion.getX();

float py = motion.getY();

switch(action){

case MotionEvent.ACTION_DOWN: //按下

……

break;

case MotionEvent.ACTION_UP:

……

break;

case MotionEvent.ACTION_MOVE:

选择Eclipse中的项目名称TouchDemo,单击鼠标右键,选择“Run As→Android Application”即可启动Android模拟器在里面进行触摸屏操作了。

小提示:

Android模拟器第一次启动比较慢,需要一两分钟。