LoginSignup
3
0

More than 3 years have passed since last update.

Delphi タッチアニメーションを無効化する

Posted at

はじめに

Delphiでモバイル開発をしていると、コントロールをタッチした際に波紋のようなアニメーションが発生することに気がつきます。
ユーザーが操作可能なオブジェクトであることが分かりやすい一方、微妙にダサいというか・・頼んでないというか・・そういう気分になることもありますね!
touchAnimation.png(意外と撮るのに苦労するスクリーンショット)

しかしながら、無効化の方法については、ドキュメントを見つけることができませんでした。
なので、この記事は「方法が正しいかは解らないけどこれで無効化できたよ!」という内容になります。

Delphi 10.3 CommunityEditionで確認しています。
※iOSについては手元に環境が無いため、確認できていません。

やり方

TButtonを例に説明します。

  • マルチデバイスアプリケーションのプロジェクトを作成し、スタイルを「Android」に設定します。
  • FormにTButtonを配置し、右クリックし「カスタムスタイルの編集」を選択します。
  • スタイルデザイナが開いたら(Button1Style1というスタイルが表示されています)、「名前を付けて保存」で適当なファイル(Button.style)に保存します。
  • テキストエディタで Button.style を開きます。おおよそ次のような中身になっていると思います。
object TStyleContainer
  object TLayout
    StyleName = 'Button1Style1'
    Align = Center
    Size.Width = 297.000000000000000000
    Size.Height = 233.000000000000000000
    Size.PlatformDefault = False
    TabOrder = 0
    object TTintedButtonStyleObject
      StyleName = 'background'
      Align = Contents
      SourceLookup = 'AndroidL Lightstyle.png'
      Size.Width = 297.000000000000000000
      Size.Height = 233.000000000000000000
      Size.PlatformDefault = False
(中略)
      TouchAnimation.Link = <
        item
          SourceRect.Left = 336.000000000000000000
          SourceRect.Top = 233.000000000000000000
          SourceRect.Right = 396.000000000000000000
          SourceRect.Bottom = 293.000000000000000000
        end
(略)
        item
          Scale = 3.000000000000000000
          SourceRect.Left = 1009.000000000000000000
          SourceRect.Top = 704.000000000000000000
          SourceRect.Right = 1189.000000000000000000
          SourceRect.Bottom = 884.000000000000000000
        end>
      TouchAnimation.Padding.Left = 1.000000000000000000
      TouchAnimation.Padding.Top = 1.000000000000000000
      TouchAnimation.Padding.Right = 1.000000000000000000
      TouchAnimation.Padding.Bottom = 2.000000000000000000
      HotTint.Shadow = <>
      HotTint.Mask = <
(後略)

このTouchAnimetion.Link 要素が、波紋アニメーションを発生させる際の当たり判定と考えて良さそうです。
よって、TouchAnimation.Linkの中身をバッサリ削除します。TouchAnimation.Padding.*も削除します。

      TouchAnimation.Link = <> //中身を削除
      HotTint.Shadow = <> //その他は前のまま
  • スタイルファイルを保存します。(変更前にスタイルファイルのバックアップを取った方が安全)

  • スタイルデザイナに戻り、Button1Style1を削除します。そして、「開く」アイコンをクリックし、先ほど修正したスタイル ファイルを読み込みます。

  • スタイルを適用し、デバッグ実行で動作を確認します。

原理など

タッチアニメーションの発生・描画は、FMX.Style.Object.pasファイル内の、TTouchAnimationAdapterクラスが担っており、このクラスをTActiveStyleObjectなどの、スタイル定義クラスが所持しています。

先ほどのButton1style1の場合は、backgroudというTTintedButtonStyleObjectクラスのオブジェクトが、TTouchAnimationAdapterを持っています。(スタイルデザイナのオブジェクトインスペクタ上でも確認できます。デザイナ上で設定を変更できればよかったのですが、出来なかった為、ファイルを直接編集して対処しました。)

スタイルの定義にTActiveStyleObject等を用いなければ、タッチアニメーションも発生しない、ということでもあります。

逆に、スタイルを触ってたらタッチアニメーションが発生しなくなってしまった!という場合は、TouchAnimation.Linkの情報が消えてしまっていることが考えられるので、スタイルファイルを確認してみてください。

おわりに

正直「こんな手間なことってある?」と半信半疑なのですが・・。なにかもっと良い方法というか、正しいやり方がありましたら、情報頂ければと思います!

3
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
0