SurfaceView正在剪切我的视图

时间:2011-02-25 20:34:57

标签: android android-widget android-layout android-custom-view

我编写了自己的自定义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度:

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 个答案:

答案 0 :(得分:1)

找到的解决方案是在SurfaceView中设置此标志setWillNotDraw(false) 解释了这个存在的问题here