こんばんは!
現在、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
あれから試行錯誤しました。
関係無い事なのかもしれませんが、FMX には TInteractiveGestureOption が
無いとの事なので、igoPanInertia を指定できず、
どうしても TInteractiveGestureFlag.gfInertia のトリガを得る事が出来なかったので、
慣性は諦めて、TInteractiveGestureFlag.gfBegin のトリガで基点を保存し、
パンジェスチャが発生する度に座標を計算するという手法で対応する事にしました。
どうもお騒がせしました。
解決時チェックを付けるのを忘れていました。
失礼しました。
解決済みのようですが気になったので試してしました。
BeginとEndの間でTInteractiveGestureFlag.gfInertia としては
発生してないようですね。
イベントは正しく(?)
Begin
...
...
...
End
で慣性らしきものが発生しているようですが。
何なんでしょうね。
ツイート | ![]() |