我编写了自己的自定义ViewGroup,以便能够显示多个子视图,并动态移动它们并旋转它们。 我还将此自定义ViewGroup与显示相机预览的背景SurfaceView相结合,以便始终将相机预览作为背景。
如果我只使用没有Camera SurfaceView的ViewGroup,一切正常,但是当我添加Camera SurfaceView时,我会得到图像中记录的这种奇怪的剪辑行为。请注意,剪切仅在我移动或旋转视图时发生,它们似乎在原始位置未被剪切。
在下面的图像中,蓝线应该是子视图的封闭矩形,它传递给我在我的自定义ViewGroup的所有子视图上调用的布局方法:
public void layout(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));
}