2012-04-25 2 views
1

Я разрабатываю приложение, предназначенное для записи на холсте. Приложение предназначено для использования с 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, который вызвал путаницу.

Я думал, что если этот стилус не работает, то любой другой стилус не будет работать. Тем не менее, я попробовал другой стилус, и это сработало.

Спасибо за вашу помощь.

+0

Построить и изучить некоторые из Примеры HTC, которые используют перо. –

ответ

1

Прежде всего, вы должны обновить свой Flyer до Honeycomb (Android 3.2), также этот пример специфичен для ICS (Android 4), но вы можете запустить этот пример, используя библиотеку совместимости и внести некоторые незначительные изменения в код, дополнительная информация будет доступна по адресу http://htcdev.com

+0

Спасибо за помощь. Я понял, в чем проблема. Это был специальный Стилус, который пришел с Flyer. – jova85

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