![](/img/trans.png)
[英]How to add two ActionListener on the same button to perform Timer.start() / Timer.stop() method
[英]How to start and stop method with same button
如何使用相同的 onClick 按钮启动和停止此相机(或预览?)? 启动相机没有问题,但现在也关闭相机,对于像我这样的新手来说,使用相同的按钮被证明更困难。
第二次按下按钮时,程序现在崩溃了,这并不理想。
public class MainActivity extends AppCompatActivity {
PreviewView previewView;
public int REQUEST_CODE_PERMISSIONS = 101;
public final String[] REQUIRED_PERMISSIONS = new String[]{"android.permission.CAMERA"};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
previewView = findViewById(R.id.previewView);
Button captureButton = findViewById(R.id.buttonPreview);
captureButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (allPermissionsGranted()) {
startCamera();
} else {
ActivityCompat.requestPermissions(MainActivity.this, REQUIRED_PERMISSIONS, REQUEST_CODE_PERMISSIONS);
}
}
});
}
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull
int[] grantResults) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
if (allPermissionsGranted()) {
startCamera();
} else {
Toast.makeText(this, "Permissions not granted by the user.", Toast.LENGTH_SHORT).show();
finish();
}
}
public boolean allPermissionsGranted() {
for (String permission : REQUIRED_PERMISSIONS) {
if (ContextCompat.checkSelfPermission(getApplicationContext(), permission) != PackageManager.PERMISSION_GRANTED) {
return false;
}
}
return true;
}
public void startCamera() {
ListenableFuture cameraProviderFuture = ProcessCameraProvider.getInstance(this);
cameraProviderFuture.addListener(() -> {
try {
ProcessCameraProvider cameraProvider = (ProcessCameraProvider) cameraProviderFuture.get();
Preview preview = new Preview.Builder().build();
CameraSelector cameraSelector = new CameraSelector.Builder()
.requireLensFacing(CameraSelector.LENS_FACING_BACK)
.build();
ImageAnalysis imageAnalysis =
new ImageAnalysis.Builder()
.setTargetResolution(new Size(1280, 720))
.setBackpressureStrategy(ImageAnalysis.STRATEGY_KEEP_ONLY_LATEST)
.build();
preview.setSurfaceProvider(previewView.getSurfaceProvider());
Camera camera = cameraProvider.bindToLifecycle(
((LifecycleOwner) this),
cameraSelector,
preview,
imageAnalysis);
} catch (InterruptedException | ExecutionException e) {
}
}, ContextCompat.getMainExecutor(this));
}
}
只需要创建一个 boolean 或 int 变量,例如:
boolean ifCameraStarted=false;
当您调用 startCamera() 时,您将此变量更改为 true,当您停止相机时将其更改为 false; 当你点击按钮时,你用这个变量判断它是真还是假,做不同的事情
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.