public class HorizontalReversePinchDetector {
public boolean onTouchEvent(MotionEvent e) {
int pointerCount = e.getPointerCount();
if(pointerCount != 2) {
Log.d(GESTURE, "not pinching - exactly 2 fingers are needed but have " + pointerCount);
clearPinch();
return false;
}
int firstIndex = e.getX(0) < e.getX(1) ? 0: 1;
int secondIndex = e.getX(0) < e.getX(1) ? 1: 0;
Finger currentLeftFinger = new Finger(e.getX(firstIndex), e.getY(firstIndex));
Finger currentRightFinger = new Finger(e.getX(secondIndex), e.getY(secondIndex));
float yDifference = Math.abs(currentLeftFinger.getY() - currentRightFinger.getY());
if(yDifference > 80) {
Log.d(GESTURE, "not pinching - fingers too vertically-oriented");
clearPinch();
return false;
}
if(initialLeftFinger == null) {
initialLeftFinger = currentLeftFinger;
initialRightFinger = currentRightFinger;
Log.d(GESTURE, "not pinching, but might be starting a pinch...");
return false;
}
float leftFingerDistance = initialLeftFinger.getX() - currentLeftFinger.getX();
float rightFingerDistance = currentRightFinger.getX() - initialRightFinger.getX();
float xDistanceBetweenFingers = Math.abs(currentLeftFinger.getX() - currentRightFinger.getX());
if(xDistanceBetweenFingers < minimumDistanceBetweenFingers) {
Log.d(GESTURE, "pinching, but fingers are not far enough apart...");
return true;
}
if(leftFingerDistance < minimumDistanceForEachFinger) {
Log.d(GESTURE, "pinching, but left finger has not moved enough...");
return true;
}
if(rightFingerDistance < minimumDistanceForEachFinger) {
Log.d(GESTURE, "pinching, but right finger has not moved enough...");
return true;
}
pinchCompleted();
return true;
}
private void pinchCompleted() {
Log.d(GESTURE, "pinch completed");
if(pinchListener != null) pinchListener.onPinch();
clearPinch();
}
public static interface OnPinchListener {
void onPinch();
}
private void clearPinch() {
initialLeftFinger = null;
initialRightFinger = null;
}
public void setPinchListener(OnPinchListener pinchListener) {
this.pinchListener = pinchListener;
}
private static class Finger {
private Finger(float x, float y) {
this.x = x;
this.y = y;
}
public float getX() {
return x;
}
public float getY() {
return y;
}
private float x;
private float y;
}
private Finger initialLeftFinger;
private Finger initialRightFinger;
private OnPinchListener pinchListener;
private static final float minimumDistanceForEachFinger = 30;
private static final float minimumDistanceBetweenFingers = 50;
}
分享到:
相关推荐
本文将深入探讨如何进行Android手机的多点触屏测试,以及利用提供的资源进行测试的方法。 首先,多点触控测试的重要性在于确保应用程序能够正确识别和响应不同数量的触控点,特别是对于游戏和需要复杂手势的应用来...
多点触摸测试是移动设备和触控屏幕技术中不可或缺的一部分,它涉及到如何验证和优化设备对同时多个触摸点的识别和响应能力。在现代智能手机、平板电脑和其他触控设备中,多点触摸功能使得用户可以通过两个或更多手指...
路由器与通信子网的协同多点并发测试技术是网络性能评估和测试中的重要研究课题,特别是在下一代互联网面临高速交换、服务质量保障等方面的挑战时。该技术的具体内容主要包括“协同多点并发穿越测试法”(CMPC-TTM)...
传统的温度测量方法已经无法满足现代多点温度监测的需求,因此基于单片机的多点温度测试系统设计应运而生。这种系统能够实时、精确地监测多个位置的温度,为决策提供准确数据,确保设备安全运行和工艺过程的优化。 ...
描述简单明了,“用来测试触摸屏的程序”,这进一步确认了该程序的主要目的是测试和验证触摸屏的性能和功能。在开发或调试阶段,这样的工具是必不可少的,它们可以帮助定位和修复任何与触控交互有关的问题。 标签中...
风电叶片的多点静力测试是一项关键的工程任务,用于验证叶片在极限工作条件下的强度和稳定性。在测试过程中,由于各个加载点之间的力学交互作用,常常会出现耦合现象,导致加载精度降低,测试结果的可靠性受到影响。...
本文将深入探讨如何在Android应用程序中实现多点触控测试,并分享一些精华代码片段,以帮助开发者们支持多个触控点。 在Android中,处理多点触控主要依赖于`MotionEvent`类。`MotionEvent`对象包含了关于触摸事件的...
基于 AT89C51 单片机的蔬菜大棚多点...本论文设计了基于 AT89C51 单片机的蔬菜大棚多点温度测试系统,具有简单、精度高、抗干扰能力强、工作稳定等特点。该系统可以广泛应用于工业自动化、家电控制、医疗器械等领域。
这种方法虽然简单直观,但由于需要购买和维护大量硬件终端,导致测试成本居高不下,对于资源有限的中小企业来说几乎不可行。 #### 新型测试方法的需求与实现 为了克服传统测试方法的局限性,本研究提出了两种关键...
3、运行test.exe,打开flash(AS3.0)应用程序,就是要在触摸屏上进行测试的程序。 如何使用: 1、校正位置:把模拟器放在flash程序的上层,拖动模拟器右下角,使2个程序窗口一样大。 2、点击模拟器,flash会做出...
5. **示例应用**:一个简单的应用实例,演示了多点触摸功能的实际效果,可以运行在模拟器或真实设备上,便于开发者直观地了解多点触摸的工作原理。 总的来说,这个"muti-touch"资源包对于想要实现多点触摸功能的...
在开发过程中,使用模拟器和真实设备进行测试至关重要,因为不同的设备对多点触控的支持程度可能不同。使用调试工具可以检查触摸事件的顺序和细节,确保手势识别的准确性。 7. 兼容性考虑: 考虑到不同平台和设备...
本设计用的是 DS18B20 温度传感器,该传感器具有直接读出被测温度的能力,并且可以根据实际要求通过简单的编程实现 9~12 位的数字值读数方式。 四、系统原理框图 系统原理框图如图(2)所示。系统使用 AT89C51 ...
此外,系统还包含参考电压控制电路、电压比较电路和测试电流比较电路等辅助电路,它们的功能相对简单,但在测试过程中同样发挥关键作用。 PCB测试机的测试原理和方法除了基本的导通和绝缘测试,还包括了多种自检...
此外,每个DS18B20都有唯一的64位序列号,使得多传感器系统中的地址分配变得简单。 系统设计主要包括**硬件设计**和**软件设计**两部分: 1. **硬件设计**:利用Protel99SE软件进行电路设计和PCB板绘制。系统硬件...
对于多点触摸的测试,我们可以创建一个简单的应用,显示一个可交互的区域,然后在设备或模拟器上尝试同时用两个或更多手指进行操作,如缩放、旋转或拖动。为了确保屏幕支持多点触摸,可以检查设备的硬件特性,如最大...
"多点温度"可能是包含程序代码、数据记录或其他相关文档的文件,可能包含了具体的实现细节、测试数据或者示例应用说明。 7. **注意事项** 在实际应用中,需要注意总线的抗干扰能力,合理规划线路布局,避免信号...
在这个项目中,作者通过使用简单的材料和工具,成功地将一个多点触控功能添加到了他的N520设备上。下面将详细解析这一过程中的关键技术点和实现细节。 ### 1. 多点触控技术简介 多点触控(Multi-Touch)是一种允许...
描述中的“必须先测出ID(使用测试ID的程序)”意味着在实际使用多点测温程序之前,需要先运行一个辅助程序来识别和记录每个DS18B20传感器的唯一ID。因为每个DS18B20都有一个唯一的64位序列号,这使得主机能够区分...
点对点路由中继是一种简单的网络连接形式,其中两个设备之间建立直接的通信链路。这种链路可以是物理的,如以太网电缆,也可以是无线的,如微波链路或光缆。在P2P模式下,路由器之间只有一条直接的连接,数据包从一...