এই টিউটোরিয়ালে আমরা শিখব কীভাবে জনপ্রিয় ইমেজ লোডিং লাইব্রেরি 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()` ব্যবহার করে মেমরি অপ্টিমাইজ করুন।