我已经编写了自己的自定义 ViewGroup 以能够显示多个子视图并动态移动它们并旋转它们。我还将这个自定义 ViewGroup 与显示相机预览的背景 SurfaceView 结合起来,以便始终将相机预览作为背景。
如果我只使用没有 Camera SurfaceView 的 ViewGroup,一切正常,但是当我添加 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度旋转:
与相机背景相同(相机没有出现在屏幕截图上,这就是为什么它也是黑色的):
320度旋转:
与相机相同
0度旋转:
与相机相同
这是代码片段,我删掉了很多东西,但这是非常基本的功能(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));
}