এটি সর্বাধিক পারফরম্যান্ট সমাধান নয়, তবে পটভূমির পরিবর্তে কারও পরামর্শ অনুসারে আপনি ফ্রেমলআউট বা রিলেটিভলআউট তৈরি করতে পারেন এবং চিত্রগ্রাহকে সিউডো ব্যাকগ্রাউন্ড হিসাবে ব্যবহার করতে পারেন - অন্যান্য উপাদানগুলি এর উপরে অবস্থানে থাকবে:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_height="match_parent"
android:layout_width="match_parent">
<ImageView
android:id="@+id/ivBackground"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_alignParentLeft="true"
android:layout_alignParentTop="true"
android:scaleType="fitStart"
android:src="@drawable/menu_icon_exit" />
<Button
android:id="@+id/bSomeButton"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_alignParentTop="true"
android:layout_marginLeft="61dp"
android:layout_marginTop="122dp"
android:text="Button" />
</RelativeLayout>
ইমেজভিউয়ের সমস্যাটি হ'ল কেবল স্কেলটাইপগুলি উপলব্ধ: সেন্টার, সেন্ট সেন্ট্রোক, সেন্ট সেন্টিনসাইড, এফআইসেন্টার, এফআইএনএন্ড, এফআইএসটিআরটি, এফআইএসএক্সওয়াই, ম্যাট্রিক্স ( http://etcodehome.blogspot.de/2011/05/android-imageview-scaletype-sams )
এবং কিছু ক্ষেত্রে "ব্যাকগ্রাউন্ড চিত্রটি স্কেল করতে (তার দিকের অনুপাত রেখে)" যখন আপনি কোনও চিত্র পুরো পর্দাটি পূরণ করতে চান (উদাহরণস্বরূপ পটভূমি চিত্র) এবং স্ক্রিনের দিক অনুপাত চিত্রের চেয়ে আলাদা হয়, প্রয়োজনীয় স্কেল টাইপটি দয়ালু TOP_CROP এর, কারণ:
CENTER_CROP চিত্রের দৃশ্যের উপরের প্রান্তে শীর্ষ প্রান্তটি প্রান্তিককরণের পরিবর্তে ছোট আকারের চিত্রটিকে কেন্দ্র করে এবং FIT_START স্ক্রিনের উচ্চতার সাথে ফিট করে এবং প্রস্থটি পূরণ করে না। এবং ব্যবহারকারী হিসাবে আনেকে লক্ষ্য করা গেছে যে FIT_XY দিক অনুপাত রাখে না।
আনন্দের সাথে কেউ TOP_CROP সমর্থন করতে ইমেজভিউ বাড়িয়েছে
public class ImageViewScaleTypeTopCrop extends ImageView {
public ImageViewScaleTypeTopCrop(Context context) {
super(context);
setup();
}
public ImageViewScaleTypeTopCrop(Context context, AttributeSet attrs) {
super(context, attrs);
setup();
}
public ImageViewScaleTypeTopCrop(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
setup();
}
private void setup() {
setScaleType(ScaleType.MATRIX);
}
@Override
protected boolean setFrame(int frameLeft, int frameTop, int frameRight, int frameBottom) {
float frameWidth = frameRight - frameLeft;
float frameHeight = frameBottom - frameTop;
if (getDrawable() != null) {
Matrix matrix = getImageMatrix();
float scaleFactor, scaleFactorWidth, scaleFactorHeight;
scaleFactorWidth = (float) frameWidth / (float) getDrawable().getIntrinsicWidth();
scaleFactorHeight = (float) frameHeight / (float) getDrawable().getIntrinsicHeight();
if (scaleFactorHeight > scaleFactorWidth) {
scaleFactor = scaleFactorHeight;
} else {
scaleFactor = scaleFactorWidth;
}
matrix.setScale(scaleFactor, scaleFactor, 0, 0);
setImageMatrix(matrix);
}
return super.setFrame(frameLeft, frameTop, frameRight, frameBottom);
}
}
https://stackoverflow.com/a/14815588/2075875
যদি কেউ কাস্টম অঙ্কনযোগ্য লিখেন যা এর মতো চিত্রটিকে স্কেল করে IM তারপরে এটি ব্যাকগ্রাউন্ড প্যারামিটার হিসাবে ব্যবহার করা যেতে পারে।
রিফ্লগ এটি ব্যবহারের আগে অঙ্কনযোগ্য প্রেস্কেল করার পরামর্শ দেয়। এটি কীভাবে করবেন তা এখানে নির্দেশনা দেওয়া হয়েছে:
জাভা (অ্যান্ড্রয়েড): বিটম্যাপ ছাড়াই কীভাবে একটি অঙ্কনযোগ্য স্কেল করা যায়?
যদিও এর অসুবিধা রয়েছে, তবে ছবিটি আপলোডকৃত অঙ্কনযোগ্য / বিটম্যাপটি আরও বেশি র্যাম ব্যবহার করবে, যখন চিত্রভিউ দ্বারা ব্যবহৃত ফ্লাই স্কেলিংয়ের জন্য আরও মেমরির প্রয়োজন হবে না। সুবিধা কম প্রসেসরের লোড হতে পারে।