অ্যান্ড্রয়েড অ্যাপগুলি কেবল পোর্ট্রেট মোডে রাখা ফোনের চেয়ে বেশি ফর্ম ফ্যাক্টরে চলে। ডেস্কটপ উইন্ডো, সংযুক্ত ডিসপ্লে এবং ফোল্ডেবল ডিভাইসের প্রবর্তনের সাথে সাথে, আপনার ক্যামেরা অ্যাপটিকে গতিশীল উইন্ডো আকার, বিভিন্ন আকৃতির অনুপাত এবং বহিরাগত হার্ডওয়্যারের সাথে খাপ খাইয়ে নিতে হবে।

ফোনের যুক্তি কেন ভেঙে যায়
ক্যামেরা অ্যাপগুলি প্রায়শই এমন অনুমান করে যা মাল্টি-ফর্ম-ফ্যাক্টর পরিবেশে গুরুতর ব্যর্থতার কারণ হয়।
প্রাকৃতিক অভিযোজন
- অনুমান: ডিভাইসের স্বাভাবিক অভিযোজন
ROTATION_0সর্বদা প্রতিকৃতি থাকে - বাস্তবতা: ট্যাবলেট, কিছু ফোল্ডেবল ডিভাইসের অভ্যন্তরীণ প্রদর্শন এবং ডেস্কটপ মনিটরে,
ROTATION_0প্রায়শই ল্যান্ডস্কেপ দেখায় - ফলাফল: প্রিভিউ ভুলভাবে 90 ডিগ্রি ঘোরে

সেন্সর সারিবদ্ধকরণ
- অনুমান: ক্যামেরা সেন্সরের লম্বা প্রান্তটি স্ক্রিনের লম্বা প্রান্তের সাথে সারিবদ্ধ।
- বাস্তবতা: সেন্সর স্থির থাকাকালীন একটি আকার পরিবর্তনযোগ্য জানালা বর্গাকার বা ল্যান্ডস্কেপ হতে পারে (সাধারণত ৪:৩)
- ফলাফল: প্রসারিত বা অন্যথায় বিকৃত ছবি

