Перейти к содержанию
Fire Monkey от А до Я
  • 0

Координата в процессе свайпа


nassl

Вопрос

Нужна помощь!
Все перепробовал, не выходит каменный цветок...

На форме лежит скрытый компонент THUETrackBar.
Хочется реализовать следующий функционал на с++ (fmx): свайп вверх по любому месту экрана - делает компонент THUETrackBar видимым, и двигает его ползунок вверх, свайп  вниз - соответственно вниз.

этот код не фурычит в процессе свайпа, только по завершении :(

 

void __fastcall TForm1::windGesture(TObject *Sender, const TGestureEventInfo &EventInfo,
		  bool &Handled)
{
		switch (EventInfo.GestureID) {
		case sgiUp:  TmpBar->Visible=true; TmpBar->Value++; break;
		case sgiDown: TmpBar->Visible=true; TmpBar->Value--; break;
		case igiLongTap: TmpBar->Visible=true;Location_x=EventInfo.Location.x; break;
	}
}

Хотел использовать свойство EventInfo.Location.x, но значение меняется только по окончании свайпа. 

 

 

Изменено пользователем nassl
Ссылка на комментарий

Рекомендуемые сообщения

  • 0

Отвечу сам себе, чтобы не потерять .

Итак, хочется ловить жесты влево, вправо и после лонгтап считывать координаты точки касания. В частности изменяется размер TImage, который скрывается по окончании свайпа запуском анимации в которой Opacity меняется от 1 до 0}.

TPointF P, OldP;

void __fastcall TForm1::FormGesture(TObject *Sender, const TGestureEventInfo &EventInfo,
          bool &Handled)
{
 if (EventInfo.Flags.Contains(TInteractiveGestureFlag::gfBegin))
 {  switch (EventInfo.GestureID)  { case igiLongTap: OldP.y=EventInfo.Location.y;   OldP.x=EventInfo.Location.x; }
 }
 else if(EventInfo.Flags.Contains(TInteractiveGestureFlag::gfEnd))
       {//Жест закончен - не убирать, иначе не сработает TTouchAction::Up   }
 else
  {switch (EventInfo.GestureID)
   {case sgiRight:  DosomethingRight(); break;
    case sgiLeft:     DosomethingLeft();   break;
    case igiPan:      P.y=EventInfo.Location.y;   P.x=EventInfo.Location.x;  break;
   }
 }
}
 //---------------------------------------------------------------------------
void __fastcall TForm1::FormTouch(TObject *Sender, const TTouches Touches, const TTouchAction Action)
{if (Action==TTouchAction::Up)  //Палец убран
  {// Обработка концовки свайпа, например
   FloatAnimation1->Start(); 
  }
}

void __fastcall TForm1::FloatAnimation1Finish(TObject *Sender)
{ Image->Visible=false;Image->Opacity=1;}

...........................................................

PS советы по улучшению кода приветствуются, но у меня получилось так.

 

 

Ссылка на комментарий

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить на вопрос...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...