×
Namespaces

Variants
Actions

Пример работы с LongTapDetector API - S60 Touch UI

From Nokia Developer Wiki
Jump to: navigation, search
Article Metadata

Пример кода
Исходный файл: Media:LongTapDetector.zip

Совместимость
Платформа(ы):
S60 5th Edition

Статья
Автор: A.A.M. (28 Jan 2009)
Последнее редактирование: hamishwillee (23 Nov 2011)


Статья базируется на материалах англоязычной части Wiki, все они перечислены в разделе ссылки.

Contents

Обзор

S60 5-го издания имеет интегрированный API, позволяющий обрабатывать определенной продолжительности нажатия указателя (например, стилуса) на сенсорный экран. В данной статье мы рассмотрим пример работы с этим API.

Long Tap Detector API

Чтобы получать события о продолжительных нажатиях указателя на экран следует использовать функциональность класса CAknLongTapDetector. Когда стилус на некоторое время задерживается в одной точке (по-умолчанию это 0.15 сек.), срабатывает показ анимированного оповещения, сигнализующего о том, что получено событие о продолжительном нажатии. Анимационное оповещение реализовано на уровне системного фреймворка (AVKON) и не может быть изменено. Тем не менее, это анимационное оповещение можно включать/выключать благодаря функции EnableLongTapAnimation класса CAknLongTapDetector.

LongTapDetector.png

Реализация функциональности Long Tap Detector

LongTapDetectorAppView.h

  • Для получения событий о продолжительных нажатиях указателя необходимо унаследовать класс от MAknLongTapDetectorCallBack и реализовать его виртуальную функцию HandleLongTapEventL().
  • Объявляем объект CAknLongTapDetector членом класса и используем его в качестве получателя событий о продолжительных нажатиях
....
#include <aknlongtapdetector.h>
....
// CLASS DECLARATION
class CLongTapDetectorAppView : public CCoeControl, MAknLongTapDetectorCallBack
{
.....
// From MAknLongTapDetectorCallBack
virtual void HandleLongTapEventL(const TPoint& aPenEventLocation, const TPoint& aPenEventScreenLocation);
.....
private:
CAknLongTapDetector* iLongTapDetector;
......
};

LongTapDetectorAppView.cpp

// -----------------------------------------------------------------------------
// CLongTapDetectorAppView::ConstructL()
// -----------------------------------------------------------------------------
//
void CLongTapDetectorAppView::ConstructL(const TRect& aRect)
{
// Создаем окно
CreateWindowL();
......
......
iLongTapDetector = CAknLongTapDetector::NewL(this);
.....
}
  • Мы можем указать желаемое время задержки до срабатывания события о продолжительном нажатии указателя. По-умолчанию время задержки равно 0.8 сек.
void CLongTapDetectorAppView::ConstructL(const TRect& aRect)
{
// Create a window for this application view
CreateWindowL();
......
......
iLongTapDetector = CAknLongTapDetector::NewL(this);
iLongTapDetector->SetLongTapDelay(5000000); // Устанавливаем время задержки равным 5 сек.
.....
}
  • Мы можем указать желаемое время задержки до начала показа системного анимированного оповещения о продолжительном нажатии указателя. По-умолчанию время задержки равно 0.15 сек.
void CLongTapDetectorAppView::ConstructL(const TRect& aRect)
{
// Создаем окно
CreateWindowL();
......
......
iLongTapDetector = CAknLongTapDetector::NewL(this);
iLongTapDetector->SetTimeDelayBeforeAnimation(2000000); // Устанавливаем время задержки равным 2 сек.
.....
}
  • Пример обработки событий в HandlePointerEventL:
// -----------------------------------------------------------------------------
// CLongTapDetectorAppView::HandlePointerEventL()
// Вызывается фреймворком при получении событий от указателя (стилуса)
// -----------------------------------------------------------------------------
//
void CLongTapDetectorAppView::HandlePointerEventL(
const TPointerEvent& aPointerEvent)
{
// Передаем событие от указателя в обработчик объекта iLongTapDetector
iLongTapDetector->PointerEventL(aPointerEvent);
 
// Передаем событие базовому классу
CCoeControl::HandlePointerEventL(aPointerEvent);
}
  • События о продолжительном нажатии могут быть обработаны в реализации функции HandleLongTapEventL()
  • Оба аргумента функции HandleLongTapEventL несут информацию о координатах следующих двух точек:
    • aPenEventLocation координаты точки нажатия относительно родительского объекта.
    • aPenEventScreenLocation координаты точки нажатия относительно экрана.
void CLongTapDetectorAppView::HandleLongTapEventL(const TPoint& aPenEventLocation,
const TPoint& aPenEventScreenLocation)
{
// В данном примере просто показывается информационное сообщение
CAknInformationNote* info = new (ELeave) CAknInformationNote;
info->ExecuteLD(_L("Really Long one"));
}
  • Не забудьте удалить объект iLongTapDetector в деструкторе класса.
// -----------------------------------------------------------------------------
// CLongTapDetectorAppView::~CLongTapDetectorAppView()
// Destructor.
// -----------------------------------------------------------------------------
//
CLongTapDetectorAppView::~CLongTapDetectorAppView()
{
.....
.....
if(iLongTapDetector)
{
delete iLongTapDetector;
iLongTapDetector = NULL;
}
.....
}

Полезные функции

CAknLongTapDetector

  • PointerEventL()
  • EnableLongTapAnimation()
  • SetLongTapDelay()
  • SetTimeDelayBeforeAnimation()

MAknLongTapDetectorCallBack

  • HandleLongTapEventL()

Ключевые моменты

Заголовочные файлы

  • #include <aknlongtapdetector.h>

Классы

  • CAknLongTapDetector
  • MAknLongTapDetectorCallBack

Библиотеки

  • avkon.lib

Демонстрационное приложение

Связанные ссылки



При подготовке статьи использованы следующие материалы:

Источники дополнительной информации

This page was last modified on 23 November 2011, at 07:23.
44 page views in the last 30 days.

Was this page helpful?

Your feedback about this content is important. Let us know what you think.

 

Thank you!

We appreciate your feedback.

×