save code

This commit is contained in:
xsl
2025-09-10 17:55:05 +08:00
parent bbbe71587b
commit 9a71226b9c
@@ -6,16 +6,13 @@ import android.content.Intent;
import android.content.pm.PackageManager; import android.content.pm.PackageManager;
import android.graphics.Color; import android.graphics.Color;
import android.os.Bundle; import android.os.Bundle;
import android.os.Debug;
import android.util.Log; import android.util.Log;
import android.view.View; import android.view.View;
import android.view.ViewGroup; import android.view.ViewGroup;
import android.widget.Button; import android.widget.Button;
import android.widget.Toast; import android.widget.Toast;
import androidx.activity.EdgeToEdge;
import androidx.annotation.NonNull; import androidx.annotation.NonNull;
import androidx.appcompat.app.AppCompatActivity;
import androidx.camera.core.Camera; import androidx.camera.core.Camera;
import androidx.camera.core.CameraSelector; import androidx.camera.core.CameraSelector;
import androidx.camera.core.Preview; import androidx.camera.core.Preview;
@@ -23,9 +20,6 @@ import androidx.camera.lifecycle.ProcessCameraProvider;
import androidx.camera.view.PreviewView; import androidx.camera.view.PreviewView;
import androidx.core.app.ActivityCompat; import androidx.core.app.ActivityCompat;
import androidx.core.content.ContextCompat; import androidx.core.content.ContextCompat;
import androidx.core.graphics.Insets;
import androidx.core.view.ViewCompat;
import androidx.core.view.WindowInsetsCompat;
import com.google.androidgamesdk.GameActivity; import com.google.androidgamesdk.GameActivity;
import com.google.common.util.concurrent.ListenableFuture; import com.google.common.util.concurrent.ListenableFuture;
@@ -33,31 +27,23 @@ import com.google.mediapipe.examples.facelandmarker.FaceLandmarkerHelper;
import java.util.concurrent.ExecutionException; import java.util.concurrent.ExecutionException;
import java.util.concurrent.ExecutorService; import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
public class MainActivity extends GameActivity { public class MainActivity extends GameActivity {
private ExecutorService backgroundExecutor;
private FaceLandmarkerHelper faceLandmarkerHelper;
private PreviewView previewView; private PreviewView previewView;
private ProcessCameraProvider cameraProvider; private ProcessCameraProvider cameraProvider;
private Camera camera;
private void initCamera(){ private void initCamera(){
// 添加 PreviewView 用于摄像头预览 // 创建摄像头预览视图
previewView = new PreviewView(this); previewView = new PreviewView(this);
previewView.setImplementationMode(PreviewView.ImplementationMode.COMPATIBLE); previewView.setImplementationMode(PreviewView.ImplementationMode.COMPATIBLE);
previewView.setScaleType(PreviewView.ScaleType.FILL_CENTER);
// 将 PreviewView 添加到布局中
addContentView(previewView, new ViewGroup.LayoutParams( addContentView(previewView, new ViewGroup.LayoutParams(
ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT,
ViewGroup.LayoutParams.MATCH_PARENT)); ViewGroup.LayoutParams.MATCH_PARENT
));
// ensureVulkanLayerTransparent(); bringVulkanToFront();
// 检查权限并启动相机
if (hasCameraPermission()) { if (hasCameraPermission()) {
startCamera(); startCamera();
} else { } else {
@@ -65,6 +51,24 @@ 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 @Override
protected void onCreate(Bundle savedInstanceState) { protected void onCreate(Bundle savedInstanceState) {
String native_lib_name = getResources().getString(R.string.native_lib_name); String native_lib_name = getResources().getString(R.string.native_lib_name);
@@ -80,42 +84,8 @@ public class MainActivity extends GameActivity {
super.onCreate(savedInstanceState); super.onCreate(savedInstanceState);
initCamera(); initCamera();
Log.i("MainActivity", "onCreate: "); Log.i("MainActivity", "onCreate: ");
// 添加按钮到布局
// addButtonToLayout();
// backgroundExecutor = Executors.newSingleThreadExecutor();
// backgroundExecutor.execute(new Runnable() {
// @Override
// public void run() {
// if (faceLandmarkerHelper.isClose()) {
// faceLandmarkerHelper.setupFaceLandmarker();
// }
// }
// });
}
private void ensureVulkanLayerTransparent() {
// 延迟执行以确保 GameActivity 的视图已经创建
previewView.post(() -> {
ViewGroup rootView = (ViewGroup) getWindow().getDecorView().getRootView();
makeViewTransparent(rootView);
});
}
private void makeViewTransparent(ViewGroup viewGroup) {
for (int i = 0; i < viewGroup.getChildCount(); i++) {
View child = viewGroup.getChildAt(i);
if (child instanceof ViewGroup) {
makeViewTransparent((ViewGroup) child);
} else {
// 找到可能是 Vulkan 渲染层的视图并设置为透明
if (child.getBackground() != null) {
child.setBackgroundColor(Color.TRANSPARENT);
}
}
}
} }
private boolean hasCameraPermission() { private boolean hasCameraPermission() {
@@ -139,19 +109,15 @@ public class MainActivity extends GameActivity {
try { try {
cameraProvider = cameraProviderFuture.get(); cameraProvider = cameraProviderFuture.get();
// 创建预览用例
Preview preview = new Preview.Builder().build(); Preview preview = new Preview.Builder().build();
// 选择后置摄像头
CameraSelector cameraSelector = new CameraSelector.Builder() CameraSelector cameraSelector = new CameraSelector.Builder()
.requireLensFacing(CameraSelector.LENS_FACING_BACK) .requireLensFacing(CameraSelector.LENS_FACING_BACK)
.build(); .build();
// 将预览绑定到 PreviewView
preview.setSurfaceProvider(previewView.getSurfaceProvider()); preview.setSurfaceProvider(previewView.getSurfaceProvider());
// 绑定到生命周期 cameraProvider.bindToLifecycle(this, cameraSelector, preview);
camera = cameraProvider.bindToLifecycle(this, cameraSelector, preview);
} catch (ExecutionException | InterruptedException e) { } catch (ExecutionException | InterruptedException e) {
Log.e("MainActivity", "Error starting camera: " + e.getMessage()); Log.e("MainActivity", "Error starting camera: " + e.getMessage());
@@ -185,42 +151,5 @@ public class MainActivity extends GameActivity {
} }
} }
private void addButtonToLayout() {
// 创建按钮
Button button = new Button(this);
button.setText("Vulkan 按钮");
// 设置按钮位置(使用绝对坐标)
button.setX(50); // 距离左边50像素
button.setY(50); // 距离顶部50像素
// 设置按钮点击事件
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
onButtonClicked();
}
});
// 将按钮添加到 GameActivity 的布局中(不会覆盖 Vulkan 表面)
addContentView(button, new ViewGroup.LayoutParams(
ViewGroup.LayoutParams.WRAP_CONTENT,
ViewGroup.LayoutParams.WRAP_CONTENT
));
}
private void onButtonClicked() {
Toast.makeText(this, "Vulkan 按钮被点击了!", Toast.LENGTH_SHORT).show();
nativeButtonClicked();
// 启动SecondActivity
Intent intent = new Intent(MainActivity.this, SecondActivity.class);
// 可以传递数据
intent.putExtra("message", "Hello from MainActivity!");
startActivity(intent);
}
private native void nativeButtonClicked();
private native void sendArgumentsToPlatform(String[] args); private native void sendArgumentsToPlatform(String[] args);
} }