From 2c6ff1a17b3b0f155951a24b416d4e440637abbf Mon Sep 17 00:00:00 2001 From: liuguijing <123456> Date: Sun, 16 Feb 2025 18:44:57 +0800 Subject: [PATCH] =?UTF-8?q?=E9=80=9A=E9=81=93=E5=8F=B7=E6=A0=B9=E6=8D=AE?= =?UTF-8?q?=E8=AE=BE=E5=A4=87=E9=80=9A=E9=81=93=E6=9D=A5=E8=87=AA=E5=8A=A8?= =?UTF-8?q?=E7=94=9F=E6=88=90=E8=B0=83=E6=95=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/src/main/AndroidManifest.xml | 4 +- .../xypower/mppreview/Camera2RawFragment.java | 4 +- .../com/xypower/mppreview/MainActivity.java | 91 +++++++++++----- .../mppreview/adapter/ItemAdapter.java | 69 ++++++++++++ .../interfaces/OnItemClickListener.java | 8 ++ .../mppreview/{ => ui}/CameraActivity.java | 10 +- .../{ => ui}/CameraChannelActivity.java | 9 +- .../xypower/mppreview/utils/CameraUtils.java | 28 +++++ .../mppreview/{ => utils}/HdrUtil.java | 2 +- .../mppreview/{ => utils}/PhotoUtil.java | 2 +- app/src/main/res/layout/activity_camera.xml | 2 +- .../res/layout/activity_camera_channel.xml | 29 +++-- app/src/main/res/layout/activity_main.xml | 101 ++++++++++-------- app/src/main/res/layout/item_view.xml | 13 +++ 14 files changed, 268 insertions(+), 104 deletions(-) create mode 100644 app/src/main/java/com/xypower/mppreview/adapter/ItemAdapter.java create mode 100644 app/src/main/java/com/xypower/mppreview/interfaces/OnItemClickListener.java rename app/src/main/java/com/xypower/mppreview/{ => ui}/CameraActivity.java (85%) rename app/src/main/java/com/xypower/mppreview/{ => ui}/CameraChannelActivity.java (96%) create mode 100644 app/src/main/java/com/xypower/mppreview/utils/CameraUtils.java rename app/src/main/java/com/xypower/mppreview/{ => utils}/HdrUtil.java (90%) rename app/src/main/java/com/xypower/mppreview/{ => utils}/PhotoUtil.java (99%) create mode 100644 app/src/main/res/layout/item_view.xml diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index b88ee58..b26650d 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -22,10 +22,10 @@ android:requestLegacyExternalStorage="true" tools:targetApi="30"> photoResultLauncher; private int picsize = 0; private com.xypower.mppreview.databinding.ActivityMainBinding viewBinding; + private int numberOfCameras; protected native void test(); @@ -43,7 +56,7 @@ public class MainActivity extends AppCompatActivity implements View.OnClickListe @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); - viewBinding = ActivityMainBinding.inflate(getLayoutInflater()); + viewBinding = com.xypower.mppreview.databinding.ActivityMainBinding.inflate(getLayoutInflater()); setContentView(viewBinding.getRoot()); initView(); initActivityResult(); @@ -85,12 +98,19 @@ public class MainActivity extends AppCompatActivity implements View.OnClickListe viewBinding.hdrtakepic.setOnClickListener(this); viewBinding.systakepic.setOnClickListener(this); viewBinding.spinner.setOnItemSelectedListener(this); - viewBinding.channel1.setOnClickListener(this); - viewBinding.channel2.setOnClickListener(this); - viewBinding.channel3.setOnClickListener(this); - viewBinding.channel4.setOnClickListener(this); - viewBinding.channel5.setOnClickListener(this); - viewBinding.channel6.setOnClickListener(this); +// viewBinding.channel1.setOnClickListener(this); +// viewBinding.channel2.setOnClickListener(this); +// viewBinding.channel3.setOnClickListener(this); +// viewBinding.channel4.setOnClickListener(this); +// viewBinding.channel5.setOnClickListener(this); +// viewBinding.channel6.setOnClickListener(this); + numberOfCameras = CameraUtils.getNumberOfCameras(this); + ItemAdapter itemAdapter = new ItemAdapter(numberOfCameras); + itemAdapter.setOnClickListener(this); + viewBinding.recyclerView.setAdapter(itemAdapter); + viewBinding.recyclerView.setLayoutManager(new GridLayoutManager(this,3)); + + } private void initActivityResult() { @@ -138,28 +158,40 @@ public class MainActivity extends AppCompatActivity implements View.OnClickListe case R.id.systakepic: PhotoUtil.openCamera(this, photoResultLauncher); break; - case R.id.channel1: - openChannelActivity(0); - break; - case R.id.channel2: - openChannelActivity(1); - break; - case R.id.channel3: - openChannelActivity(2); - break; - case R.id.channel4: - openChannelActivity(3); - break; - case R.id.channel5: - openChannelActivity(4); - break; - case R.id.channel6: - openChannelActivity(5); - break; +// case R.id.channel1: +// openChannelActivity(0); +// break; +// case R.id.channel2: +// openChannelActivity(1); +// break; +// case R.id.channel3: +// openChannelActivity(2); +// break; +// case R.id.channel4: +// openChannelActivity(3); +// break; +// case R.id.channel5: +// openChannelActivity(4); +// break; +// case R.id.channel6: +// openChannelActivity(5); +// break; } } + + public static int getNumberOfCameras(Context context) { + CameraManager manager = (CameraManager) context.getSystemService(Context.CAMERA_SERVICE); + try { + String[] cameraIds = manager.getCameraIdList(); + return cameraIds.length; + } catch (CameraAccessException e) { + e.printStackTrace(); + return 0; // 如果发生异常,返回0个摄像头 + } + } + public void openChannelActivity(int channel) { Intent intent = new Intent(this, CameraChannelActivity.class); intent.putExtra(Contants.CAMERAID, channel); @@ -176,4 +208,9 @@ public class MainActivity extends AppCompatActivity implements View.OnClickListe public void onNothingSelected(AdapterView parent) { } + + @Override + public void onItemClick(View v, int position) { + openChannelActivity(position); + } } \ No newline at end of file diff --git a/app/src/main/java/com/xypower/mppreview/adapter/ItemAdapter.java b/app/src/main/java/com/xypower/mppreview/adapter/ItemAdapter.java new file mode 100644 index 0000000..b6e1129 --- /dev/null +++ b/app/src/main/java/com/xypower/mppreview/adapter/ItemAdapter.java @@ -0,0 +1,69 @@ +package com.xypower.mppreview.adapter; + +import android.annotation.SuppressLint; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.TextView; +import androidx.annotation.NonNull; +import androidx.recyclerview.widget.RecyclerView; + +import com.xypower.mppreview.R; +import com.xypower.mppreview.interfaces.OnItemClickListener; + +import java.util.List; + + +public class ItemAdapter extends RecyclerView.Adapter { + private Integer count; + public OnItemClickListener listener; + + public class MyViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener { + private final TextView title; + private OnItemClickListener listeners; + public MyViewHolder(View view, OnItemClickListener listener) { + super(view); + this.listeners = listener; + title = view.findViewById(R.id.channel); + title.setOnClickListener(this); + } + + public TextView getTitle() { + return title; + } + + @Override + public void onClick(View v) { + if (listeners != null) { + listeners.onItemClick(v, getAdapterPosition()); + } + } + } + + public ItemAdapter(Integer itemcount) { + this.count = itemcount; + } + + + public void setOnClickListener(OnItemClickListener listener) { + this.listener = listener; + + } + @NonNull + @Override + public MyViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { + View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_view, parent, false); + return new MyViewHolder(view,listener); + } + + @Override + public void onBindViewHolder(@NonNull MyViewHolder holder, @SuppressLint("RecyclerView") int position) { +// Integer item = itemList.get(position); + holder.getTitle().setText("通道"+(position+1)); + } + + @Override + public int getItemCount() { + return count; + } +} \ No newline at end of file diff --git a/app/src/main/java/com/xypower/mppreview/interfaces/OnItemClickListener.java b/app/src/main/java/com/xypower/mppreview/interfaces/OnItemClickListener.java new file mode 100644 index 0000000..58f18de --- /dev/null +++ b/app/src/main/java/com/xypower/mppreview/interfaces/OnItemClickListener.java @@ -0,0 +1,8 @@ +package com.xypower.mppreview.interfaces; + +import android.view.View; + +public interface OnItemClickListener { + void onItemClick(View v, int position); +} + diff --git a/app/src/main/java/com/xypower/mppreview/CameraActivity.java b/app/src/main/java/com/xypower/mppreview/ui/CameraActivity.java similarity index 85% rename from app/src/main/java/com/xypower/mppreview/CameraActivity.java rename to app/src/main/java/com/xypower/mppreview/ui/CameraActivity.java index 46f2c23..3cf580d 100644 --- a/app/src/main/java/com/xypower/mppreview/CameraActivity.java +++ b/app/src/main/java/com/xypower/mppreview/ui/CameraActivity.java @@ -1,19 +1,15 @@ -package com.xypower.mppreview; +package com.xypower.mppreview.ui; import androidx.appcompat.app.AppCompatActivity; -import android.content.ComponentCallbacks2; -import android.content.Context; import android.content.Intent; -import android.os.Build; import android.os.Bundle; import android.util.Log; -import android.view.View; import android.view.Window; -import android.view.WindowInsets; -import android.view.WindowInsetsController; import android.view.WindowManager; +import com.xypower.mppreview.Camera2RawFragment; +import com.xypower.mppreview.R; import com.xypower.mppreview.bean.Contants; public class CameraActivity extends AppCompatActivity { diff --git a/app/src/main/java/com/xypower/mppreview/CameraChannelActivity.java b/app/src/main/java/com/xypower/mppreview/ui/CameraChannelActivity.java similarity index 96% rename from app/src/main/java/com/xypower/mppreview/CameraChannelActivity.java rename to app/src/main/java/com/xypower/mppreview/ui/CameraChannelActivity.java index bad403d..d630259 100644 --- a/app/src/main/java/com/xypower/mppreview/CameraChannelActivity.java +++ b/app/src/main/java/com/xypower/mppreview/ui/CameraChannelActivity.java @@ -1,6 +1,4 @@ -package com.xypower.mppreview; - -import static android.os.Environment.getExternalStoragePublicDirectory; +package com.xypower.mppreview.ui; import androidx.annotation.NonNull; import androidx.appcompat.app.AppCompatActivity; @@ -16,19 +14,18 @@ import androidx.core.content.ContextCompat; import android.net.Uri; import android.os.Bundle; -import android.os.Environment; import android.util.Log; import android.view.View; import android.widget.Toast; import com.google.common.util.concurrent.ListenableFuture; +import com.xypower.mppreview.MyAnalyzer; +import com.xypower.mppreview.R; import com.xypower.mppreview.bean.Contants; import com.xypower.mppreview.databinding.ActivityCameraChannelBinding; import java.io.File; -import java.io.IOException; import java.text.SimpleDateFormat; -import java.util.Date; import java.util.List; import java.util.Locale; import java.util.concurrent.ExecutorService; diff --git a/app/src/main/java/com/xypower/mppreview/utils/CameraUtils.java b/app/src/main/java/com/xypower/mppreview/utils/CameraUtils.java new file mode 100644 index 0000000..1fb2e24 --- /dev/null +++ b/app/src/main/java/com/xypower/mppreview/utils/CameraUtils.java @@ -0,0 +1,28 @@ +package com.xypower.mppreview.utils; + +import android.content.Context; + +import androidx.camera.core.CameraInfo; +import androidx.camera.lifecycle.ProcessCameraProvider; + +import com.google.common.util.concurrent.ListenableFuture; + +import java.util.List; +import java.util.concurrent.ExecutionException; + +public class CameraUtils { + public static int getNumberOfCameras(Context context) { + List availableCameraInfos; + ListenableFuture instance = ProcessCameraProvider.getInstance(context); + try { + ProcessCameraProvider processCameraProvider = instance.get(); + availableCameraInfos = processCameraProvider.getAvailableCameraInfos(); + } catch (ExecutionException e) { + throw new RuntimeException(e); + } catch (InterruptedException e) { + throw new RuntimeException(e); + } + return availableCameraInfos.size(); + } + +} \ No newline at end of file diff --git a/app/src/main/java/com/xypower/mppreview/HdrUtil.java b/app/src/main/java/com/xypower/mppreview/utils/HdrUtil.java similarity index 90% rename from app/src/main/java/com/xypower/mppreview/HdrUtil.java rename to app/src/main/java/com/xypower/mppreview/utils/HdrUtil.java index f769687..05ba556 100644 --- a/app/src/main/java/com/xypower/mppreview/HdrUtil.java +++ b/app/src/main/java/com/xypower/mppreview/utils/HdrUtil.java @@ -1,4 +1,4 @@ -package com.xypower.mppreview; +package com.xypower.mppreview.utils; import static java.lang.System.loadLibrary; diff --git a/app/src/main/java/com/xypower/mppreview/PhotoUtil.java b/app/src/main/java/com/xypower/mppreview/utils/PhotoUtil.java similarity index 99% rename from app/src/main/java/com/xypower/mppreview/PhotoUtil.java rename to app/src/main/java/com/xypower/mppreview/utils/PhotoUtil.java index 0ad39f4..2c5c34c 100644 --- a/app/src/main/java/com/xypower/mppreview/PhotoUtil.java +++ b/app/src/main/java/com/xypower/mppreview/utils/PhotoUtil.java @@ -1,4 +1,4 @@ -package com.xypower.mppreview; +package com.xypower.mppreview.utils; import android.content.Context; diff --git a/app/src/main/res/layout/activity_camera.xml b/app/src/main/res/layout/activity_camera.xml index 4ec324e..46f13df 100644 --- a/app/src/main/res/layout/activity_camera.xml +++ b/app/src/main/res/layout/activity_camera.xml @@ -5,7 +5,7 @@ android:layout_width="match_parent" android:layout_height="match_parent" android:keepScreenOn="true" - tools:context=".CameraActivity"> + tools:context=".ui.CameraActivity"> + tools:context=".ui.CameraChannelActivity"> + + + + + + + + + + +