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

Picasso লাইব্রেরি ব্যবহার করে অ্যান্ড্রয়েডে URL থেকে ImageView-এ ছবি লোড করার পদ্ধতি

এই টিউটোরিয়ালে আমরা শিখব কীভাবে জনপ্রিয় ইমেজ লোডিং লাইব্রেরি Picasso ব্যবহার করে URL থেকে ছবি ডাউনলোড করে ImageView-এ দেখাতে হয়।

প্রয়োজনীয় ধাপগুলো

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

Android Studio-তে File → New Project এ যান এবং প্রয়োজনীয় বিবরণ পূরণ করে একটি নতুন প্রজেক্ট তৈরি করুন।

ধাপ ২: Gradle-এ Picasso ডিপেন্ডেন্সি যোগ করুন

build.gradle (Module: app) ফাইলে dependencies ব্লকে যোগ করুন:

dependencies {
    // অন্যান্য ডিপেন্ডেন্সি...
    implementation 'com.squareup.picasso:picasso:2.71828' // লেটেস্ট ভার্সন
}

সিঙ্ক নাউ (Sync Now) ক্লিক করুন।

ধাপ ৩: লেআউট ফাইল তৈরি করুন

res/layout/activity_main.xml ফাইলে নিচের কোড যোগ করুন:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="https://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:layout_margin="16dp"
    android:orientation="vertical">
    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Load ImageView by URL"
        android:textStyle="bold"
        android:textColor="@color/colorPrimary"
        android:textSize="20sp" />
    <ImageView
        android:id="@+id/image_view"
        android:layout_width="match_parent"
        android:layout_height="300dp"
        android:layout_marginTop="16dp"
        android:scaleType="centerCrop" />
    <TextView
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:textSize="24sp"
        android:gravity="center|bottom"
        android:textStyle="bold" />
</LinearLayout>

ধাপ ৪: মেইন এক্টিভিটিতে Picasso ব্যবহার করুন

src/MainActivity.java ফাইলে নিচের কোড যোগ করুন:

package app.com.sample;

import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
import android.widget.ImageView;
import com.squareup.picasso.Picasso;

public class MainActivity extends AppCompatActivity {
    private ImageView imageView;
    
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        
        imageView = findViewById(R.id.image_view);
        String url = "https://images.pexels.com/photos/814499/pexels-photo-814499.jpeg?auto=compress&cs=tinysrgb&dpr=1&w=500";
        
        Picasso.get()
            .load(url)
            .placeholder(R.drawable.placeholder) // লোড হয়ার আগে (ঐচ্ছিক)
            .error(R.drawable.error_image)       // এরর হলে (ঐচ্ছিক)
            .into(imageView);
    }
}

ধাপ ৫: ম্যানিফেস্টে ইন্টারনেট পারমিশন যোগ করুন

AndroidManifest.xml ফাইলে:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="https://schemas.android.com/apk/res/android"
    package="app.com.sample">
    <uses-permission android:name="android.permission.INTERNET" />
    <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>

Picasso-এর মূল ফিচারগুলো

Picasso.get()
    .load(url)
    .placeholder(R.drawable.placeholder)     // লোডিং-এর সময় দেখাবে
    .error(R.drawable.error)                 // এরর হলে দেখাবে
    .fit()                                   // ImageView-এ ফিট করুন
    .centerCrop()                            // কেন্দ্রে ক্রপ করুন
    .centerInside()                          // ভিতরে ফিট করুন
    .resize(200, 200)                        // নির্দিষ্ট সাইজে রিসাইজ
    .resizeDimen(R.dimen.width, R.dimen.height) // ডিমেন রিসোর্স থেকে
    .onlyScaleDown()                         // ছোট করবে বড় করবে না
    .rotate(90f)                             // ৯০ ডিগ্রি ঘুরান
    .rotate(90f, pivotX, pivotY)             // নির্দিষ্ট পিভট থেকে ঘুরান
    .transform(new CircleTransform())        // কাস্টম ট্রান্সফর্মেশন (গোলো করুন)
    .priority(Picasso.Priority.HIGH)         // প্রায়োরিটি সেট করুন
    .noFade()                                // ফেড-ইন অ্যানিমেশন বন্ধ
    .into(imageView);

RecyclerView-এ Picasso ব্যবহার

@Override
public void onBindViewHolder(ViewHolder holder, int position) {
    String url = items.get(position).getImageUrl();
    Picasso.get()
        .load(url)
        .placeholder(R.drawable.placeholder)
        .into(holder.imageView);
}

// ViewHolder-এ:
static class ViewHolder extends RecyclerView.ViewHolder {
    ImageView imageView;
    ViewHolder(View itemView) {
        super(itemView);
        imageView = itemView.findViewById(R.id.imageView);
    }
}

কাস্টম ট্রান্সফর্মেশন (গোলো ইমেজ)

public class CircleTransform implements Transformation {
    @Override
    public Bitmap transform(Bitmap source) {
        int size = Math.min(source.getWidth(), source.getHeight());
        int x = (source.getWidth() - size) / 2;
        int y = (source.getHeight() - size) / 2;
        Bitmap squared = Bitmap.createBitmap(source, x, y, size, size);
        Bitmap output = Bitmap.createBitmap(size, size, Bitmap.Config.ARGB_8888);
        Canvas canvas = new Canvas(output);
        Paint paint = new Paint();
        paint.setAntiAlias(true);
        canvas.drawCircle(size/2f, size/2f, size/2f, paint);
        paint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.SRC_IN));
        canvas.drawBitmap(squared, 0, 0, paint);
        if (squared != source) squared.recycle();
        return output;
    }
    
    @Override
    public String key() { return "circle"; }
}

Picasso vs Glide vs Coil

লাইব্রেরিআকারকোটলিন সাপোর্টকরাউটিনসুপারিশ
Picasso~100KBভালোনাসহজ ব্যবহার, ছোট প্রজেক্ট
Glide~500KBচমৎকারহ্যাঁবড় প্রজেক্ট, GIF, ভিডিও থাম্বনেইল
Coil~300KBনেটিভ (Kotlin-first)হ্যাঁমডার্ন কোটলিন প্রজেক্ট, Jetpack Compose

সারাংশ

Picasso সহজ এবং হালকা ইমেজ লোডিং লাইব্রেরি। Picasso.get().load(url).into(imageView) এক লাইনে ছবি লোড হয়। RecyclerView-এ ব্যবহার সময় `.fit()` বা `.resize()` ব্যবহার করে মেমরি অপ্টিমাইজ করুন।

  1. অ্যান্ড্রয়েডে URL দিয়ে ImageView-এ ছবি লোড করার পদ্ধতি

  2. অ্যান্ড্রয়েড অ্যাপে ImageView-এ ছবি লোড ও প্রদর্শন করার পদ্ধতি

  3. Android-এ ImageView-এ ছবি ঘুরিয়ে দেওয়ার পদ্ধতি

  4. Android-এ Picasso লাইব্রেরি ব্যবহার করে ইমেজ ডাউনলোড এবং প্রদর্শন