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() が呼ばれます。
  1. private val clipOutlineProvider = object : ViewOutlineProvider() {  
  2.   
  3.     override fun getOutline(view: View, outline: Outline) {  
  4.         val margin = min(view.width, view.height) / 10  
  5.         outline.setOval(  
  6.                 0,  
  7.                 0,  
  8.                 view.width,  
  9.                 view.height  
  10.         )  
  11.     }  
  12. }  
View の setOutlineProvider() で ViewOutlineProvider を指定します。outline clipping を有効にするには setClipToOutline() で true を指定します。

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





0 件のコメント:

コメントを投稿