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 を継承して画像縮小付きの新クラスをつくるとベストですね。

XamarinでClickできるLabelを作るには

画面上の任意の文字をクリックしたとき、イベント処理を行いたい場合、素の .NET C# では Label でも MouseClickイベント が指定できますが、Xamarin では Label Clickedイベント がありません。

そこでButton にしてしまうと以下のように背景がグレーになってしまいます。

これは boderWidth = 0 、backgroundColor=page背景色 で一見回避できます。

Button単体ではよいのですが、Grid に表形式に配置した場合、文字部分でけにしかタップに反応しないという問題が発生します。ユーザ側では「反応が悪い」と思われてしまいます。そこでそこでWidthRequst で幅を指定すると、、、

しかしHorizontalOptions =Start  を指定しても文字が中央寄せになってしまいます。文字位置は Panding reight 量を増やして調整します。しかし増やしすぎると文字が見えなくなるため、文字数から計算して reight 量を求める必要があります。確認して背景色の標準に戻して試してみます。

これでタップ可能な Label ができました。後は背景色を戻せばOK。フォント幅は可変長なので厳密にはズレが生じます。文字列描画幅の今日のところ算出まではおこなっていません。厳密に行う方法はあるようですが文字種をカウントして以下の式で「換算文字数」を計算して、フォント幅に掛けてあげると大体合いいます。 各乗数は逐次調整ください。

ユーザさんは「簡単だろ?」「出来て当たり前」と思われるかもしれませんが、様々なプログラミングのフラットフォームにて意図とおり仕様が実現できないことが2回に1回は発生します。特にGUI系は。市販本にもWEB記事にも載っていない。プログラミングにも表には見えない苦労がたくさんあります。

XamarinでImageButton上に文字を表示するには

もうずく開発が終了してしまう Xamarin ですが使い物にならなくなるのはも少し先です。後継の .NET MAUI への移行もも少しまった方が安定し正しいHowToも蓄積するでしょう。他WEB記事では見つからなかったプログラミング方法を覚え書きしておきたいと思います。

アプリの要件によっては、ImageButton 上に文字を表示しいシチュエーションがあります。素の ButtonImageSourceプロパティ で画像を指定し、Textプロパティ で文字も指定できますが、画像の周囲に文字は配置されます。

画像の上に文字は描画するには、Grid に ImageButton → Label の順で 同じ行列位置に配置します。

でもこれだけだと文字が見にくいです。ポイントの大きい Label を白で Label の下に配置してあげるとGoodです。

Android でも iOS でも 同様です。実際の実装では、.cs 側で動的に生成しています。せっかく用意したのですがボツになりました。.NET MAUI でもHowtoとして生きるとよいのですが、、、

一人会社でIT系BtoBマッチングにTRYする

起業後、どうやって新しい案件を獲得していくかは大きなテーマです。弊方、今日のところ一人会社ででソフト開発系のBtoBマッチングへのTRY状況を紹介いたします。

敷居は低いのですが、その分、競争要し、案件応募に対してユーザの応答が得にくい傾向です。

参加資格個人、法人
参加手順マッチング事業者と面談後、参加を申し込む。利用可能まで2week程度。
費用月額固定、一月の申請数上限によって費用が定められている。
一月10件プランなら、一人会社でもまずまず支払っていける。
初期費用なし。
利用手順マッチング案件がメール配信され、希望するならWEB上で参加申請。
ユーザさんとの交渉は早いもの順。
→ その後はユーザさんと直接交渉。
加入期間2年
状況参加申込み:多数、受注 1件、NSD締結で発注待ち1件
メリット・参加の敷居が低い。
・稀に大企業の案件もあり。
・応募期間は 2week 程度と長め。
デメリット・’24.2月現在、2年前ごろからすると案件数は1/5程度に下がっている。
・早いもの順で、すぐ応募上限に達するため、常に案件メールの監視が必要。
・ユーザさんのヒアリングレベルは低い。文章で少ないときは2、3行。
・一般の方の案件も多く、それらの案件の本気度は怪しい。
・ユーザさんに連絡しても半分以上ノーレス。
・法人さんでもソフト開発の手間を知らないため、アプリ開発予算5万円
という案件もあり。
その他・応募数上限に達しても追加申請し、ユーザさんが許可すれば商談が可能。
・組込ソフト案件はこれまで1件あった程度。

まずますの敷居、自身がある案件、競合が少ないマイナ/特殊案件なら狙いやすい。選定されても理由も分からず、それがユーザニーズに合っているかは掛けです。

参加資格法人のみ。一人会社でも可。
参加方法マッチング事業者と面談後、参加を申し込む。利用可能まで割と早かった。
費用紹介1件につき固定額、一人会社でややつらいがIT専門系では安価な方。
初期費用なし。
利用手順マッチング案件がメール配信され、希望するならWEB上で参加申請。
ユーザさんとの交渉はマッチング事業者が選定。
→ その後はユーザさんと直接交渉。
加入期間1年
状況参加申込2件、選定2件、
選定された案件の内、ユーザさん応答なし1件、一人会社&免税事業者NG 1件
メリット・案件が多い。
・参加しなくてもトレンド情報としても勉強になる。
デメリット・参加申込み期間は、1日程度と短い。
・ユーザさんの受注に至らずとも、紹介料が発生。
・ますまずの紹介料てあるが、ユーザさんと連絡がつくまでは保証していない。
・案件内容のユーザヒアリングレベルは中。文章で20~50行といったところ。
・発注条件のまではヒアリングされていない模様。
・マッチング事業者で選定するためユーザさんの意向に本当に合っているか分からない。
・紹介料以下の予算案件(費用回収できない)もある。
その他・連絡がつかないユーザさんはフォローしてくれる。(が保証はない。)
・組込ソフト案件は稀にあり。

総じて共通する点は、

  • ユーザさんが、業者実績から選ぶというスタイルは今のところ無いようです。実績/地域/組織規模/支払条件から、ユーザさんから選んでもらい、マッチング事業者さんは転職サービスのようにそのサポートをするがムダが無い気がします。
  • ユーザさんは無償なので気軽に合い見積や予算取りも利用されている可能もあります。過去職場では「必ず合い見積をとる」と社内規定もありました。費用承認がないと、一個人の単なる思い付きも十分ありそうです。ユーザさんへも費用を徴収した方が、よりフェアでムダのないマッチングができるのではないかと思います。
  • 費用を出しているのは業者側だけです。それにしては業者側に不便で費用リスクのある仕組みとなっています。
  • 業者側からの空振り率はとても高い。

売上の何%で成功報酬タイプのマッチング事業者さんもあり面談だけしました。ヒアリング内容もA4びっちりで素晴らしく、受注に関しては3者間でフェアですが、初期費用と月費用も別払いなのでとて厳しいです。毎月サーバ利用費で一万円以下で、売上時にユーザと業者双方から成功報酬というスタイルが理想ですが、売上が生じるまで時間がかるリスクがあります。難しいですね。行政のサービスなどもあるらしいのでTRYしていきたいと思います。

以上、新しくソフト開発で事業をされる方の参考まで。