处理每个触摸点的触摸事件(FMX And​​roid)

时间:2015-01-04 02:12:14

标签: android delphi firemonkey

我们目前有每个接触点的位置属性。

事件程序是:

procedure TForm1.FormTouch(Sender: TObject; const Touches: TTouches;
  const Action: TTouchAction);

动作与每次触摸无关,仅检测是否触摸。

如果我们想要完全控制每个触摸点,我们需要另一个属性作为TTouchAction。

类似的东西:

TTouch = record
  Location: TPointF;
  Action: TTouchAction;
end;

原始声明(FMX.Types)是:

TTouch = record
  Location: TPointF;
end;

有没有人知道任何解决方法?

我使用Delphi XE7。

更新:修复!!

将fmx.platform.android添加到“使用”。

我对fmx.platform.android进行了以下更改:

var
  ACTION_Touches: array of Integer;

//Function Modded
function TPlatformAndroid.HandleAndroidMotionEvent(AEvent: PAInputEvent): Int32;
var
  I: Integer;
  MotionEvent: TMotionEvent;
begin
  Result := 0;

  FMotionEvents.Clear;

  SetLength(ACTION_touches, 1);

  for I := 0 to AMotionEvent_getPointerCount(AEvent) - 1 do
  begin
    MotionEvent.EventAction := AKeyEvent_getAction(AEvent) and AMOTION_EVENT_ACTION_MASK;
    MotionEvent.Position := TWindowManager.Current.PixelToPoint(TPointF.Create(AMotionEvent_getX(AEvent, I),
      AMotionEvent_getY(AEvent, I)));
    MotionEvent.Shift :=[ssLeft];
    if AInputEvent_getType(AEvent) <> AINPUT_SOURCE_MOUSE then
      Include(MotionEvent.Shift, ssTouch);
    FMotionEvents.Add(MotionEvent);
    ACTION_touches[0] := (AKeyEvent_getAction(AEvent) and AMOTION_EVENT_ACTION_PointerIndex_MASK) shr AMOTION_EVENT_ACTION_PointerIndex_SHIFT;
  end;

  HandleMultiTouch;

  if (FActiveInteractiveGestures = []) or (FActiveInteractiveGestures = [TInteractiveGesture.Pan]) then
    ProcessAndroidMouseEvents;
  ProcessAndroidGestureEvents;
end;

0 个答案:

没有答案