SurfaceView обрезает мои виды - PullRequest
       10

SurfaceView обрезает мои виды

0 голосов
/ 25 февраля 2011

Я запрограммировал свою собственную пользовательскую группу ViewGroup для отображения нескольких дочерних представлений, а также для их динамического перемещения и поворота. Я также комбинирую эту пользовательскую ViewGroup с фоновым SurfaceView, который отображает предварительный просмотр камеры, чтобы всегда иметь предварительный просмотр камеры в качестве фона.

Все работает нормально, если я просто использую свою ViewGroup без Camera SurfaceView, но когда я добавляю Camera SurfaceView, я получаю это странное поведение отсечения, как описано на изображениях. Обратите внимание, что отсечение происходит только в том случае, если я перемещаю или поворачиваю свои виды, в исходном месте они, кажется, не открываются.

На следующих изображениях синие линии должны быть прямоугольником вложенных дочерних представлений, который передается методу макета, который я вызываю для всех дочерних представлений моей пользовательской ViewGroup:

публичная пустота (int l, int t, int r, int b)

http://developer.android.com/reference/android/view/View.html#layout(int, int, int, int)

Не беспокойтесь о красных линиях.

Моя гипотеза состоит в том, что при первом создании ViewGroup она учитывает только положение исходных дочерних видов, и это пространство, которое зарезервировано для них. И как только я поворачиваю их, они обрезаются до их первоначального прямоугольника.

270 градусов вращения:

270 Degrees rotation without Camera background

То же самое с фоном камеры (камера не появляется на снимке экрана, поэтому она также черная):

270 Degrees rotation with Camera background

320 градусов вращения:

320 Degrees rotation without Camera background

То же самое с камерой

320 Degrees rotation with Camera background

0 градусов вращения:

0 Degrees rotation without Camera background

То же самое с камерой

0 Degrees rotation with Camera background

Вот фрагменты кода, я вырезал много вещей, но это очень базовая функциональность (mLayout - моя пользовательская ViewGroup):

    public void onCreate(Bundle savedInstanceState) { 
      super.onCreate(savedInstanceState); 
      requestWindowFeature(Window.FEATURE_NO_TITLE); 
      cPreview = new CameraPreview(this);
      setContentView(cPreview, new ViewGroup.LayoutParams(FILL_PARENT, FILL_PARENT));
      test1();
    }

    private void test1() {
        addContentView(mLayout, new LayoutParams(LayoutParams.FILL_PARENT, 
            LayoutParams.FILL_PARENT));
    }

1 Ответ

1 голос
/ 17 октября 2017

Найденное решение состоит в том, чтобы установить этот флаг setWillNotDraw (false) в вашем SurfaceView. Объяснение объяснения здесь

...