কম্পিউটার টিউটোরিয়াল

অ্যান্ড্রয়েডে প্রোগ্রামেটিক্যালি স্ক্রিনশট নেওয়া

প্রোগ্রামেটিক্যালি স্ক্রিনশট নেওয়া

এই উদাহরণে একটি ভিউ (View) এর বিটম্যাপ তৈরি করে সেটিকে ইমেজভিউতে দেখানো দেখানো হয়েছে।

উদাহরণ

ধাপ ১: নতুন প্রজেক্ট তৈরি করুন

ধাপ ২: লেআউট XML (res/layout/activity_main.xml)

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="https://schemas.android.com/apk/res/android"
    android:id="@+id/parent"
    xmlns:tools="https://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity"
    android:background="#33FFFF00"
    android:orientation="vertical">
    <ImageView
        android:id="@+id/screenShot"
        android:layout_width="300dp"
        android:layout_height="300dp" />
    <TextView
        android:id="@+id/text"
        android:textSize="18sp"
        android:layout_gravity="center"
        android:text="Click"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" />
</LinearLayout>

ধাপ ৩: জাভা কোড (src/MainActivity.java)

package com.example.andy.myapplication;

import android.graphics.Bitmap;
import android.graphics.Canvas;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.TextView;

public class MainActivity extends AppCompatActivity {
    ImageView screenShot;
    TextView textView;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        final LinearLayout parent = findViewById(R.id.parent);
        screenShot = findViewById(R.id.screenShot);
        textView = findViewById(R.id.text);

        textView.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                textView.setText("It is screen shot text");
                takeScreenshot(parent);
            }
        });
    }

    public void takeScreenshot(View view) {
        // ভিউর আকার অনুযায়ী বিটম্যাপ তৈরি করুন
        Bitmap bitmap = Bitmap.createBitmap(
            view.getWidth(), 
            view.getHeight(), 
            Bitmap.Config.ARGB_8888
        );
        
        // ক্যানভাসে ভিউ আঁকুন
        Canvas canvas = new Canvas(bitmap);
        view.draw(canvas);
        
        // ইমেজভিউতে সেট করুন
        screenShot.setImageBitmap(bitmap);
        textView.setText("click");
    }
}

মূল কোড ব্যাখ্যা

// ১. বিটম্যাপ তৈরি করুন (ARGB_8888 = ৩২-বিট কলার)
Bitmap bitmap = Bitmap.createBitmap(view.getWidth(), view.getHeight(), Bitmap.Config.ARGB_8888);

// ২. ক্যানভাস তৈরি করুন
Canvas canvas = new Canvas(bitmap);

// ৩. ভিউ এবং এর চাইল্ডরা আঁকুন
view.draw(canvas);

// ৪. ইমেজভিউতে দেখান
imageView.setImageBitmap(bitmap);

সম্পূর্ণ স্ক্রিন স্ক্রিনশট (রুট ভিউ)

public void takeFullScreenshot() {
    View rootView = getWindow().getDecorView().getRootView();
    rootView.setDrawingCacheEnabled(true);
    Bitmap bitmap = Bitmap.createBitmap(rootView.getDrawingCache());
    rootView.setDrawingCacheEnabled(false);
    
    // গ্যালারিতে সংরক্ষণ করুন
    saveToGallery(bitmap);
}

সীমাবদ্ধতা ও সতর্কতা

  • শুধু ভিউ হায়ারার্কি ক্যাপচার করে, সিস্টেম UI (স্ট্যাটাস বার, নেভবার) নয়
  • সিকিউর ফ্ল্যাগ (FLAG_SECURE) সেট থাকলে ক্যাপচার হবে না
  • বড় ভিউর জন্য মেমরি সমস্যা হতে পারে
  • অ্যান্ড্রয়েড ১০+ এ MediaProjection API ব্যবহার করুন ফুল স্ক্রিন ক্যাপচারের জন্য
  1. যেকোনো অ্যান্ড্রয়েড ডিভাইসে স্ক্রলিং স্ক্রিনশট নেওয়ার পদ্ধতি

  2. অ্যাপ ছাড়া অ্যান্ড্রয়েডে স্ক্রিনশট নেওয়ার পদ্ধতি

  3. ম্যাকএ স্ক্রিনশট নেওয়ার পদ্ধতি

  4. এন্ড্রয়েড রিকভারি মোডের স্ক্রিনশট ক্যাপচার করুন: সম্পূর্ণ ধাপে ধাপে গাইড