是否有公共或私有API讓應用程序獲取被觸摸的表面?我對Android和/或iOS感興趣。檢測iphone或android上的觸摸形狀?
換句話說,我感興趣的是形狀的手指觸摸屏幕。
解決方案將返回一個矩形的矩形觸摸也可以。
(我90%的陽性有沒有這樣的事情,但我希望有人能證明我錯了)
是否有公共或私有API讓應用程序獲取被觸摸的表面?我對Android和/或iOS感興趣。檢測iphone或android上的觸摸形狀?
換句話說,我感興趣的是形狀的手指觸摸屏幕。
解決方案將返回一個矩形的矩形觸摸也可以。
(我90%的陽性有沒有這樣的事情,但我希望有人能證明我錯了)
根據要求答案:
在Android上,我認爲最好的辦法是使用MotionEvent.getSize(),它返回手指的大小(不是形狀)。 API演示TouchPaint使用它。
感謝您的幫助,Jave!我在下面的單獨答案中發佈了一個完整的解決方案(iPhone)。 – johndodo 2012-01-30 08:18:06
這段代碼是如何獲得感動矩形的想法。對於每觸摸一個新的矩形,計數器將被添加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.
}
它必須放置在視圖控制器,你要檢測的觸摸形狀,其觀點上。
如果我理解正確,只有觸摸的中心被iOS報告?所以這段代碼跟隨手指的中心並將其路徑(而不是形狀)保存在矩陣中? – johndodo 2012-01-24 06:47:53
就是這樣。在iOS中,觸摸識別器僅通過觸摸發送X和Y.如果你想跟蹤兩個手指,你唯一需要做的就是用手指和矩陣與觸摸之間的關係。 – Esepakuto 2012-01-24 08:38:51
好的,所以如果我想要一個**單**手指的形狀,當**沒有**移動,我運氣不好?順便說一句,即使手指覆蓋的區域的大小會有所幫助... Android似乎支持這一點(請參閱我的答案),iOS如何? – johndodo 2012-01-24 09:00:54
我已找到適用於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方法,我將不勝感激。
好的研究!請告訴我它是否有效 – Esepakuto 2012-01-24 11:19:19
我不知道iOS上的任何內容。 iOS會檢測手指本身的位置,我不認爲您可以訪問原始傳感器信息。 – fishinear 2012-01-08 19:14:22
除非有人找到方法,否則我認爲這不適用於Android。 Android註冊觸摸單像素座標,我認爲你必須繞過操作系統,並達到硬件水平。 – DeeV 2012-01-23 18:12:36
在Android上,我應該認爲最好的方法是使用MotionEvent.getSize(),它返回手指的大小(不是形狀)。 http://developer.android.com/reference/android/view/MotionEvent.html#getSize%28int%29 – Jave 2012-01-24 09:01:41