Bonjour à tous.
J'ai un problème avec la gestion des mouvements sous android.
Je réalise un petit programme de tracé de courbe.
J'ai déjà réalisé les mouvements de zoom et de pan mais j'aimerai améliorer le zoom pour que lorsque les doigts sont à l'horizontale ou à verticale ne zoomer que sur un axe mais pour cela il faudrait connaitre la position des deux doigts et je ne sais pas comment faire.
Voici une partie de mon code :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78 procedure TFGrapher.ICurveGesture(Sender: TObject; const [Ref] EventInfo: TGestureEventInfo; var Handled: Boolean); var zoom: extended; DeltaDistance: Integer; Translation: TPointF; begin Passage:=Passage+1; Label1.Text:=inttostr(Passage); // double tap if (EventInfo.GestureID = igiDoubleTap) then begin YMax := 10; YMin := -10; XMin := -5.2; XMax := 5.2; FGrapher.ICurve.Repaint; Handled := true; end; // zoom if (EventInfo.GestureID = igiZoom) then Begin if TInteractiveGestureFlag.gfBegin in EventInfo.Flags then begin LastDistance := EventInfo.Distance; // distance entre les 2 doigts end; if not(TInteractiveGestureFlag.gfBegin in EventInfo.Flags) and not(TInteractiveGestureFlag.gfEnd in EventInfo.Flags) then begin DeltaDistance := LastDistance - EventInfo.Distance; zoom := (XMax - XMin) * DeltaDistance / (CurveWidth); XMin := XMin - zoom; XMax := XMax + zoom; YMin := YMin - zoom; YMax := YMax + zoom; FGrapher.ICurve.Repaint; LastDistance := EventInfo.Distance; Handled := true; end; if TInteractiveGestureFlag.gfEnd in EventInfo.Flags then begin FGrapher.ICurve.Repaint; Handled := true; end; end; // pan if (EventInfo.GestureID = igiPan) then Begin if TInteractiveGestureFlag.gfBegin in EventInfo.Flags then begin LastPos := EventInfo.Location; // distance entre les 2 doigts end; if not(TInteractiveGestureFlag.gfBegin in EventInfo.Flags) and not(TInteractiveGestureFlag.gfEnd in EventInfo.Flags) then begin Translation.X := (LastPos.X - EventInfo.Location.X) * (XMax - XMin) / CurveWidth; Translation.Y := (LastPos.Y - EventInfo.Location.Y) * (YMax - YMin) / CurveHeight; XMin := XMin + Translation.X; XMax := XMax + Translation.X; YMin := YMin - Translation.Y; YMax := YMax - Translation.Y; FGrapher.ICurve.Repaint; LastPos := EventInfo.Location; Handled := true; end; if TInteractiveGestureFlag.gfEnd in EventInfo.Flags then begin FGrapher.ICurve.Repaint; Handled := true; End; end; end;
Partager