Xamarin ImageButton で画像が一瞬最大化する対策

Xamarin にて、ImageButton をに .cs 使から画像を .Source に設定し画面を表示すると、一瞬ちらっと何かがせ見えます。iPhone より Andoird の方が顕著です。よく凝視すると、ImageButton に載せた画像が、ボタンのサイズを超えて描画されているようです。

GUIシステムの創成期だった1990年代ならまだしも、イマドキこんなあからさまな事象があるなんて。。。HTMLだってそんなことはないでしょう。

以下のようにトライしてみましたがダメでした。

  • 昔よくやったGUI描画中隠し:isVisbile=false して表示寸前で isVisbile=true の効果もなし。
  • 通常のImageでは発生しませんが、Xamarin ではタップイベントが未サポ。
  • NuGetのFFImageLoadingライブラリの CachedImage でも同じ。
  • .cs 内で、WidthRequest で強制しても効かず。

面倒ですが、ImageButton のサイズに合わせて画像を縮小して、設定するしかないようです。しかし画像の縮小は Xamarin.Form では書けないようです。 Android 、iOS側のそれぞれのコードで書く必要があるようです。以下URLにサンプルコードがありました。

https://github.com/xamarin/xamarin-forms-samples/blob/main/XamFormsImageResize/XamFormsImageResize/ImageResizer.cs

上記コードを、Project.Android/MainActivity.cs Project.iOS/Main.cs に、サービスとして分けて実装します。 当方は、.NETのStremクラス に置き替えて実装しました。 実用には各所でnullチェックが必要です。

AndroidのMainActivity.csの場合:

iOSのmain.csの場合:

Xamarin.Form側:

ImageButton を継承して画像縮小付きの新クラスをつくるとベストですね。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です