وبلاگ توسعه دهندگان اندروید: معرفی نمایاب دوربین



ارسال شده توسط فران،کو رومانو، مهندس روابط توسعه‌دهنده، اندرویددست در دست گرفتن گوشیدر طول سال‌ها، دستگاه‌های اندرویدی به گونه‌ای تکامل یافته‌اند که اندازه‌ها، شکل‌ها و نمایشگرهای مختلف را در میان سایر ویژگی‌ها شامل می‌شوند. با این حال، از ابتدا، ع، گرفتن با گوشی یکی از مهم ترین موارد استفاده بوده است. امروزه، قابلیت‌های دوربین هنوز یکی از دلایل اصلی ،ید گوشی توسط مصرف‌کنندگان است.

به ،وان یک توسعه‌دهنده، می‌خواهید از قابلیت‌های دوربین در برنامه خود استفاده کنید، بنابراین تصمیم می‌گیرید چارچوب دوربین Android را اتخاذ کنید. اولین مورد استفاده ای که می خواهید پیاده سازی کنید این است پیش نمایش use case که ،وجی سنسور دوربین را روی صفحه نمایش می دهد.

بنابراین شما پیش بروید و یک را ایجاد کنید CaptureSession با استفاده از سطحی به بزرگی اندازه صفحه نمایش تا زم، که صفحه نمایش همان نسبت تصویر ،وجی سنسور دوربین را داشته باشد و دستگاه در جهت پرتره طبیعی خود باقی بماند، همه چیز باید خوب باشد.

اما وقتی اندازه پنجره را تغییر می‌دهید، دستگاه خود را باز می‌کنید یا نمایشگر یا جهت را تغییر می‌دهید، چه اتفاقی می‌افتد؟ خب، در بیشتر موارد، پیش‌نمایش ممکن است کشیده، وارونه یا به‌درستی چرخیده به نظر برسد. و اگر در یک محیط چند پنجره ای هستید، برنامه شما حتی ممکن است از کار بیفتد.

چرا این اتفاق می افتد؟ به دلیل مفروضات ضمنی که هنگام ایجاد آن انجام دادید CaptureSession.

از لحاظ تاریخی، برنامه شما می‌توانست برای کل چرخه عمر خود در یک پنجره زندگی کند، اما با در دسترس بودن عوامل شکل جدید مانند دستگاه‌های تاشو و حالت‌های نمایش جدید مانند چند پنجره‌ای و چند صفحه‌نمایش، نمی‌تو،د این را فرض کنید. دیگر درست باشد

به طور خاص، بیایید برخی از مهم ترین ملاحظات را در هنگام توسعه یک برنامه با هدف قرار دادن عوامل مختلف شکل ببینیم:

بیایید برخی از دام‌های رایج را که باید هنگام توسعه برنامه‌ای که فاکتورهای شکلی مختلف را هدف قرار می‌دهد، اجتناب کنیم، بررسی کنیم:

  • تصور نکنید که برنامه شما در یک پنجره پرتره شکل زندگی می کند. درخواست جهت گیری ثابت هنوز در اندروید 13 پشتیب، می شود، اما اکنون سازندگان دستگاه ممکن است این گزینه را داشته باشند که درخواست برنامه را برای یک جهت ترجیحی لغو کنند.
  • هیچ ابعاد یا نسبت تصویر ثابتی برای برنامه خود در نظر نگیرید. حتی اگر تنظیم کنید resizableActivity = “نادرست”، برنامه شما همچنان می تواند در حالت چند پنجره ای در صفحه نمایش های بزرگ (>=600dp) استفاده شود.
  • یک رابطه ثابت بین جهت صفحه و دوربین را فرض نکنید. را سند تعریف سازگاری اندروید مشخص می کند که یک حسگر تصویر دوربین “باید به گونه ای جهت گیری شود که بعد طول، دوربین با بعد طول، صفحه نمایش همسو شود.” با شروع API سطح 32، کلاینت‌های دوربینی که جهت را در دستگاه‌های تاشو جستجو می‌کنند، می‌توانند مقداری را دریافت کنند که بسته به وضعیت دستگاه/تاشو به صورت پویا تغییر می‌کند.
  • تصور نکنید که اندازه داخل نمی تواند تغییر کند. نوار وظیفه جدید به ،وان یک ورودی به برنامه‌ها گزارش می‌شود، و هنگامی که با حرکت حرکتی استفاده می‌شود، نوار وظیفه می‌تواند پنهان و به صورت پویا نشان داده شود.
  • تصور نکنید برنامه شما دسترسی انحصاری به دوربین دارد. در حالی که برنامه شما در حالت چند پنجره ای است، سایر برنامه ها می توانند به منابع مش، مانند دوربین و میکروفون دسترسی داشته باشند.

