Я запрограммировал свою собственную пользовательскую группу 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](https://i.stack.imgur.com/nHYBL.png)
То же самое с фоном камеры (камера не появляется на снимке экрана, поэтому она также черная):
![270 Degrees rotation with Camera background](https://i.stack.imgur.com/mDI2u.png)
320 градусов вращения:
![320 Degrees rotation without Camera background](https://i.stack.imgur.com/9ag6F.png)
То же самое с камерой
![320 Degrees rotation with Camera background](https://i.stack.imgur.com/TdqjK.png)
0 градусов вращения:
![0 Degrees rotation without Camera background](https://i.stack.imgur.com/KoGBT.png)
То же самое с камерой
![0 Degrees rotation with Camera background](https://i.stack.imgur.com/idEeS.png)
Вот фрагменты кода, я вырезал много вещей, но это очень базовая функциональность (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));
}