【发布时间】:2019-01-28 06:24:24
【问题描述】:
我正在尝试在我的应用程序中构建一个全屏条形码扫描仪,但我无法让仅包含我的 CameraSource 的 LinearLayout 填满整个屏幕(这篇文章的底部是我的结果截图,带有模拟器中的模拟相机)。
这是我的布局:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/topLayout"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent">
<com.mattdonders.android.wppcalculator.barcode.CameraSourcePreview
android:id="@+id/camera_preview"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1"/>
</LinearLayout>
这是我的 BarcodeScanner 活动中的 onCreate 方法:
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_barcode_scanner);
getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
WindowManager.LayoutParams.FLAG_FULLSCREEN);
mPreview = (CameraSourcePreview) findViewById(R.id.camera_preview);
// Check for the camera permission before accessing the camera. If the
// permission is not granted yet, request permission.
int rc = ActivityCompat.checkSelfPermission(this, Manifest.permission.CAMERA);
if (rc == PackageManager.PERMISSION_GRANTED) {
createCameraSource();
} else {
requestCameraPermission();
}
}
这里是CameraSource类的构造函数:
public CameraSourcePreview(Context context, AttributeSet attrs) {
super(context, attrs);
mContext = context;
mStartRequested = false;
mSurfaceAvailable = false;
mSurfaceView = new SurfaceView(context);
mSurfaceView.getHolder().addCallback(new SurfaceCallback());
addView(mSurfaceView);
}
【问题讨论】:
-
如果该类来自 Google 示例,则
SurfaceView未完全填充。看onLayout()method。 -
这是 - 很好的捕捉(为什么要修复没有损坏的东西)!他们设置的默认尺寸是 320x240 - 什么尺寸会填满屏幕?我以为这些是标准屏幕比例的像素密度,然后按 DPI 缩放?
-
320x240 只是默认值。它尝试根据相机的预览大小设置它们,并按比例缩放到
View的可用尺寸。我不知道你所说的“填满屏幕”是什么意思,但layoutWidth和layoutHeight是View的完整尺寸。如果你想让它真正被填充,那么getChildAt(i).layout(0, 0, layoutWidth, layoutHeight);,但这会垂直拉伸它。 -
检查here。
标签: android android-layout android-camera