Маска и клип GLSurfaceView

Я работаю с SDK, который обеспечивает прямоугольное представление glsurfaceview через обратный вызов.

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

Я попытался использовать маскирующий макет, например маскируемый макет https://github.com/christophesmet/android_maskable_layout (отлично подходит для изображений, не так много для видео)

Как мне обрезать и отобразить это как круг?

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

** Цель интерфейса: **

1 ответ

У меня есть почти то же самое требование к проекту прямо сейчас, которое включает маскирование GLSurfaceView, предоставляемого PexKit. Решение, которое работает для меня, заключается в создании подкласса FrameLayout (или любой другой ViewGroup) и размещении GLSurfaceView внутри него.

Затем в подклассе FrameLayout используйте canvas.clipPath:

private Path clippingPath;

@Override
protected void onSizeChanged(int w, int h, int oldw, int oldh) {
    if (w != oldw || h != oldh) {
        int radius = Math.min(w, h)/2;
        clippingPath = new Path();
        clippingPath.addCircle(w/2, h/2, radius, Path.Direction.CW);
    }
}

@Override
protected void dispatchDraw(Canvas canvas) {
    int count = canvas.save();
    canvas.clipPath(clippingPath);
    super.dispatchDraw(canvas);
    canvas.restoreToCount(count);
}
Другие вопросы по тегам