স্ক্রিনের ঘনত্ব এবং আকার
- অনুমান: রানটাইমে স্ক্রিনের ঘনত্ব এবং আকার পরিবর্তন হয় না।
- বাস্তবতা: ডেস্কটপ পরিবেশে, ব্যবহারকারীরা অবাধে উইন্ডোজের আকার পরিবর্তন করতে পারেন।
- ফলাফল: প্রতিটি ড্র্যাগ ইভেন্টে ক্যামেরা সেশন পুনরায় চালু করলে ব্যবহারকারীর অভিজ্ঞতা ব্যাহত হয় এবং ক্র্যাশ হতে পারে।
সমাধান ১: সিস্টেম ইন্টেন্ট ব্যবহার করুন
যদি আপনার অ্যাপের ছবি বা ভিডিও তোলার প্রয়োজন হয় কিন্তু বিশেষ কাস্টম ক্যামেরা ইন্টারফেসের প্রয়োজন না হয়, তাহলে বিভিন্ন ফর্ম ফ্যাক্টর পরিচালনা করার সর্বোত্তম উপায় হল ডিভাইসের আগে থেকে ইনস্টল করা সিস্টেম ক্যামেরা চালু করা ( ক্যামেরা ইনটেন্ট দেখুন)।
একটি সিস্টেম ইনটেন্ট ব্যবহার করলে সম্পূর্ণ ক্যাপচার অভিজ্ঞতা ডিভাইসের মূল সরঞ্জাম প্রস্তুতকারক (OEM) দ্বারা তৈরি ক্যামেরা অ্যাপের উপর অর্পণ করা হয়। এটি কার্যকরভাবে ফর্ম ফ্যাক্টর সাপোর্টের জটিলতাকে আউটসোর্স করে , যার মধ্যে রয়েছে:
অন্তর্নির্মিত আকার পরিবর্তন এবং ঘূর্ণন সমর্থন — একটি ফোল্ডেবল বা ট্যাবলেটে ডিফল্ট ক্যামেরা অ্যাপটি নির্মাতা দ্বারা স্পষ্টভাবে তৈরি করা হয় যাতে নির্দিষ্ট ডিভাইসের জ্যামিতি পরিচালনা করা যায়। অ্যাপটি এমনভাবে ডিজাইন করা হয়েছে যাতে ডিভাইসটি খোলা, ঘোরানো বা মাল্টি-উইন্ডো মোডে রাখা হয় যখন এটি সঠিকভাবে কাজ করে।
উন্নত হার্ডওয়্যার বৈশিষ্ট্যগুলিতে অ্যাক্সেস — OEM ক্যামেরা অ্যাপগুলিতে হার্ডওয়্যার-টিউনড অ্যালগরিদমগুলিতে (নাইট মোড, HDR, নির্দিষ্ট লেন্স স্যুইচিং) এক্সক্লুসিভ অ্যাক্সেস রয়েছে যা ম্যানুয়ালি প্রতিলিপি করা কঠিন বা অসম্ভব।
সমাধান ২: জেটপ্যাক ক্যামেরাএক্স ব্যবহার করুন
ক্যামেরাএক্স হলো একটি জেটপ্যাক লাইব্রেরি যা ক্যামেরা অ্যাপ ডেভেলপমেন্টকে সহজতর করার জন্য তৈরি করা হয়েছে। ক্যামেরাএক্স জীবনচক্র সচেতন এবং পৃষ্ঠমুখী। ক্যামেরা২ এর বিপরীতে, যেখানে কোনও ডিভাইস ভাঁজ, ঘোরানো বা আকার পরিবর্তন করার সময় সেন্সর ওরিয়েন্টেশন এবং পৃষ্ঠের আকার ম্যানুয়ালভাবে পুনঃগণনা করতে হয়, ক্যামেরাএক্স মাল্টি-উইন্ডো রিসাইজিংয়ের সময় বা যখন কোনও অ্যাপ সংযুক্ত ডিসপ্লেতে চলে যায় তখন স্বয়ংক্রিয়ভাবে ক্যামেরা সেশনের পুনঃসংযোগ পরিচালনা করে, নিশ্চিত করে যে প্রিভিউ স্ট্রিমটি তোতলানো বা প্রসারিত না করেই অভিযোজিত হয়।
PreviewView মতো উপাদানগুলি বুদ্ধিমত্তার সাথে বিভিন্ন রাজ্যে আকৃতির অনুপাত এবং স্কেলের ধরণ পরিচালনা করে, যেমন কভার স্ক্রিন থেকে অভ্যন্তরীণ স্ক্রিনে একটি ভাঁজযোগ্য রূপান্তর, যা আপনাকে ডিভাইস-নির্দিষ্ট এজ কেসের জটিল সংগ্রহের পরিবর্তে একক, ধারাবাহিক বাস্তবায়নের মাধ্যমে বিভিন্ন ধরণের হার্ডওয়্যার সমর্থন করতে দেয়।
রচনা করুন
জেটপ্যাক কম্পোজের সাথে, ডেডিকেটেড androidx.camera:camera-compose লাইব্রেরি ব্যবহার করুন। লাইব্রেরিটি CameraXViewfinder কম্পোজেবল সরবরাহ করে, যা বিশেষভাবে কম্পোজ জীবনচক্রের মধ্যে আকার পরিবর্তন, ঘূর্ণন এবং আকৃতির অনুপাতের জটিল জ্যামিতি পরিচালনা করার জন্য ডিজাইন করা হয়েছে।
CameraXViewfinder কম্পোনেন্ট ক্যামেরা অ্যাপগুলিতে ত্রুটির সবচেয়ে সাধারণ উৎসগুলি দূর করে:
- স্বয়ংক্রিয় স্থানাঙ্ক রূপান্তর — ক্যামেরা অ্যাপ তৈরির সবচেয়ে কঠিন অংশগুলির মধ্যে একটি হল ফোকাস এবং মিটারিংয়ের জন্য ব্যবহারকারীর ট্যাপ (x, y অন-স্ক্রিন স্থানাঙ্ক) ক্যামেরা সেন্সরের স্থানাঙ্ক সিস্টেমে (0-1, 0-1 ঘূর্ণিত) ম্যাপ করা।
CameraXViewfinderএকটিCoordinateTransformerপ্রদান করে যা স্বয়ংক্রিয়ভাবে গণিত পরিচালনা করে, এমনকি যখন উইন্ডোটি পুনরায় আকার দেওয়া হয় বা ডিভাইসটি ভাঁজ করা হয়। - সঠিক লেআউট আচরণ —
SurfaceViewবাTextureViewবিপরীতে,CameraXViewfinderCompose এর z-ordering এর সাথে সঠিকভাবে কাজ করে। আপনি আর্টিফ্যাক্ট রেন্ডার না করেই UI উপাদানগুলি (ফোকাস রিং, নিয়ন্ত্রণ) ওভারলে করতে পারেন অথবা মডিফায়ার (গোলাকার কোণ, অ্যানিমেশন) প্রয়োগ করতে পারেন। - আকার পরিবর্তন এবং আকৃতির অনুপাত :
CameraXViewfinderঅভ্যন্তরীণভাবে সেন্টার ক্রপ বনাম ফিট সেন্টার লজিক পরিচালনা করে, নিশ্চিত করে যে অ্যাপ উইন্ডোটি অ-মানক আকৃতির অনুপাত (উদাহরণস্বরূপ, স্প্লিট-স্ক্রিন বা ডেস্কটপ উইন্ডোিং মোডে) আকার পরিবর্তন করার সময় প্রিভিউ প্রসারিত না হয়।
প্রকার
ভিউ-ভিত্তিক অ্যাপগুলিতে, PreviewView অথবা ViewFinderView ব্যবহার করুন। আপনি যদি সরাসরি SurfaceView অথবা TextureView ব্যবহার করেন, তাহলে আপনাকে অবশ্যই আকৃতির অনুপাত গণনা করতে হবে এবং সঠিক রূপান্তর ম্যাট্রিক্স নিজেই প্রয়োগ করতে হবে।
সমাধান ৩: গতিশীলভাবে ওরিয়েন্টেশন এবং আকার পরিবর্তন পরিচালনা করুন
প্ল্যাটফর্ম API গুলি সরাসরি ব্যবহার করার সময়, ডিভাইস ঘূর্ণন, কার্যকলাপ পুনরায় চালু হওয়া এবং আকৃতির অনুপাতের কথা মাথায় রাখুন।
ডিভাইস ঘূর্ণন ব্যবহার বন্ধ করুন
আপনার UI লেআউট নির্ধারণের জন্য শুধুমাত্র Display#getRotation() বা ফিজিক্যাল সেন্সর ওরিয়েন্টেশনের উপর নির্ভর করবেন না।
- উইন্ডো মেট্রিক্স ব্যবহার করুন —
WindowManager#getCurrentWindowMetrics()ব্যবহার করে আপনার অ্যাপ উইন্ডোর প্রস্থ এবং উচ্চতা তুলনা করে আপনার লেআউট (ল্যান্ডস্কেপ বনাম পোর্ট্রেট UI) নির্ধারণ করুন। - প্রাকৃতিক ওরিয়েন্টেশন উপেক্ষা করুন — আপনার অ্যাপটি ল্যান্ডস্কেপ মনিটরের একটি পোর্ট্রেট-আকৃতির উইন্ডোতে থাকতে পারে। ডিভাইস ওরিয়েন্টেশন আপনার UI সীমানার সাথে অপ্রাসঙ্গিক।
কার্যকলাপ পুনরায় শুরু করা এড়িয়ে চলুন
কনফিগারেশন পরিবর্তনের সময় (যেমন উইন্ডো রিসাইজিং) ডিফল্ট অ্যান্ড্রয়েড আচরণ আপনার অ্যাপের কার্যকলাপ নষ্ট করে দেয়। ক্যামেরা অ্যাপের ক্ষেত্রে, এটি ভিডিও কলের সময় ডিসপ্লে ফ্লিকার বা সংযোগ বিচ্ছিন্ন হয়ে যাওয়ার মতো দেখা যায়।
- ম্যানিফেস্ট কনফিগারেশন — পুনরায় চালু না করেই আকার পরিবর্তন করার জন্য আপনার ম্যানিফেস্টে কনফিগারেশন পরিবর্তনগুলি ঘোষণা করুন।
- ডায়নামিক আপডেট —
onConfigurationChanged()এ, নতুন উইন্ডোর আকারের সাথে মেলে আপনার ক্যামেরা প্রিভিউয়ের লেআউট প্যারামিটার আপডেট করুন।
আকৃতির অনুপাত এবং ক্রপিং
ফোল্ডেবল এবং ডেস্কটপ উইন্ডোতে একটি সাধারণ সমস্যা হল প্রিভিউ স্ট্রেচিং , যেখানে 4:3 ক্যামেরা ফিডকে 16:9 বা 1:1 উইন্ডোতে জোর করে ঢোকানো হয়।
- প্রসারিত করবেন না — প্রিভিউ এবং উইন্ডোর আকৃতির অনুপাত ভিন্ন হলে ক্যামেরা বাফারকে কখনই ভিউ বাউন্ডের সাথে ঠিক মেলাতে বাধ্য করবেন না।
- সেন্টার ক্রপ (প্রস্তাবিত): উইন্ডোর সবচেয়ে ছোট মাত্রা পূরণ করার জন্য প্রিভিউ স্কেল করুন এবং অতিরিক্তটি ক্রপ করুন। এটি নিশ্চিত করে যে সাবজেক্টটি বিকৃত না থাকে এবং ফ্রেমটি পূরণ করে।
- ফিট সেন্টার (বিকল্প): যদি সম্পূর্ণ ভিউ ফিল্ড প্রদর্শন করা গুরুত্বপূর্ণ হয় (উদাহরণস্বরূপ, একটি ডকুমেন্ট স্ক্যান করা), তাহলে উইন্ডোর ভিতরে প্রিভিউ লেটারবক্স করুন।
- ফিট সেন্টার (বিকল্প): যদি সম্পূর্ণ ভিউ ফিল্ড প্রদর্শন করা গুরুত্বপূর্ণ হয় (উদাহরণস্বরূপ, একটি ডকুমেন্ট স্ক্যান করা), তাহলে উইন্ডোর ভিতরে প্রিভিউ লেটারবক্স করুন।
বোনাস: ভাঁজযোগ্য-প্রথম অভিজ্ঞতার জন্য সমর্থন
ভাঁজযোগ্য ডিভাইসগুলি কেবল বাঁকানো ফোন নয়, এগুলি অনন্য হার্ডওয়্যার অবস্থা প্রদান করে যা ব্যবহারকারীদের ছবি এবং ভিডিও তোলার পদ্ধতিকে মৌলিকভাবে উন্নত করতে পারে। ভাঁজকে সমাধানের সমস্যা হিসাবে বিবেচনা করার পরিবর্তে, এটি এমন বৈশিষ্ট্য তৈরি করতে ব্যবহার করুন যা ভাঁজযোগ্য নয় এমন ডিভাইসগুলিতে অসম্ভব।
ট্যাবলেটপ মোড (হ্যান্ডস-ফ্রি ক্যাপচার)
ট্যাবলেটপ মোড ব্যবহারকারীদের ডিভাইসটিকে অর্ধেক ভাঁজ করে একটি পৃষ্ঠের উপর স্থাপন করার অনুমতি দেয় যাতে বর্ধিত ভিডিও কল, টাইম-ল্যাপস ফটোগ্রাফি এবং দীর্ঘ-এক্সপোজার নাইট ফটোগ্রাফি করা যায়।

