2014-01-08 2 views
0

Я пробовал реализовать мультитач-программу, чтобы проверить и понять, как работает андроид. Я пробовал следующий код, но когда я его запускаю, на экране распознаются только четыре из десяти возможных идентификаторов, другие строки - это только значения по умолчанию, которые я установил.MultiTouch - Почему всего четыре пальца не больше

Вот код: -

package com.example.chester; 

import android.annotation.TargetApi; 
import android.app.Activity; 
import android.os.Bundle; 
    import android.view.MotionEvent; 
import android.view.View; 
import android.view.View.OnTouchListener; 
import android.widget.TextView; 

@TargetApi(8) 
public class MultiTouchTest extends Activity implements OnTouchListener { 

StringBuilder builder = new StringBuilder(); 
TextView textView; 
float[] x = new float[10]; 
float[] y = new float[10]; 
boolean[] touched = new boolean[10]; 
int[] id = new int[10]; 

private void updateTextView() { 
    builder.setLength(0); 
    for (int i = 0; i < 10; i++) { 
     builder.append(touched[i]); 
     builder.append(", "); 
     builder.append(id[i]); 
     builder.append(", "); 
     builder.append(x[i]); 
     builder.append(", "); 
     builder.append(y[i]); 
     builder.append("\n"); 
    } 
    textView.setText(builder.toString()); 

} 


public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    textView = new TextView(this); 
    textView.setText("Touch and drag (multiple fingers supported)!"); 
    textView.setOnTouchListener(this); 
    setContentView(textView); 
    for (int i = 0; i < 10; i++) { 
     id[i] = -1; 
    } 
    updateTextView(); 
} 

public boolean onTouch(View v, MotionEvent event) { 
    int action = event.getAction() & MotionEvent.ACTION_MASK; 
    int pointerIndex = (event.getAction() & MotionEvent.ACTION_POINTER_INDEX_MASK) >> MotionEvent.ACTION_POINTER_INDEX_SHIFT; 
    int pointerCount = event.getPointerCount(); 
    for (int i = 0; i < 10; i++) { 
     if (i >= pointerCount) { 
      touched[i] = false; 
      id[i] = -1; 
      continue; 
     } 
     if (event.getAction() != MotionEvent.ACTION_MOVE 
       && i != pointerIndex) { 
      continue; 
     } 
     int pointerId = event.getPointerId(i); 
     switch (action) { 
     case MotionEvent.ACTION_DOWN: 
     case MotionEvent.ACTION_POINTER_DOWN: 
      touched[i] = true; 
      id[i] = pointerId; 
      x[i] = (int) event.getX(i); 
      y[i] = (int) event.getY(i); 
      break; 
     case MotionEvent.ACTION_UP: 
     case MotionEvent.ACTION_POINTER_UP: 
     case MotionEvent.ACTION_OUTSIDE: 
     case MotionEvent.ACTION_CANCEL: 
      touched[i] = false; 
      id[i] = -1; 
      x[i] = (int) event.getX(i); 
      y[i] = (int) event.getY(i); 
      break; 
     case MotionEvent.ACTION_MOVE: 
      touched[i] = true; 
      id[i] = pointerId; 
      x[i] = (int) event.getX(i); 
      y[i] = (int) event.getY(i); 
      break; 
     } 
    } 
    updateTextView(); 
    return true; 
} 

}

EDIT: Я использую HTC Sensation с Android 4.0.3

+0

Какое устройство вы тестируете? –

+0

HTC Sensation with android 4.0.3 – BenjaminFranklin

+1

Да, как я думал, похоже на ограничение устройств: http://forum.xda-developers.com/showthread.php?t=1258007 –

ответ

3

Количество штрихов вы можете иметь это устройство (зависит от того, как они использовали устройство и детали), в то время как android (как мобильный os) поддерживает до 10.

Смежные вопросы