در حالی که CameraX در حال حاضر ا،ر موارد فوق را مدیریت می کند، پیاده سازی یک پیش نمایش که در سناریوهای مختلف با Camera2 API کار می کند، می تواند پیچیده باشد، همانطور که در شرح داده شده است. از سطوح قابل تغییر اندازه در برنامه دوربین خود Codelab پشتیب، کنید.

آیا داشتن یک جزء ساده که از آن جزئیات مراقبت می کند و به شما امکان می دهد روی منطق برنامه خاص خود تمرکز کنید عالی نیست؟

دیگه نگو…

معرفی ، CameraViewfinder

CameraViewfinder یک مصنوع جدید از کتابخانه Jetpack است که به شما امکان می دهد به سرعت پیش نمایش های دوربین را با حداقل تلاش پیاده سازی کنید. در داخل از a استفاده می کند TextureView یا SurfaceView برای نمایش فید دوربین، و تغییرات لازم را روی آنها اعمال می کند تا منظره یاب را به درستی نمایش دهد. این شامل اصلاح نسبت ابعاد، مقیاس و چرخش آنها است. کاملاً با پایگاه کد Camera2 موجود شما سازگار است و به طور مداوم بر روی چندین دستگاه آزمایش می شود.

بیایید ببینیم چگونه از آن استفاده کنیم.

ابتدا وابستگی را در سطح برنامه خود اضافه کنید build.gradle فایل:

پیاده سازیandroidx.دوربین:camera-viewfinder:1.3.0-alpha01″

پروژه خود را همگام سازی کنید اکنون باید بتو،د مستقیماً از آن استفاده کنید CameraViewfinder مانند هر دیگری چشم انداز. به ،وان مثال، می تو،د آن را به فایل طرح بندی خود اضافه کنید:


اندروید:شناسه=“@+id/view_finder”
برنامه:scaleType=“fitCenter”
برنامه:حالت پیاده سازی=“کارایی”
اندروید:layout_width=“match_parent”
اندروید:layout_height=“match_parent”/>

همانطور که می بینید، CameraViewfinder همان کنترل های موجود را دارد پیش نمایش، بنابراین می تو،د متفاوت را انتخاب کنید حالت های پیاده سازی و انواع پوسته پوسته شدن.

اکنون که کامپوننت بخشی از طرح است، همچنان می تو،د a ایجاد کنید CameraCaptureSession، اما به جای ارائه الف TextureView یا SurfaceView به ،وان سطوح هدف، از نتیجه استفاده کنید requestSurfaceAsync().

سرگرم کننده شروع دوربین(){
val previewResolution = اندازه (عرض، ارتفاع)
val viewfinderSurfaceRequest =
ViewfinderSurfaceRequest (رزولوشن پیش نمایش، مشخصات)
val surfaceListenableFuture =
cameraViewfinder.requestSurfaceAsync(viewfinderSurfaceRequest)

Futures.addCallback(surfaceListenableFuture، شی : FutureCallback {
نادیده گرفتن سرگرمی در موفقیت(سطح: سطح) {
//یک CaptureSession با استفاده از این سطح به طور معمول ایجاد کنید
}
نادیده گرفتن سرگرمی در مورد ش،ت(t: قابل پرتاب) { /* مشکلی پیش آمد */}
}، ContextCompat.getMainExecutor(context))
}

امتیاز: طرح‌بندی‌های بهینه‌شده برای دستگاه‌های تاشو

CameraViewFinder در سطوح قابل تغییر اندازه، تغییرات پیکربندی، چرخش ها و حالت های چند پنجره ای آماده استفاده است و روی بسیاری از دستگاه های تاشو آزمایش شده است.

اما اگر می‌خواهید طرح‌بندی‌های بهینه‌شده را برای دستگاه‌های تاشو و صفحه‌نمایش دوگانه پیاده‌سازی کنید، می‌تو،د ،یب کنید CameraViewFinder با Jetpack WindowManager کتابخانه ای برای ارائه تجربیات منحصر به فرد برای کاربران خود.

به ،وان مثال، اگر یک لولا در وسط صفحه وجود دارد یا اگر دستگاه در حالت «کتاب» یا «تبلتاپ» است، می‌تو،د از نمایش پیش‌نمایش تمام صفحه اجتناب کنید. در این سناریوها، می‌تو،د منظره یاب را در یک ،مت از صفحه و کنترل‌ها را در سمت دیگر داشته باشید، یا می‌تو،د از بخشی از صفحه برای نمایش آ،ین ع،‌های گرفته شده استفاده کنید. تخیل حد است!

برنامه نمونه قبلاً برای دستگاه‌های تاشو بهینه شده است و می‌تو،د کدی را برای مدیریت تغییرات وضعیت بدن پیدا کنید اینجا. نگاهی بینداز


منبع: http://android-developers.googleblog.com/2022/11/introducing-camera-viewfinder.html