Я разрабатываю приложение, предназначенное для записи на холсте. Приложение предназначено для использования с HTC Flyer (Android 2.3.3).Android HTC Flyer - Захват стилуса с MotionEvents
У этого устройства уже установлен Scribbler, поэтому я отключил «Автоматический запуск режима Scribbler», но оставил флажок «История пера для каждого приложения».
В моих тестах я обнаружил, что приложение может обнаружить мои пальцы на сенсорном экране, но не стилусом. Я нажал комбинацию кнопок на стилусе безрезультатно.
Я основан код на TouchPaint из разработчиков Android: http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/graphics/TouchPaint.html
Я не импортировать пакет, как описано в приведенном выше коде
com.example.android.apis.graphics;
В моем Eclipse IDE, он сообщил следующее как проблема заключается в том, что я должен удалить атрибут Override.
@Override
public boolean onHoverEvent(MotionEvent event) {
return onTouchOrHoverEvent(event, false /*isTouch*/);
}
Так что я и сделал.
Я добавил к манифесту следующее.
<uses-configuration android:reqTouchScreen="stylus"/>
<uses-configuration android:reqTouchScreen="finger"/>
Приложение может обнаруживать движения пальцев на сенсорном экране, но никогда не стилусом. Зачем?
Я также отметил, что в руководстве Android Developers MotionEvents относится к getToolType, но я не вижу его в своем «Intellisense» в Eclipse.
http://developer.android.com/reference/android/view/MotionEvent.html#getToolType%28int%29
Метод getToolType не доступен в моем Android код. Я думал, что могу использовать этот метод, чтобы проверить тип сенсорного ввода, например, палец или стилус.
Я также добавил onTouchListener для PaintView (на основе кода TouchPaint).
this.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
return touchSurface(v, event);
}
});
touchSurface код
private boolean touchSurface(View v, MotionEvent event) {
boolean complete = true;
int pAction = event.getAction();
int pActionIndex = event.getActionIndex();
Log.i("SignName", "touchSurface event fired.");
Log.i("SignName", "Pointer Action: " + pAction + ", pActionIndex: " + pActionIndex);
return complete;
}
Когда я использую мой палец, указанное событие. Когда я использую стилус, он не срабатывает. Зачем?
Интересно, эта проблема изолирована от HTC Flyer, потому что у нее есть приложение Scribbler, которое переопределяет настройки моего приложения или мой код неправильный.
Не могли бы вы помочь мне?
(Обновление: 27 апреля 2012 г.) Я нашел, в чем проблема. Это был специальный стилус HTC Flyer, который вызвал путаницу.
Я думал, что если этот стилус не работает, то любой другой стилус не будет работать. Тем не менее, я попробовал другой стилус, и это сработало.
Спасибо за вашу помощь.
Построить и изучить некоторые из Примеры HTC, которые используют перо. –