是否有公共或私有API可以让应用程序获得触及的表面?我对Android和/或iOS很感兴趣。
换句话说,我对触摸屏幕的手指的形状感兴趣。
可以返回触摸矩形矩阵的解决方案也可以。
(我90%肯定没有这样的事情,但我希望有人可以证明我错了)
答案 0 :(得分:3)
根据要求回答:
在Android上,我认为你能做的最好的就是使用MotionEvent.getSize(),它会返回手指的大小(尽管不是形状)。
API演示版TouchPaint使用此功能。
答案 1 :(得分:1)
此代码是关于如何获取触摸矩形的想法。对于触摸的每个新矩形,计数器将被添加1,因此更容易跟踪触摸移动(如果需要)。要获得更高的准确性,请更改常量ROWS和COLS
的值#define ROWS 15
#define COLS ROWS
int matrix[ROWS][COLS];
int squareCounter;
- (void) touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event {
UITouch *touch = [[event allTouches] anyObject];
CGPoint location = [touch locationInView:touch.view];
int col = floor((location.x * COLS) / self.view.frame.size.width);
int row = floor((location.y * ROWS) / self.view.frame.size.height);
if (matrix[col][row] == 0) matrix [col][row] = ++ squareCounter;
[label setText:[NSString stringWithFormat:@"[%d][%d] -> %d", col, row, matrix[col][row]]];
}
- (void) touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event {
NSString *matrixStr = @"";
for (int i = 0; i < COLS; i++) {
for (int j = 0; j < ROWS; j++) {
matrixStr = [matrixStr stringByAppendingFormat:@"%d\t", matrix[j][i]];
}
matrixStr = [matrixStr stringByAppendingString:@"\n"];
}
NSLog(@"Matrix:\n%@", matrixStr);
}
- (void) touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
squareCounter = 0;
for (int i = 0; i < ROWS; i++) {
for (int j = 0; j < COLS; j++) {
matrix[i][j] = 0;
}
}
}
- (void)didReceiveMemoryWarning
{
[super didReceiveMemoryWarning];
// Release any cached data, images, etc that aren't in use.
}
必须将其放置在要查看其触摸形状的视图的视图控制器上。
答案 2 :(得分:1)
我找到了适用于Android的解决方案: https://stackoverflow.com/questions/8977510/motionevent-pointercoords-gettouchmajor-device-support。我仍然需要了解它的支持程度......
对于iPhone: Is there any way at all that I can tell how hard the screen is being pressed(见接受的答案)。 但是,似乎没有官方的方式。
但是,如果有人添加了一些官方或非官方/ hackish方法,我将不胜感激。