Назначение приложения:
Простое приложение, которое рисует круг для каждого касания, распознанного на экране, и отслеживает события касания.При «показаниях высокого давления» getPressure (int pointerIndex)
цвет круга изменится, а радиус увеличится.Кроме того, идентификатор касания с getPointerId (int pointerIndex)
, координатами x и y и давлением отображаются рядом с касанием пальца.
После фрагмента кода важной части (пожалуйста, простите, это не самый хороший код;) Я знаю)
protected void onDraw(Canvas canvas){
//draw circle only when finger(s) is on screen and moves
if(iTouchAction == (MotionEvent.ACTION_MOVE)){
int x,y;
float pressure;
//Draw circle for every touch
for (int i = 0; i < touchEvent.getPointerCount(); i++){
x = (int)touchEvent.getX(i);
y = (int)touchEvent.getY(i);
pressure = touchEvent.getPressure(i);
//High pressure
if (pressure > 0.25){
canvas.drawCircle(x, y, z+30, pressureColor);
canvas.drawText(""+touchEvent.getPointerId(i)+" | "+x+"/"+y, x+90, y-80, touchColor);
canvas.drawText(""+pressure, x+90, y-55, pressureColor);
}else{ //normal touch event
canvas.drawCircle(x, y, z, touchColor);
canvas.drawText(""+touchEvent.getPointerId(i)+" | "+x+"/"+y, x+60, y-50, touchColor);
canvas.drawText(""+pressure, x+60, y-25, pressureColor);
}
}
}
}
Проблема:
HTC Desire под управлением Android 2.1 является тестовой платформой.Приложение работает отлично и отслеживает два пальца без проблем.Но кажется, что две точки касания сталкиваются друг с другом, когда они находятся близко друг к другу - похоже, что они окружают «привязку» к общей оси x и y.Иногда они даже меняют координаты ввода другого сенсорного события.Другая проблема заключается в том, что, хотя getPressure (int pointerIndex)
относится к PointerID, оба события касания имеют одинаковое значение давления.
Поскольку все это немного абстрактно, найдите видео здесь: http://www.youtube.com/watch?v=bFxjFexrclU
Мой вопрос:
- Мой код простопросто неправильно?
- Разве Android 2.1 не достаточно хорошо обрабатывает сенсорные события?
- Это аппаратная проблема и не имеет ничего общего с 1) и 2)?
Спасибо за ответы и / или ссылки на другую ветку (извините, я мог найти ту, которая решает эту проблему).
Крис