ScaleGestureDetector দিয়ে পিংচ টু জুম
এই উদাহরণে ScaleGestureDetector ব্যবহার করে ImageView-এ টু-ফিংগার পিংচ জুম (Zoom In/Out) ইমপ্লিমেন্ট করার পদ্ধতি দেখানো হয়েছে।
ধাপ ১: প্রজেক্ট তৈরি
Android Studio-তে নতুন প্রজেক্ট তৈরি করুন।
ধাপ ২: লেআউট (activity_main.xml)
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="https://schemas.android.com/apk/res/android"
xmlns:tools="https://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:padding="16dp"
android:gravity="center"
tools:context=".MainActivity">
<ImageView
android:id="@+id/imageView"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:src="@drawable/your_image"
android:scaleType="matrix"
android:adjustViewBounds="true" />
</LinearLayout>
গুরুত্বপূর্ণ:
android:scaleType="matrix"এবংandroid:adjustViewBounds="true"জুমের জন্য আবশ্যক।
ধাপ ৩: MainActivity.java
import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
import android.view.MotionEvent;
import android.view.ScaleGestureDetector;
import android.widget.ImageView;
public class MainActivity extends AppCompatActivity {
private ScaleGestureDetector scaleGestureDetector;
private float mScaleFactor = 1.0f;
private ImageView imageView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
imageView = findViewById(R.id.imageView);
scaleGestureDetector = new ScaleGestureDetector(this, new ScaleListener());
}
@Override
public boolean onTouchEvent(MotionEvent event) {
scaleGestureDetector.onTouchEvent(event);
return true;
}
private class ScaleListener extends ScaleGestureDetector.SimpleOnScaleGestureListener {
@Override
public boolean onScale(ScaleGestureDetector detector) {
mScaleFactor *= detector.getScaleFactor();
// জুম লিমিট সেট করুন (0.1x থেকে 10x)
mScaleFactor = Math.max(0.1f, Math.min(mScaleFactor, 10.0f));
// স্কেল অ্যাপ্লাই করুন
imageView.setScaleX(mScaleFactor);
imageView.setScaleY(mScaleFactor);
return true;
}
}
}
ধাপ ৪: AndroidManifest.xml
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="https://schemas.android.com/apk/res/android"
package="com.example.imagezoom">
<application ...>
<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>
উন্নত ফিচার যোগ করা (প্যান/ড্র্যাগ)
জুম করার সময় ইমেজ ড্র্যাগ করতে OnTouchListener এবং ম্যাট্রিক্স ট্রান্সফরমেশন ব্যবহার করুন:
imageView.setOnTouchListener((v, event) -> {
// Matrix ব্যবহার করে translate + scale হ্যান্ডল করুন
// পূর্ণ ইমপ্লিমেন্টেশনের জন্য PhotoView লাইব্রেরি রিকমেন্ডেড
return true;
});
প্রোডাকশন-রেডি লাইব্রেরি (সুপারিশকৃত)
- PhotoView (
com.github.chrisbanes:PhotoView:2.3.0) - সবচেয়ে জনপ্রিয়, জুম, প্যান, ডাবল-ট্যাপ সাপোর্ট - TouchImageView - সিংগেল ক্লাস ইমপ্লিমেন্টেশন
- Glide/Picasso + PhotoView - ইমেজ লোডিং + জুম একসাথে
PhotoView দ্রুত সেটআপ
<com.github.chrisbanes.photoview.PhotoView
android:id="@+id/photoView"
android:layout_width="match_parent"
android:layout_height="match_parent" />
// Java
PhotoView photoView = findViewById(R.id.photoView);
Glide.with(this).load(imageUrl).into(photoView);
// জুম, প্যান, ডাবল-ট্যাপ অটোমেটিক কাজ করবে
পারফরম্যান্স টিপস
- বড় ইমেজের জন্য
inSampleSizeবা Glide/Picasso-র ডাউনস্যাম্পলিং ব্যবহার করুন android:largeHeap="true"Manifest-এ যোগ করুন যদি OOM হয়- জুম লিমিট যুক্ত করুন (মিন 0.5x, ম্যাক্স 5x সাধারণত পর্যাপ্ত)