2018年6月9日土曜日

ViewOutlineProvider を使う

API Level 21 に追加された ViewOutlineProvider では shadow casting と outline clipping に利用する Outline を指定できます。

ViewOutlineProvider の getOutline() の引数で渡される Outline に Rect, RoundRect, Oval または ConvexPath を指定します。

View が持つ Drawable が invalidate されたり、View のサイズが変わったり、View の invalidateOutline() が呼ばれると getOutline() が呼ばれます。 private val clipOutlineProvider = object : ViewOutlineProvider() { override fun getOutline(view: View, outline: Outline) { val margin = min(view.width, view.height) / 10 outline.setOval( 0, 0, view.width, view.height ) } } View の setOutlineProvider() で ViewOutlineProvider を指定します。outline clipping を有効にするには setClipToOutline() で true を指定します。

outline clipping は現状 RoundRect か Circle(Oval で縦横のサイズが同じ)のときだけ効きます。
clip しても View のサイズには影響しないためクリック領域などはそのままです。 override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) clippedView.outlineProvider = clipOutlineProvider clippedView.clipToOutline = true } 左 : clipToOutline = false, 右 : clipToOutline = true





0 件のコメント:

コメントを投稿