Нарисуйте округленную арку c с помощью SweepGradient - PullRequest
0 голосов
/ 26 мая 2020

Я рисую ar c с помощью SweepGradient. Хочу получить ар c со скругленными углами. Но при использовании SweepGradient углы не закруглялись.

Я пробовал использовать canvas.drawAr c, а также пытался нарисовать ar c с помощью пути. Ниже приведен рисунок кода ar c с холстом:

private val rectF = RectF()
    private var strokeWidthr = getDimensionPixelSize(R.dimen.file_upload_progress_width) * 1f
    private val paint = Paint()
        .apply {
            isAntiAlias = true
            strokeWidth = strokeWidthr
            style = Paint.Style.STROKE
            strokeCap = Paint.Cap.ROUND
        }

    override fun onDraw(canvas: Canvas) {
        super.onDraw(canvas)
        canvas.drawArc(rectF, 0f, 270f, false, paint)
    }

    override fun onSizeChanged(w: Int, h: Int, oldw: Int, oldh: Int) {
        super.onSizeChanged(w, h, oldw, oldh)
        rectF.set(
            strokeWidthr / 2f,
            strokeWidthr / 2f,
            w - strokeWidthr / 2f,
            h - strokeWidthr / 2f
        )
        paint.shader = SweepGradient(
            w / 2,
            h / 2,
            intArrayOf(Color.WHITE, Color.TRANSPARENT),
            floatArrayOf(0.11f, 0.96f)
        )
    }

И этот рисунок с path и pathEffect

 private val rectF = RectF()
    private var strokeWidthr = getDimensionPixelSize(R.dimen.file_upload_progress_width) * 1f
    private val path = Path()
        .apply {
        }
    private val paint = Paint()
        .apply {
            isAntiAlias = true
            strokeWidth = strokeWidthr
            style = Paint.Style.STROKE
            strokeCap = Paint.Cap.ROUND
            pathEffect = CornerPathEffect(strokeWidthr)
        }

    override fun onDraw(canvas: Canvas) {
        super.onDraw(canvas)
        canvas.drawPath(path, paint)
    }

    override fun onSizeChanged(w: Int, h: Int, oldw: Int, oldh: Int) {
        super.onSizeChanged(w, h, oldw, oldh)
        rectF.set(
            strokeWidthr / 2f,
            strokeWidthr / 2f,
            w - strokeWidthr / 2f,
            h - strokeWidthr / 2f
        )
        paint.shader = SweepGradient(
            w / 2f,
            h / 2f,
            intArrayOf(Color.WHITE, Color.WHITE, Color.TRANSPARENT, Color.TRANSPARENT),
            floatArrayOf(0.05f, 0.11f, 0.44f, 0.48f)
        )
        path.reset()
        path.arcTo(rectF, 0f, 180f, false)
    }

В обоих примерах я получаю ar c без закругленных углов. Если я удалю закругленные углы SweepGradient, работающие с обоими примерами.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...