Rad Studio nos ofrece un componente llamado tGesture para detectar los movimientos de los dedos sobre la pantalla del dispositivo.
Utilizarlo es muy sencillo, sólo hay que abrir la Tool Palette y colocarlo en el Form principal del proyecto.
Después desde el Object Inspector hay que desplegar la propiedad Touch y asociarlo a GestureManager, con ello nos aparecerán dos nuevas propiedades: Gestures (gestos estándar) e InteractiveGestures.
En este link tenéis en detalle la descripción de todos los gestos que reconoce.
Desplegando en el árbol Gestures - Standard tendremos que hacer clic sobre el gesto que queramos reconocer (izquierda, derecha, arriba, abajo, etc...)
GESTURES:
Consta de más de 30 gestos, como Left, Right, Scratchout, Circle, ChevronUp, etc...
INTERACTIVE GESTURES:
Son gestos Multi-touch que disparan el evento OnGesture cuando son detectados. El parámetro EventInfo da información adicional sobre la localización del punto de toque, el ángulo, la inercia del desplazamiento, etc...
Los InteractiveGestures pueden ser: "Zoom", "Pan", "Rotate", "Two Finger Tap", "Long Tap", "Double Tap", y "Press And Tap".
Para obtener el gesto detectado en el evento OnGesture teclearemos:
procedure TForm1.FormGesture(Sender: TObject; const EventInfo: TGestureEventInfo; var Handled: Boolean);
var
S: String;
begin
if GestureToIdent(EventInfo.GestureID, S) then
ShowMessage(S)
else
ShowMessage('Could not translate gesture identifier');
end;
--
Por otra parte también quería enseñaros otra forma menos utilizada para detectar los gestos sin necesidad de añadir componentes a la app, pero más sencilla si cabe, que es utilizar el evento OnTouch del Form, del siguiente modo:
//Autor:http://www.danielespinetti.it
var
FStartingPoint: TPointF;
FDeviceScale: Single;
ScreenSvc: IFMXScreenService;
FScreenWidth: Single;
FScreenHeight: Single;
previousTranslateX: Single;
startX: Single;
previousTranslateY: Single;
startY: Single;
...
procedure TForm1.FormShow(Sender: TObject);
begin
FStartingPoint := PointF(0, 0);
if TPlatformServices.Current.SupportsPlatformService(IFMXScreenService,
IInterface(ScreenSvc)) then
begin
FDeviceScale := ScreenSvc.GetScreenScale();
FScreenWidth := ScreenSvc.GetScreenSize().X;
FScreenHeight := ScreenSvc.GetScreenSize().Y;
end;
Rectangle1.Width := FScreenWidth * 2;
Rectangle1.Height := FScreenHeight * 2;
Rectangle1.Position.X := 0;
Rectangle1.Position.Y := 0;
end;
procedure TForm1.FormTouch(Sender: TObject; const Touches: TTouches;
const Action: TTouchAction);
begin
if Length(Touches) <> 2 then
exit;
case Action of
TTouchAction.None:
;
TTouchAction.Up:
begin
previousTranslateX := Rectangle1.Position.X;
previousTranslateY := Rectangle1.Position.Y;
end;
TTouchAction.Down:
begin
startX := Touches[1].Location.X - previousTranslateX;
startY := Touches[1].Location.Y - previousTranslateY;
end;
TTouchAction.Move:
begin
Rectangle1.Position.X := Touches[1].Location.X - startX;
Rectangle1.Position.Y := Touches[1].Location.Y - startY;
end;
TTouchAction.Cancel:
;
end;
end;
Para probarlo lo único que tenéis que hacer es colocar un rectángulo en el Form y colgando de él una imagen
compilar y ejecutar el proyecto y probar a mover el rectángulo utilizando dos dedos.
Ahora lo aplico en mi app.
ResponderEliminarGracias por la información.