使用OutlineProvider完成阴影和视图圆角

目标

通过OutlineProvider来完成阴影和圆角

视图圆角有很多方案,今天看到OutlineProvider可以用他来实现.还挺方便干净.

代码


        binding.tvEvent.setBackgroundColor(Color.RED)
        binding.tvEvent.clipToOutline = true
        binding.tvEvent.outlineProvider = object :ViewOutlineProvider() {
            override fun getOutline(view: View?, outline: Outline?) {
                outline?.setRoundRect(0, 0, view?.getWidth()?:0, view?.getHeight()?:0, 30.0f);
            }
        }

        binding.tvEvent2.clipToOutline = true
        binding.tvEvent2.elevation = 5.0f
        binding.tvEvent2.outlineProvider = object :ViewOutlineProvider() {
            override fun getOutline(view: View?, outline: Outline?) {
                val path = Path()
                path.moveTo(view!!.width.toFloat(), view.height.toFloat())
                path.lineTo(view.width.toFloat(), view.height * 2.toFloat())
                path.lineTo(view.width * 2.toFloat(), view.height * 2.toFloat())
                path.lineTo(view.width * 2.toFloat(), view.height.toFloat())
                path.close()
                outline!!.setConvexPath(path)
            }
        }
        
        
复制代码

效果

image.png

Android中的Z的含义

 - Elevation 高度,一个静态值
 - Translation Z z轴变动值,用于动画的动态值
 

 Z Vaue = Elevation + TranslationZ
复制代码

image.png

参考

彻底理解 Android 中的阴影

© 版权声明
THE END
喜欢就支持一下吧
点赞0 分享