Как сделать круговую маску и клипсу GLSurfaceView? - PullRequest
6 голосов
/ 09 января 2020

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

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

  • Он показывает форму круга при наложении GLSurfaceView поверх ImageView

GLSurfaceView более ImageView

  • При наложении отображается квадратная форма GLSurfaceView более VideoView.

GLSurfaceView более VideoView

Я попробовал ниже код для создания круга GLSurfaceView

public class SampleGLView extends GLSurfaceView implements View.OnTouchListener {

    private Path clippingPath;

    public SampleGLView(Context context) {
        this(context, null);
    }

    public SampleGLView(Context context, AttributeSet attrs) {
        super(context, attrs);
        setOnTouchListener(this);
    }

    private TouchListener touchListener;

    @Override
    public boolean onTouch(View v, MotionEvent event) {
        final int actionMasked = event.getActionMasked();
        if (actionMasked != MotionEvent.ACTION_DOWN) {
            return false;
        }

        if (touchListener != null) {
            touchListener.onTouch(event, v.getWidth(), v.getHeight());
        }
        return false;
    }

    public interface TouchListener {
        void onTouch(MotionEvent event, int width, int height);
    }

    public void setTouchListener(TouchListener touchListener) {
        this.touchListener = touchListener;
    }

    @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);
    }
}

Вопрос:

Как мне go об обрезке и рендеринге в виде круга?

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

Кто-нибудь есть идеи, как решить, пожалуйста, прокомментируйте. Заранее спасибо.

...