Как я сглаживаю границу клипа на холсте Android?

Я использую android.graphics Android. Класс холста для рисования кольца. Мой onDraw метод отсекает холст для создания дыры для внутреннего круга и затем рисует полный внешний круг по дыре:

    clip = new Path();
    clip.addRect(outerCircle, Path.Direction.CW);
    clip.addOval(innerCircle, Path.Direction.CCW);

    canvas.save();
    canvas.clipPath(clip);
    canvas.drawOval(outerCircle, lightGrey);
    canvas.restore();

Результатом является кольцо с симпатичным, сгладил внешний край и зубчатый, ужасный внутренний край:

aliased

Что я могу сделать для сглаживания внутреннего края?

Я не хочу обманывать путем рисования серого круга в середине, потому что диалоговое окно немного прозрачно. (Эта прозрачность не является столь же тонкой на на других фонах.)

30
задан Community 8 February 2017 в 14:24
поделиться

1 ответ

Насколько мне известно, вы не можете сглаживать обрезку областей.

Я бы предложил вместо этого использовать растровую маску. Визуализируйте розовый, белый и светло-серый передний план в одно растровое изображение, визуализируйте маску внешнего / внутреннего круга (альфа-канал в градациях серого) в другое растровое изображение, а затем используйте Paint.setXfermode для визуализации растрового изображения переднего плана с помощью маска в качестве альфа-канала.

Пример можно найти в исходном коде ApiDemos здесь .

20
ответ дан 28 November 2019 в 00:24
поделиться
Другие вопросы по тегам:

Похожие вопросы: