×
Namespaces

Variants
Actions

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

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

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

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

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

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

Contents

Обзор

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

TactileFeedback API

Тактильная отдача может срабатывать ответ на прикосновении к сенсорному экрану в целом или к конкретному элементу пользовательского интерфейса. Большинство компонентов пользовательского интерфейса S60 5-го издания имеют встроенную возможность, обеспечивающую поддержку тактильной обратной связи (отдачи). Следует внимательно относиться к реализации функциональности обратной связи в своих приложениях, так как излишне частое использование отдачи может вызывать у пользователя некоторый дискомфорт.

TactileFeedback.png

Реализуем отправку устройством отдачи в ответ на прикосновение пользователя к текстовой метке.

Реализация функциональности обратной тактильной связи

TactileFeedbackAppView.h

  • Унаследуем класс от MCoeControlHitTest и реализуем его виртуальную функцию HitRegionContains для получения и обработки событий от текстовой метки
  • Объявляем объект MTouchFeedback членом класса и используем его для получения указателя на экземпляр объекта тактильной отдачи, созданного для этого приложения
...
...
#include <touchfeedback.h>
#include <eiklabel.h> // для текстовой метки
 
// CLASS DECLARATION
class CTactileFeedbackAppView : public CCoeControl, MCoeControlHitTest
{
....
....
//For label control
TInt CountComponentControls() const;
CCoeControl* ComponentControl(TInt aIndex) const;
 
//From MCoeControlHitTest
TBool HitRegionContains( const TPoint& aPoint, const CCoeControl& /*aControl*/ ) const;
 
 
private:
....
....
MTouchFeedback* iTouchFeedback; // для тактильной отдачи
CEikLabel* iLabel; // для текстовой метки
};

TactileFeedbackAppView.cpp

  • Создаем текстовую метку iLabel в ConstructL(), как это показано ниже.
  • Используем iTouchFeedback для получения указателя на экземпляр объекта тактильной отдачи, созданного для этого приложения с использование вызова функции MTouchFeedback::Instance()
// -----------------------------------------------------------------------------
// CTactileFeedbackAppView::ConstructL()
// Symbian 2nd phase constructor can leave.
// -----------------------------------------------------------------------------
//
void CTactileFeedbackAppView::ConstructL(const TRect& aRect)
{
// Создаем окно
CreateWindowL();
 
_LIT(KTextHelloWorld, "hello world");
iLabel = new (ELeave) CEikLabel;
iLabel->SetContainerWindowL( *this );
iLabel->SetTextL(KTextHelloWorld);
iLabel->SetHitTest(this);
 
// Устанавливаем размеры окна
SetRect(aRect);
 
iTouchFeedback = MTouchFeedback::Instance();
}
  • Реализуем функцию HitRegionContains() для того чтобы определить, входит ли точка соприкосновения стилуса с экраном в область, занимаемую текстовой меткой.
// ---------------------------------------------------------------------------
// From class MCoeControlHitTest.
// Определяем, входит ли точка соприкосновения стилуса с экраном в область, занимаемую текстовой меткой.
// ---------------------------------------------------------------------------
//
TBool CTactileFeedbackAppView::HitRegionContains( const TPoint& aPoint,
const CCoeControl& /*aControl*/ ) const
{
return (iLabel->Rect().Contains( aPoint ) );
}
  • Обрабатываем события от стилуса и отправляем тактильную отдачу в том случае, если точка соприкосновения стилуса с экраном входит в область, занимаемую текстовой меткой.
// -----------------------------------------------------------------------------
// CTactileFeedbackAppView::HandlePointerEventL()
// Вызывается фреймворком при получении событий от указателя (стилуса)
// -----------------------------------------------------------------------------
//
void CTactileFeedbackAppView::HandlePointerEventL(
const TPointerEvent& aPointerEvent)
{
TPoint point = aPointerEvent.iPosition;
 
if(aPointerEvent.iType == TPointerEvent::EButton1Down)
{
if ( HitRegionContains( point, *iLabel ))
iTouchFeedback->InstantFeedback(ETouchFeedbackBasic);
}
 
// Передаем событие базовому классу
CCoeControl::HandlePointerEventL(aPointerEvent);
}
  • Реализуем функцию SizeChanged для текстовой метки
// -----------------------------------------------------------------------------
// CTactileFeedbackAppView::SizeChanged()
// Вызывается системой в случаем изменения размеров отображения.
// -----------------------------------------------------------------------------
//
void CTactileFeedbackAppView::SizeChanged()
{
iLabel->SetExtent( TPoint(0,0), iLabel->MinimumSize());
}
  • Возвращаем число компонентов, содержащихся в контейнере, у нас он один - iLabel
TInt CTactileFeedbackAppView::CountComponentControls() const
{
return 1; // возвращаем число компонентов в контейнере
}
 
CCoeControl* CTactileFeedbackAppView::ComponentControl(TInt aIndex) const
{
switch ( aIndex )
{
case 0:
return iLabel;
default:
return NULL;
}
}
  • Не забудьте удалить объект iLabel в деструкторе класса.
  • Удалять объект iTactileFeedback вручную не требуется.
// -----------------------------------------------------------------------------
// CTactileFeedbackAppView::~CTactileFeedbackAppView()
// Деструктор.
// -----------------------------------------------------------------------------
//
CTactileFeedbackAppView::~CTactileFeedbackAppView()
{
if(iLabel)
{
delete iLabel;
iLabel = NULL;
}
}

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

MTouchFeedback

  • Instance()
  • SetFeedbackArea()
  • RemoveFeedbackArea()
  • InstantFeedback()
  • FeedbackEnabledForThisApp()

MCoeControlHitTest

  • HitRegionContains()

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

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

  • #include <touchfeedback.h>
  • #include <eiklabel.h>

Классы

  • MTouchFeedback
  • CEikLabel
  • MCoeControlHitTest

Библиотеки

  • touchfeedback.lib
  • eikcoctl.lib

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

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



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

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

This page was last modified on 10 November 2011, at 05:40.
54 page views in the last 30 days.
×