Android端末でのOnGesutureのTInteractiveGestureFlag.gfInertia

解決


Konnoya  2017-06-18 06:10:56  No: 48663

こんばんは!
現在、Androidアプリを作っていまして、期待する動作を行えないので質問しますm(_ _)m

Androidアプリ で ジェスチャ操作 をしたいと考えておりまして、
指の動きと連動したアニメーションを行う為、
Interactive Gesture(対話型)を使用します。
※ 標準ジェスチャでは操作が終わった後にイベントが発生する為。

指1本の操作( パンジェスチャ )を処理したいのですが、
OnGestureイベントハンドラ の EventInfo.Flags に、
TInteractiveGestureFlag.gfInertia(継続中) が発生しない様なのです。

オブジェクトインスペクタ の Form1.Touch.InteractiveGestures.Pan は 
TRUE にしてあります。

下記の単純なコードを試してみてもイベントは発生せず、何か大きな事を
見落としているのでしょうか?
gfBegin と gfEnd は正しく実行されます。

[ FMXコード ]
unit Unit1;

interface

uses
  System.SysUtils, System.Types, System.UITypes, System.Classes, System.Variants,
  FMX.Types, FMX.Controls, FMX.Forms, FMX.Graphics, FMX.Dialogs, FMX.Controls.Presentation, FMX.StdCtrls;

type
  TForm1 = class( TForm )
    Label1 : TLabel;
    procedure FormGesture( Sender : TObject; const EventInfo : TGestureEventInfo; var Handled : Boolean );
  private
    { private 宣言 }
  public
    { public 宣言 }
  end;

var
  Form1 : TForm1;

implementation

{$R *.fmx}

procedure TForm1.FormGesture( Sender : TObject; const EventInfo : TGestureEventInfo; var Handled : Boolean );

begin
  // パンジェスチャ?
  if EventInfo.GestureID = igiPan then
  begin
    // ジェスチャ開始
    if TInteractiveGestureFlag.gfBegin   in EventInfo.Flags then
    begin
      Label1.Text := 'Begin';
    end;
    // ジェスチャ継続中
    if TInteractiveGestureFlag.gfInertia in EventInfo.Flags then
    begin
      Label1.Text := 'Inertia';
    end;
    // ジェスチャ終了
    if TInteractiveGestureFlag.gfend     in EventInfo.Flags then
    begin
      Label1.Text := 'End';
    end;
  end;
end;

end.

使用している環境は、
OS : Windows7( 32ビット )
Delphi : Delphi XE8 Professional( アップデートアップデートサブスクリプション適用済み )
Android端末 : SHARP SH-M02

色々と弄繰り回しましたが、どうにもならず、
どなたかご教授して下さいm(_ _)m


Konnoya  2017-06-20 17:59:49  No: 48664

あれから試行錯誤しました。

関係無い事なのかもしれませんが、FMX には TInteractiveGestureOption が
無いとの事なので、igoPanInertia を指定できず、
どうしても TInteractiveGestureFlag.gfInertia のトリガを得る事が出来なかったので、
慣性は諦めて、TInteractiveGestureFlag.gfBegin のトリガで基点を保存し、
パンジェスチャが発生する度に座標を計算するという手法で対応する事にしました。

どうもお騒がせしました。


Konnoya  2017-06-21 05:39:34  No: 48665

解決時チェックを付けるのを忘れていました。
失礼しました。


nagamachi  2017-06-30 01:32:31  No: 48666

解決済みのようですが気になったので試してしました。
BeginとEndの間でTInteractiveGestureFlag.gfInertia としては
発生してないようですね。
イベントは正しく(?)
Begin
...
...
...
End
で慣性らしきものが発生しているようですが。
何なんでしょうね。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加