视图无法填满整个屏幕

时间:2015-09-11 14:09:08

标签: android

我的所有内容都与https://github.com/googlesamples/android-vision/tree/master/visionSamples/multi-tracker中的示例完全相同,但我的活动布局是这样的:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/topLayout"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:keepScreenOn="true"
    android:weightSum="100"
    android:orientation="horizontal">

    <be.citylife.communitypurchaseapp.view.camera.CameraSourcePreview
        android:id="@+id/preview"
        android:layout_width="0dp"
        android:layout_height="match_parent"
        android:layout_weight="60">

        <be.citylife.communitypurchaseapp.view.camera.GraphicOverlay
            android:id="@+id/overlay"
            android:layout_width="match_parent"
            android:layout_height="match_parent" />

    </be.citylife.communitypurchaseapp.view.camera.CameraSourcePreview>

    <FrameLayout
        android:id="@+id/sideContainer"
        android:layout_width="0dp"
        android:layout_height="match_parent"
        android:layout_weight="40"/>

</LinearLayout>

我的平板电脑处于横向状态,我希望cameraPreviewSource始终保持在高处并填满整个屏幕,然后立即关闭它我有一个片段填充其余部分。

此布局有效,但我的previewsource不能填满整个高度。它上面有一个黑色横幅。即使我的宽度实际上比我想要的还小,你可以在屏幕截图中看到:

http://i61.tinypic.com/vctmw0.png

我在CameraLourcePreview中使用onLayout函数中的宽度和高度,但它没有帮助。我在预览中知道它确实将屏幕填满了屏幕的底部,但是在平板电脑上它并不是。

enter image description here LP。

任何人都知道如何解决这个问题?

编辑:

我认为这与此有关:

  @Override
    protected void onLayout(boolean changed, int left, int top, int right, int bottom) {
        int width = 320;
        int height = 240;
        if (mCameraSource != null) {
            Size size = mCameraSource.getPreviewSize();
            if (size != null) {
                width = size.getWidth();
                height = size.getHeight();
            }
        }

        // Swap width and height sizes when in portrait, since it will be rotated 90 degrees
        if (isPortraitMode()) {
            int tmp = width;
            width = height;
            height = tmp;
        }

        final int layoutWidth = right - left;
        final int layoutHeight = bottom - top;

        // Computes height and width for potentially doing fit width.
        int childWidth = layoutWidth;
        int childHeight = (int)(((float) layoutWidth / (float) width) * height);

        // If height is too tall using fit width, does fit height instead.
        if (childHeight > layoutHeight) {
            childHeight = layoutHeight;
            childWidth = (int)(((float) layoutHeight / (float) height) * width);
        }

        for (int i = 0; i < getChildCount(); ++i) {
            getChildAt(i).layout(0, 0, childWidth, childHeight);
        }

        try {
            startIfReady();
        } catch (IOException e) {
            Log.e(TAG, "Could not start camera source.", e);
        }
    }

这是关于CameraSourcePreview的onlayout方法。

3 个答案:

答案 0 :(得分:5)

评论或删除CameraSourcePreview下面的行,它应该没问题。我遇到了和你一样的问题,现在已经解决了。

if (childHeight > layoutHeight) {
    childHeight = layoutHeight;
    childWidth = (int)(((float) layoutHeight / (float) height) * width);
}

答案 1 :(得分:0)

enter image description here

应该将其置于全屏模式:D有许多其他模式可供选择。如果这不起作用,请删除自动生成的

    @Override
public boolean onCreateOptionsMenu(Menu menu) 
{

    // Inflate the menu; this adds items to the action bar if it is present.
    getMenuInflater().inflate(R.menu.main, menu);
    return true;
}




/** gets called when a Menu.onClick happens
 * 
 * @param item the ID of the clicked Item
 */
@Override
public boolean onOptionsItemSelected(MenuItem item) 
{
    int id = item.getItemId();
    if (id == R.id.action_settings) {
        //TODO
    }
    return super.onOptionsItemSelected(item);
}
}

答案 2 :(得分:0)

可能与相机的纵横比以及它如何吸入容器有关。

如果您正在使用的相机预览保持纵横比并使预览适合容器,那么您肯定会得到黑条。这是因为大多数相机的传感器产生的图像被设计为适合相对于1920x1080px(或16:9宽高比框)的空间。

您需要的是隐藏侧面的额外空间以及根据高度填充预览。也就是说,如果您不介意在预览时向用户隐藏某些图像。可能无法直接使用您正在使用的视图执行此操作,但如果将对象放入另一个布局容器中,则应该相对简单。

希望这有帮助!