2012-01-08 65 views
4

是否有公共或私有API讓應用程序獲取被觸摸的表面?我對Android和/或iOS感興趣。檢測iphone或android上的觸摸形狀?

換句話說,我感興趣的是形狀的手指觸摸屏幕。

解決方案將返回一個矩形的矩形觸摸也可以。

(我90%的陽性有沒有這樣的事情,但我希望有人能證明我錯了)

+0

我不知道iOS上的任何內容。 iOS會檢測手指本身的位置,我不認爲您可以訪問原始傳感器信息。 – fishinear 2012-01-08 19:14:22

+0

除非有人找到方法,否則我認爲這不適用於Android。 Android註冊觸摸單像素座標,我認爲你必須繞過操作系統,並達到硬件水平。 – DeeV 2012-01-23 18:12:36

+1

在Android上,我應該認爲最好的方法是使用MotionEvent.getSize(),它返回手指的大小(不是形狀)。 http://developer.android.com/reference/android/view/MotionEvent.html#getSize%28int%29 – Jave 2012-01-24 09:01:41

回答

3

根據要求答案:
在Android上,我認爲最好的辦法是使用MotionEvent.getSize(),它返回手指的大小(不是形狀)。 API演示TouchPaint使用它。

+0

感謝您的幫助,Jave!我在下面的單獨答案中發佈了一個完整的解決方案(iPhone)。 – johndodo 2012-01-30 08:18:06

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. 
} 

它必須放置在視圖控制器,你要檢測的觸摸形狀,其觀點上。

+0

如果我理解正確,只有觸摸的中心被iOS報告?所以這段代碼跟隨手指的中心並將其路徑(而不是形狀)保存在矩陣中? – johndodo 2012-01-24 06:47:53

+0

就是這樣。在iOS中,觸摸識別器僅通過觸摸發送X和Y.如果你想跟蹤兩個手指,你唯一需要做的就是用手指和矩陣與觸摸之間的關係。 – Esepakuto 2012-01-24 08:38:51

+0

好的,所以如果我想要一個**單**手指的形狀,當**沒有**移動,我運氣不好?順便說一句,即使手指覆蓋的區域的大小會有所幫助... Android似乎支持這一點(請參閱我的答案),iOS如何? – johndodo 2012-01-24 09:00:54

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方法,我將不勝感激。

+0

好的研究!請告訴我它是否有效 – Esepakuto 2012-01-24 11:19:19