Android में SurfaceView को ट्रांसपेरेंट बनाना
यह ट्यूटोरियल दिखाता है कि कैसे SurfaceView को पारदर्शी बनाया जाता है ताकि उसके पीछे के UI एलिमेंट्स दिखाई दें - कैमरा प्रीव्यू, गेम ओवरले, या AR ऐप्स के लिए उपयोगी।
चरण 1: प्रोजेक्ट बनाएं
Android Studio में नया प्रोजेक्ट बनाएं।
चरण 2: लेआउट में SurfaceView और ओवरले
res/layout/activity_main.xml - RelativeLayout में SurfaceView के ऊपर ImageView:
<?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
android:id="@+id/cameraSurface"
android:layout_width="match_parent"
android:layout_height="match_parent" />
<ImageView
android:id="@+id/IV_MASK"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerInParent="true"
android:src="@drawable/mask"
android:background="@android:color/transparent" />
</RelativeLayout>
चरण 3: SurfaceView को पारदर्शी बनाने का Java कोड
src/MainActivity.java - SurfaceHolder.Callback इम्प्लीमेंट करें:
package com.app.sample;
import androidx.appcompat.app.AppCompatActivity;
import android.graphics.PixelFormat;
import android.os.Bundle;
import android.view.SurfaceHolder;
import android.view.SurfaceView;
public class MainActivity extends AppCompatActivity implements SurfaceHolder.Callback {
private SurfaceView surfaceView;
private SurfaceHolder surfaceHolder;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
surfaceView = findViewById(R.id.cameraSurface);
surfaceHolder = surfaceView.getHolder();
surfaceHolder.addCallback(this);
// महत्वपूर्ण: पारदर्शिता के लिए फॉर्मेट सेट करें
surfaceHolder.setFormat(PixelFormat.TRANSPARENT);
// Z-order सेट करें ताकि SurfaceView पीछे रहे
surfaceView.setZOrderOnTop(false);
surfaceView.setZOrderMediaOverlay(true);
}
@Override
public void surfaceCreated(SurfaceHolder holder) {
// Surface बनने पर कैमरा/रेंडरिंग शुरू करें
// holder.setFormat(PixelFormat.TRANSPARENT); // यहां भी सेट कर सकते हैं
}
@Override
public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) {
// साइज बदलने पर हैंडल करें
}
@Override
public void surfaceDestroyed(SurfaceHolder holder) {
// क्लीनअप करें
}
}
महत्वपूर्ण सेटिंग्स समझाए गए
| मेथड | उद्देश्य |
|---|---|
| setFormat(PixelFormat.TRANSPARENT) | पिक्सेल फॉर्मेट को पारदर्शी बनाता है (ARGB_8888) |
| setZOrderOnTop(false) | SurfaceView को विंडो के पीछे रखता है |
| setZOrderMediaOverlay(true) | मीडिया ओवरले मोड इनेबल करता है |