Xamarin.FormsC#のコードだけで任意のViewにRippleEffectを追加する方法をご紹介します。Xamarin.Androidであれば別にxmlで書けば何の問題も無いと思うんですが(検索したらその方法はたくさんヒットするし)、FormsからCustomRendererやEffectsで使用するとなるとコードで書けた方が何かと都合が良いので調べてみました。今回調べた方法は、実際にこちらのCommandを追加するEffectで使っています。対象viewのbackgroundがnullの場合はマスクするDrawableを作成nullでなければbackgroundをどこかに退避1と2を指定してRippleDrawableを作成3を対象viewのbackgroundにセットColorStateListの作り方こういう関数を用意しときます。これで希望の色を渡してあげればOKです。OverflowMask用のDrawableの作り方ColorDrawableを普通に作ればOKです。ColorDrawable(Android.Graphics.Color.White);backgroundが指定されていない場合はこのマスク用DrawableをセットしないとRippleが発動しないのでその対策です。すみません、わかりません...。maskDrawable);1番目がColorStateList型でリプル色を指定、2番目が内包するDrawableを指定、3番目がマスクするDrawableを指定といった感じです。null);}これで出来上がりです。EditTextなんかは、そこかよ!ってところがRipple化してたりしますが、概ねどのviewでもいけるかと思います。オーバーレイできないStackLayoutなどのLayout系も前項の方法でRippleEffectを追加できますが、その場合子要素には全く影響しません。詳しくはこちらの記事に書かれていますが、Backgroundに追加するので効果が背面にしか起きないんですよね。Qiita子要素も含めて効果を出したい場合はForegroundにRippleDrawableをセットしなくてはいけないんですが、ForegroundがあるコンテナはFrameLayoutくらいしかなくて、FormsのLayout系で使われているRendererはFrameLayoutでは無いのでForegroundにセットする方法が使えません。Layout系でオーバーレイさせる代替案Layout系に対応するNativeのViewGroupに、ForegroundにRippleDrawableをセットしたFrameLayoutをAddViewして対応します。このViewGroupですが、謎のViewGroupでLinearLayoutとか既存のLayoutを継承しているワケじゃ無さそうなんですよね。LayoutOptionで目一杯と指定してもまったく無反応です。それを何とかするためにOnLayoutChangeListenerを登録してコンテナのLayoutが変わるタイミングで子要素のサイズを設定するようにしています。これはEffectsの場合の方法で、CustomRendererの場合ならOnLayoutをoverrideすれば良さそうです。(2)月別アーカイブはてなブログをはじめよう!kamusoftさんは、はてなブログを使っています。ブログを報告するスターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。