রিয়ার-ডিসপ্লে মোড (উচ্চ মানের সেলফি)
- ফোল্ডেবল ডিভাইসে, রিয়ার ক্যামেরাগুলি সাধারণত ব্যবহারকারী-মুখী ক্যামেরার তুলনায় উচ্চ মানের হয়। রিয়ার ডিসপ্লে মোড ব্যবহারকারীকে ডিভাইসটি খোলার এবং এটি ঘুরানোর অনুমতি দেয়, প্রধান রিয়ার ক্যামেরার জন্য ছোট কভার স্ক্রিনটিকে লাইভ ভিউফাইন্ডার হিসাবে ব্যবহার করে।
- রিয়ার-ডিসপ্লে মোড অতিরিক্ত সরঞ্জাম ছাড়াই ৫০ এমপি+ সেলফি, আল্ট্রা-ওয়াইড গ্রুপ শট এবং উচ্চমানের ভ্লগিং সক্ষম করে।
ডুয়াল-স্ক্রিন মোড (বিষয় প্রিভিউ)
- ডুয়াল-স্ক্রিন মোড আপনাকে ক্যামেরার প্রিভিউ একই সাথে ভেতরের এবং বাইরের উভয় স্ক্রিনেই দেখাতে দেয়। এটি মানুষের ছবি তোলার জন্য উপযুক্ত: ছবির বিষয়বস্তু বাইরের স্ক্রিনে নিজেদের দেখতে পারে এবং ভেতরের স্ক্রিনে শট ফ্রেম করার সময় তাদের ভঙ্গি সামঞ্জস্য করতে পারে।
- রিয়ার-ডিসপ্লে মোডের (যা পুরো অ্যাপটিকে স্থানান্তর করে) বিপরীতে, ডুয়াল-স্ক্রিন মোড কভার স্ক্রিনে একটি সেকেন্ডারি প্রেজেন্টেশন উইন্ডো তৈরি করে।
