save code
This commit is contained in:
@@ -2,47 +2,61 @@ package com.khronos.vulkan_samples;
|
||||
|
||||
|
||||
import android.Manifest;
|
||||
import android.content.Intent;
|
||||
import android.content.pm.PackageManager;
|
||||
import android.graphics.Color;
|
||||
import android.graphics.PixelFormat;
|
||||
import android.graphics.SurfaceTexture;
|
||||
import android.os.Bundle;
|
||||
import android.util.Log;
|
||||
import android.view.Surface;
|
||||
import android.view.SurfaceView;
|
||||
import android.view.TextureView;
|
||||
import android.view.View;
|
||||
import android.view.ViewGroup;
|
||||
import android.widget.Button;
|
||||
import android.widget.FrameLayout;
|
||||
import android.widget.Toast;
|
||||
|
||||
import androidx.annotation.NonNull;
|
||||
import androidx.camera.core.Camera;
|
||||
import androidx.camera.core.CameraSelector;
|
||||
import androidx.camera.core.Preview;
|
||||
import androidx.camera.core.SurfaceRequest;
|
||||
import androidx.camera.lifecycle.ProcessCameraProvider;
|
||||
import androidx.camera.view.PreviewView;
|
||||
import androidx.core.app.ActivityCompat;
|
||||
import androidx.core.content.ContextCompat;
|
||||
|
||||
import com.google.androidgamesdk.GameActivity;
|
||||
import com.google.common.util.concurrent.ListenableFuture;
|
||||
import com.google.mediapipe.examples.facelandmarker.FaceLandmarkerHelper;
|
||||
|
||||
import java.util.concurrent.ExecutionException;
|
||||
import java.util.concurrent.ExecutorService;
|
||||
|
||||
public class MainActivity extends GameActivity {
|
||||
private PreviewView previewView;
|
||||
private TextureView textureView; // 使用 TextureView 替代 PreviewView
|
||||
private ProcessCameraProvider cameraProvider;
|
||||
private FrameLayout containerLayout;
|
||||
private void initCamera(){
|
||||
// 创建摄像头预览视图
|
||||
previewView = new PreviewView(this);
|
||||
previewView.setImplementationMode(PreviewView.ImplementationMode.COMPATIBLE);
|
||||
previewView.setScaleType(PreviewView.ScaleType.FILL_CENTER);
|
||||
// 获取 GameActivity 的根视图
|
||||
ViewGroup rootView = (ViewGroup) getWindow().getDecorView();
|
||||
|
||||
addContentView(previewView, new ViewGroup.LayoutParams(
|
||||
// 创建容器布局
|
||||
containerLayout = new FrameLayout(this);
|
||||
containerLayout.setLayoutParams(new ViewGroup.LayoutParams(
|
||||
ViewGroup.LayoutParams.MATCH_PARENT,
|
||||
ViewGroup.LayoutParams.MATCH_PARENT
|
||||
));
|
||||
|
||||
bringVulkanToFront();
|
||||
// 创建 TextureView 用于摄像头预览
|
||||
textureView = new TextureView(this);
|
||||
textureView.setLayoutParams(new ViewGroup.LayoutParams(
|
||||
ViewGroup.LayoutParams.MATCH_PARENT,
|
||||
ViewGroup.LayoutParams.MATCH_PARENT
|
||||
));
|
||||
|
||||
// 将 TextureView 添加到容器
|
||||
containerLayout.addView(textureView);
|
||||
|
||||
// 将容器添加到根视图的底部(作为背景)
|
||||
//rootView.addView(containerLayout); // 添加到索引0(最底层)
|
||||
rootView.addView(containerLayout, 0);
|
||||
|
||||
|
||||
if (hasCameraPermission()) {
|
||||
startCamera();
|
||||
@@ -51,23 +65,6 @@ public class MainActivity extends GameActivity {
|
||||
}
|
||||
}
|
||||
|
||||
private void bringVulkanToFront() {
|
||||
// 获取窗口的根视图
|
||||
View rootView = getWindow().getDecorView();
|
||||
if (rootView instanceof ViewGroup) {
|
||||
ViewGroup rootGroup = (ViewGroup) rootView;
|
||||
|
||||
for (int i = rootGroup.getChildCount() - 1; i >= 0; i--) {
|
||||
View child = rootGroup.getChildAt(i);
|
||||
if (child != previewView) {
|
||||
child.bringToFront();
|
||||
child.setBackgroundColor(Color.TRANSPARENT);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
protected void onCreate(Bundle savedInstanceState) {
|
||||
@@ -115,7 +112,18 @@ public class MainActivity extends GameActivity {
|
||||
.requireLensFacing(CameraSelector.LENS_FACING_BACK)
|
||||
.build();
|
||||
|
||||
preview.setSurfaceProvider(previewView.getSurfaceProvider());
|
||||
// 使用 TextureView 的 SurfaceTexture
|
||||
SurfaceTexture surfaceTexture = textureView.getSurfaceTexture();
|
||||
if (surfaceTexture != null) {
|
||||
Surface surface = new Surface(surfaceTexture);
|
||||
preview.setSurfaceProvider(new Preview.SurfaceProvider() {
|
||||
@Override
|
||||
public void onSurfaceRequested(@NonNull SurfaceRequest request) {
|
||||
request.provideSurface(surface, ContextCompat.getMainExecutor(MainActivity.this),
|
||||
result -> {});
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
cameraProvider.bindToLifecycle(this, cameraSelector, preview);
|
||||
|
||||
@@ -125,6 +133,7 @@ public class MainActivity extends GameActivity {
|
||||
}, ContextCompat.getMainExecutor(this));
|
||||
}
|
||||
|
||||
|
||||
private static final int REQUEST_CODE_PERMISSIONS = 1001;
|
||||
private static final String[] REQUIRED_PERMISSIONS = new String[]{Manifest.permission.CAMERA};
|
||||
private static final String TAG = "MainActivity";
|
||||
|
||||
Reference in New Issue
Block a user