Как правильно нарисовать тень на круге в Android - PullRequest
0 голосов
/ 26 июня 2018

У меня есть круг в пользовательском представлении, и мне нужно добавить тень.Представление всегда имеет фиксированный размер, и круг должен быть нарисован до этого размера.Я добавил теневик.Однако значение, добавленное к теневому слою, усекается.Мне интересно, есть ли способ нарисовать круг с заданным размером представления и добавить тень.

enter image description here

CODE

class MockupOval(context: Context) : ConstraintLayout(context){

    private val paint: Paint
    private val rect = RectF(0f, 0f, 0f, 0f)

    init {
        setWillNotDraw(false)
        paint = Paint().apply {
            color = ContextCompat.getColor(context, 
                R.color.mockup_rectangle_default_bg)
            style = Paint.Style.FILL
            isAntiAlias = true
            setShadowLayer(10f, 10f, 10f, 0x80000000.toInt())
            setLayerType(View.LAYER_TYPE_SOFTWARE, this)
        }
    }

    override fun onLayout(changed: Boolean, left: Int, top: Int, right: 
                          Int, bottom: Int) {
        super.onLayout(changed, left, top, right, bottom)
        rect.set(0.0f, 0.0f, width.toFloat(), height.toFloat())
        invalidate()
    }

    override fun onDraw(canvas: Canvas?) {
        super.onDraw(canvas)
        canvas?.run {
            drawOval(rect, paint)
        }
    }
}
...