Namespaces

Variants
Actions

Please note that as of October 24, 2014, the Nokia Developer Wiki will no longer be accepting user contributions, including new entries, edits and comments, as we begin transitioning to our new home, in the Windows Phone Development Wiki. We plan to move over the majority of the existing entries over the next few weeks. Thanks for all your past and future contributions.

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

From 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 02:40.
183 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.

×