Android界面开发讲述.ppt

5.5 界面事件 5.5.2 触摸事件 Display()将MotionEvent参数参数中的事件信息提取出来,并显示在用户界面上 private void Display(String eventType, MotionEvent event){ int x = (int)event.getX(); int y = (int)event.getY(); float pressure = event.getPressure(); float size = event.getSize(); int RawX = (int)event.getRawX(); int RawY = (int)event.getRawY(); String msg = ; msg += 事件类型: + eventType + \n; msg += 相对坐标:+String.valueOf(x)+,+String.valueOf(y)+\n; msg += 绝对坐标:+String.valueOf(RawX)+,+String.valueOf(RawY)+\n; msg += 触点压力:+String.valueOf(pressure)+, ; msg += 触点尺寸:+String.valueOf(size)+\n; labelView.setText(msg); } http://www.anzhuo.cc/forum-58-1.html 安卓HTC One X论坛 5.5 界面事件 5.5.2 触摸事件 一般情况下,如果用户将手指放在触摸屏上,但不移动,然后抬起手指,应先后产生ACTION_DOWN和ACTION_UP两个触摸事件 但如果用户在屏幕上移动手指,然后再抬起手指,则会产生这样的事件序列:ACTION_DOWN → ACTION_MOVE → ACTION_MOVE → ACTION_MOVE → ……→ ACTION_UP 第5章 Android用户界面 5.5 界面事件 5.5.2 触摸事件 在手机上运行的应用程序,效率是非常重要的。如果Android界面框架不能产生足够多的触摸事件,则应用程序就不能够很精确的描绘触摸屏上的触摸轨迹 如果Android界面框架产生了过多的触摸事件,虽然能够满足精度的要求,但却降低了应用程序效率 Android界面框架使用了“打包”的解决方法。在触点移动速度较快时会产生大量的数据,每经过一定的时间间隔便会产生一个ACTION_MOVE事件,在这个事件中,除了有当前触点的相关信息外,还包含这段时间间隔内触点轨迹的历史数据信息,这样既能够保持精度,又不至于产生过多的触摸事件。 5.5 界面事件 5.5.2 触摸事件 通常情况下,在ACTION_MOVE的事件处理函数中,都先处理历史数据,然后再处理当前数据 private int ProcessHistory(MotionEvent event) { int historySize = event.getHistorySize(); for (int i = 0; i historySize; i++) { long time = event.getHistoricalEventTime(i); float pressure = event.getHistoricalPressure(i); float x = event.getHistoricalX(i); float y = event.getHistoricalY(i); float size = event.getHistoricalSize(i); // 处理过程...... } return historySize; } 5.5 界面事件 5.5.2 触摸事件 第3行代码获取了历史数据的数量 然后在第4行至12行中循环处理这些历史数据 第5行代码获取了历史事件的发生时间 第6行代码获取历史事件的触点压力 第7行和第8行代码获取历史事件的相对坐标 第9行获取历史事件的触点尺寸 在第14行返回历史数据的数量,主要是用于界面显示 Android模拟器并不支持触点压力和触点尺寸的模拟,所有触点压力恒为1.0,触点尺寸恒为0.0 同时Android模拟器上也无法产生历史数据,因此历史数据量一直显示为0 http://www.anzhuo.cc/forum-58-1.html 安卓HTC One

文档评论(0)

1亿VIP精品文档

相关文档