SurfaceView-এর ব্যাকগ্রাউন্ড ট্রান্সপারেন্ট করা
এই উদাহরণটি দেখায় কীভাবে SurfaceView-এর পেছনে অন্য ভিউ (যেমন ImageView) দেখাতে ব্যাকগ্রাউন্ড ট্রান্সপারেন্ট রাখা যায়।
ধাপ ১: প্রজেক্ট তৈরি করুন
Android Studio-তে নতুন প্রজেক্ট।
ধাপ ২: লেআউট (activity_main.xml) - RelativeLayout ব্যবহার করুন
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="https://schemas.android.com/apk/res/android"
xmlns:app="https://schemas.android.com/apk/res-auto"
xmlns:tools="https://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">
<!-- SurfaceView নিচে থাকবে -->
<SurfaceView
android:id="@+id/cameraSurface"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
<!-- ImageView উপরে থাকবে (মাস্ক/ওভারলে) -->
<ImageView
android:id="@+id/IV_MASK"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/mask"
android:background="@android:color/transparent"/>
</RelativeLayout>
ধাপ ৩: MainActivity.java
package com.app.sample;
import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// SurfaceView ট্রান্সপারেন্ট করতে SurfaceHolder.Callback ব্যবহার করুন
SurfaceView surfaceView = findViewById(R.id.cameraSurface);
surfaceView.getHolder().setFormat(PixelFormat.TRANSPARENT);
surfaceView.setZOrderOnTop(false); // নিচে রাখুন
}
}
গুরুত্বপূর্ণ: SurfaceView ট্রান্সপারেন্ট করার মূল কী
SurfaceView surfaceView = findViewById(R.id.cameraSurface);
SurfaceHolder holder = surfaceView.getHolder();
// ১. পিক্সেল ফরম্যাট ট্রান্সপারেন্ট সেট করুন
holder.setFormat(PixelFormat.TRANSPARENT);
// ২. Z-অর্ডার নিয়ন্ত্রণ করুন
surfaceView.setZOrderOnTop(false); // false = নিচে, true = উপরে
// ৩. ক্যানভাস ড্র করার সময় ট্রান্সপারেন্ট ব্যাকগ্রাউন্ড
Canvas canvas = holder.lockCanvas();
if (canvas != null) {
canvas.drawColor(Color.TRANSPARENT, PorterDuff.Mode.CLEAR);
// আপনার ড্রইং কোড এখানে
holder.unlockCanvasAndPost(canvas);
}
ধাপ ৪: ম্যানিফেস্ট
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="https://schemas.android.com/apk/res/android"
package="com.app.sample">
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<activity android:name=".MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
</manifest>
TextureView বিকল্প (আধুনিক)
SurfaceView-এর পরিবর্তে TextureView ব্যবহার করা সহজ এবং linh hoạt:
<TextureView
android:id="@+id/textureView"
android:layout_width="match_parent"
android:layout_height="match_parent" />
// জাভাতে
TextureView textureView = findViewById(R.id.textureView);
textureView.setAlpha(0.5f); // আংশিক ট্রান্সপারেন্সি
textureView.setRotation(90); // রোটেশন সহজে
সাম্প্রতিক সমস্যা সমাধান
- SurfaceView হলো উইন্ডো-লেভেল ভিউ, সাধারণ ViewGroup-এর সাথে মিশ্রণ কঠিন
- TextureView সাধারণ View, তাই অ্যানিমেশন, রোটেশন, আলফা সহজ
- ক্যামেরা প্রিভিউর জন্য CameraX লাইব্রেরি ব্যবহার করুন (জটিলতা কমায়)