ইমেজভিউতে চিত্রটি ফিট করুন, অনুপাতের অনুপাত রাখুন এবং তারপরে চিত্রের মাত্রাকে চিত্রের সাথে পুনরায় আকার দিন?


164

এলোমেলো আকারের একটি চিত্রকে কীভাবে ফিট করতে ImageViewপারি?
কখন:

  • প্রাথমিকভাবে ImageViewমাত্রা 250 ডিপি * 250 ডিপি হয়
  • চিত্রটির বৃহত্তর মাত্রা 250 ডিপি পর্যন্ত / নিচে স্কেল করা উচিত
  • চিত্রটির তার অনুপাতের অনুপাত রাখা উচিত
  • ImageViewমাত্রা আরোহী পর ছোটো চিত্রের মাত্রা সুসংগত হওয়া আবশ্যক

উদাহরণস্বরূপ 100 * 150 ইমেজের জন্য চিত্র এবং ImageView166 * 250 হওয়া উচিত।
উদাহরণস্বরূপ, 150 * 100 এর একটি চিত্রের জন্য, চিত্রটি এবং ImageView250 * 166 হওয়া উচিত।

যদি আমি সীমানা হিসাবে সেট

<ImageView
    android:id="@+id/picture"
    android:layout_width="250dp"
    android:layout_height="250dp"
    android:layout_gravity="center_horizontal"
    android:layout_marginTop="20dp"
    android:adjustViewBounds="true" />

চিত্রগুলি সঠিকভাবে ফিট ImageViewকরে ImageViewতবে সর্বদা 250dp * 250dp হয়।


ওহ, আপনি কি এর আকারটিকে ImageViewচিত্রের আকারে পরিবর্তন করতে চাইছেন ? উদাহরণস্বরূপ 100dp x 150dp এর চিত্রটি কি ImageViewএকই পদক্ষেপে স্কেল হবে ? বা আপনি কীভাবে চিত্রটিকে ImageViewসীমানায় স্কেল করবেন তার অর্থ । 1000dp x 875dp এর উদাহরণস্বরূপ 250dp x 250dp এ স্কেল করা হবে। আপনার কি অনুপাত বজায় রাখা দরকার?
জার্নো আরগিল্যান্ডার

আমি চাই ইমেজভিউটির চিত্রের মাত্রা থাকতে হবে এবং চিত্রটি এর বৃহত্তম মাত্রা 250 ডিপি এর সমান এবং তার অনুপাতের অনুপাত রাখতে পারে। উদাহরণস্বরূপ 100 * 150 ইমেজের জন্য, আমি চিত্রটি এবং চিত্রমালাটি 166 * 250 হতে চাই। আমি আমার প্রশ্ন আপডেট করব।
জুলাই

আপনি কি কেবল কোনও কার্যকলাপ প্রদর্শন করার সময় (একবার করুন) বা গ্যালারী / ওয়েব থেকে কোনও ছবি বাছাই করার মতো কার্যকলাপের কোনও কাজ করার সময় (অনেক সময় লোড না করে) বা উভয়ই স্কেলিং / সামঞ্জস্য করতে চান?
জার্নো আরগিল্যান্ডার

আমার পরিবর্তিত উত্তরটি দেখুন, যা আপনি যেমনটি চেয়েছিলেন ঠিক
তেমনভাবে করা

উত্তর:


137

(মূল প্রশ্নের স্পষ্টতার পরে উত্তরটি ভারী পরিবর্তন করা হয়েছিল)

স্পষ্টতার পরে:
এটি কেবল এক্সএমএলে করা যায় না । চিত্র এবং উভয়ই স্কেল করা সম্ভব নয় ImageViewযাতে চিত্রটির এক মাত্রা সর্বদা 250 ডিপি হয় এবং ImageViewচিত্রটির মতো একই মাত্রাও থাকে।

এই কোড দাঁড়িপাল্লা Drawable একটি এর ImageViewএক মাত্রা ঠিক 250dp এবং অনুপাত পালন 250dp এক্স 250dp মত একটি বর্গক্ষেত্রের থাকার। এরপরে ImageViewস্কেলড ইমেজের মাত্রাগুলি মেলে পুনরায় আকার দেওয়া হবে। কোডটি একটি ক্রিয়াকলাপে ব্যবহৃত হয়। আমি এটি বোতাম ক্লিক হ্যান্ডলারের মাধ্যমে পরীক্ষা করেছি।

উপভোগ করুন। :)

private void scaleImage(ImageView view) throws NoSuchElementException  {
    // Get bitmap from the the ImageView.
    Bitmap bitmap = null;

    try {
        Drawable drawing = view.getDrawable();
        bitmap = ((BitmapDrawable) drawing).getBitmap();
    } catch (NullPointerException e) {
        throw new NoSuchElementException("No drawable on given view");
    } catch (ClassCastException e) {
        // Check bitmap is Ion drawable
        bitmap = Ion.with(view).getBitmap();
    }

    // Get current dimensions AND the desired bounding box
    int width = 0;

    try {
        width = bitmap.getWidth();
    } catch (NullPointerException e) {
        throw new NoSuchElementException("Can't find bitmap on given view/drawable");
    }

    int height = bitmap.getHeight();
    int bounding = dpToPx(250);
    Log.i("Test", "original width = " + Integer.toString(width));
    Log.i("Test", "original height = " + Integer.toString(height));
    Log.i("Test", "bounding = " + Integer.toString(bounding));

    // Determine how much to scale: the dimension requiring less scaling is
    // closer to the its side. This way the image always stays inside your
    // bounding box AND either x/y axis touches it.  
    float xScale = ((float) bounding) / width;
    float yScale = ((float) bounding) / height;
    float scale = (xScale <= yScale) ? xScale : yScale;
    Log.i("Test", "xScale = " + Float.toString(xScale));
    Log.i("Test", "yScale = " + Float.toString(yScale));
    Log.i("Test", "scale = " + Float.toString(scale));

    // Create a matrix for the scaling and add the scaling data
    Matrix matrix = new Matrix();
    matrix.postScale(scale, scale);

    // Create a new bitmap and convert it to a format understood by the ImageView 
    Bitmap scaledBitmap = Bitmap.createBitmap(bitmap, 0, 0, width, height, matrix, true);
    width = scaledBitmap.getWidth(); // re-use
    height = scaledBitmap.getHeight(); // re-use
    BitmapDrawable result = new BitmapDrawable(scaledBitmap);
    Log.i("Test", "scaled width = " + Integer.toString(width));
    Log.i("Test", "scaled height = " + Integer.toString(height));

    // Apply the scaled bitmap
    view.setImageDrawable(result);

    // Now change ImageView's dimensions to match the scaled image
    LinearLayout.LayoutParams params = (LinearLayout.LayoutParams) view.getLayoutParams(); 
    params.width = width;
    params.height = height;
    view.setLayoutParams(params);

    Log.i("Test", "done");
}

private int dpToPx(int dp) {
    float density = getApplicationContext().getResources().getDisplayMetrics().density;
    return Math.round((float)dp * density);
}

এর জন্য এক্সএমএল কোড ImageView:

<ImageView a:id="@+id/image_box"
    a:background="#ff0000"
    a:src="@drawable/star"
    a:layout_width="wrap_content"
    a:layout_height="wrap_content"
    a:layout_marginTop="20dp"
    a:layout_gravity="center_horizontal"/>


স্কেলিং কোডের জন্য এই আলোচনার জন্য ধন্যবাদ:
http://www.anddev.org/resize_and_rotate_image_-_example-t621.html


আপডেট 7th ই নভেম্বর, ২০১২:
মন্তব্যগুলিতে পরামর্শ অনুসারে নাল পয়েন্টার চেক যুক্ত করা হয়েছে


1
ইমেজভিউ সর্বদা 250 * 250 হবে।
জুলাই

2
ঠিক আছে. এটি কেবল এক্সএমএলে করা যায় না। জাভা কোড প্রয়োজন। এক্সএমএল দিয়ে আপনি চিত্রটি স্কেল করতে পারেন বা ImageViewউভয়ই নয়।
জার্নো আরগিল্যান্ডার

93
বুঝতে পারিনি যে আপনি অ্যান্ড্রয়েড প্রতিস্থাপন করতে পারেন: একটি সহ:
স্ট্যাকআউট


1
জাভা অত্যন্ত কুৎসিত ভাষা কারণ এ জাতীয় সাধারণ কাজের জন্য কোডের এত বেশি পরিমাণে লেখা প্রয়োজন।
দিমিত্রি

245

এই নির্দিষ্ট প্রশ্নের উত্তর নাও হতে পারে তবে যদি কেউ আমার মতো হয়, maxWidthতবে অনুপাতের অনুপাতটি সংরক্ষণের সময় বাউন্ডেড আকারের (উদাহরণস্বরূপ ) ইমেজভিউতে কীভাবে চিত্রটি ফিট করতে হয় তার উত্তর অনুসন্ধান করতে হয় এবং তারপরে চিত্রকল্পের দ্বারা অধিকৃত অতিরিক্ত স্থান থেকে মুক্তি পান, এক্সএমএলে নিম্নলিখিত বৈশিষ্ট্যগুলি ব্যবহার করা সহজ সমাধান:

    android:scaleType="centerInside"
    android:adjustViewBounds="true"

13
আপনি যদি চিত্রটি খুব ছোট করে না রাখেন তবে এটি কাজ করে।
জানুস

আমি যদি এটি খুব সামান্য হয় এবং দিক অনুপাত বজায় রাখি তবে এটি কীভাবে বাড়িয়ে তুলব?
কৌস্তভ ভাগবত

কারও যদি প্রয়োজন হয়, "ফিটসেন্টার" স্কেলটাইপের আরেকটি বৈশিষ্ট্য, এবং এটি চিত্রটি স্কেল করে না, তবে কোনও বড় চিত্রের জন্য, দিকটি অনুপাতটি বজায় রাখার জন্য ভিউ বাক্সের অভ্যন্তরে চিত্রের সর্বাধিক আকারের সাথে
মানিয়ে যাবে

ছোট চিত্রগুলি স্কেল আপ করতে তার পরিবর্তে স্কেল টাইপ = "সেন্টারক্রপ" ব্যবহার করুন।
ইওয়েব

আমার এই সমাধানটির সাথে কাজ করার জন্য আরও একটি বিষয় হ'ল আমার চিত্রটি রিফ্রয়ে করতে "অ্যান্ড্রয়েড: এসসিআর" "অ্যান্ড্রয়েড: ব্যাকগ্রাউন্ড" ব্যবহার করা উচিত নয়।
কোডিংপ্যান

45
<ImageView android:layout_width="match_parent"
           android:layout_height="wrap_content"
           android:scaleType="centerCrop"
           android:adjustViewBounds="true"/>

23

নীচের কোডটি ইমেজভিউয়ের একই আকারের সাথে বিটম্যাপটি পুরোপুরি তৈরি করে। বিটম্যাপ চিত্রের উচ্চতা এবং প্রস্থ পান এবং তারপরে চিত্র প্রদর্শনের পরামিতিগুলির সাহায্যে নতুন উচ্চতা এবং প্রস্থ গণনা করুন। এটি আপনাকে সেরা দিক অনুপাত সহ প্রয়োজনীয় চিত্র দেয়।

int currentBitmapWidth = bitMap.getWidth();
int currentBitmapHeight = bitMap.getHeight();

int ivWidth = imageView.getWidth();
int ivHeight = imageView.getHeight();
int newWidth = ivWidth;

newHeight = (int) Math.floor((double) currentBitmapHeight *( (double) new_width / (double) currentBitmapWidth));

Bitmap newbitMap = Bitmap.createScaledBitmap(bitMap, newWidth, newHeight, true);

imageView.setImageBitmap(newbitMap)

ভোগ করেন।


3
এটি কেবল মাত্র একই উচ্চতার সাথে উচ্চতা হ্রাস করবে যার দ্বারা প্রস্থ হ্রাস করা হয়েছিল। এটি সেই নতুন হাইট <ivHight এর নিশ্চয়তা দেয় না। আদর্শভাবে আপনার কোনটি অনুপাত বড় তা পরীক্ষা করা উচিত (কারেন্টবিটম্যাপ হাইট / আইভিহাইট, কারেন্টবিটম্যাপ উইথ / আইভিউইথ) এবং তারপরে আরও সিদ্ধান্ত নেবেন।
সুমিত ত্রিহান

1
এটি আসলে নিখুঁতভাবে কাজ করে, যদিও আপনার ivHight বা NewWidth এর প্রয়োজন নেই, পরিবর্তে গণনার মধ্যে ivWidth রাখুন।
স্টুয়ার্ট

14

android:scaleType="fitXY"আপনার যুক্ত করার চেষ্টা করুন ImageView


5
মূল চিত্রটি স্কোয়ার না করা হলে এটি অনুপাতের সংশোধন করবে।
জুলাই

1
fitXYপ্রায় সর্বদা চিত্রের অনুপাত পরিবর্তন করবে। ওপি স্পষ্টভাবে উল্লেখ করেছে যে দিক অনুপাতটি বজায় রাখা উচিত।
আইসিফ্লেমে

7

একদিন অনুসন্ধানের পরে, আমি মনে করি এটিই সবচেয়ে সহজ সমাধান:

imageView.getLayoutParams().width = 250;
imageView.getLayoutParams().height = 250;
imageView.setAdjustViewBounds(true);

2
আপনার উত্তরের উত্তরের জন্য ধন্যবাদ, তবে আমি মনে করি adjustViewBoundsএক্সএমএল যুক্ত করা ভাল

7

বেশিরভাগ ক্ষেত্রে কার্যকর সমাধানটি হ'ল

এখানে একটি উদাহরণ:

<ImageView android:id="@+id/avatar"
           android:layout_width="match_parent"
           android:layout_height="match_parent"
           android:scaleType="fitXY"/>

1
অবহেলিত এপিআই (পূর্ণ_পিতা)
fdermishin

কীভাবে এই ওপির প্রশ্নের উত্তর দেয়। এটি অ্যাসপেট রেশিও বজায় রাখে না
অ্যালেক্স

6

এটি সমস্ত এক্সএমএল ব্যবহার করে করা যেতে পারে ... অন্যান্য পদ্ধতিগুলি বেশ জটিল বলে মনে হচ্ছে। যাইহোক, আপনি কেবল ডিপি-তে যা চান তার উচ্চতা সেট করেছেন, তারপরে সামগ্রী বা ভিসার বিপরীতে মোড়কের প্রস্থটি সেট করুন। চিত্রটির আকার সামঞ্জস্য করতে স্কেলটাইপ ফিট সেন্টার ব্যবহার করুন।

<ImageView
    android:layout_height="200dp"
    android:layout_width="wrap_content"
    android:scaleType="fitCenter"
    android:adjustViewBounds="true"
    android:src="@mipmap/ic_launcher"
    android:layout_below="@+id/title"
    android:layout_margin="5dip"
    android:id="@+id/imageView1">

4

এই কোডটি ব্যবহার করুন:

<ImageView android:id="@+id/avatar"
           android:layout_width="fill_parent"
           android:layout_height="match_parent"
           android:scaleType="fitXY" />

4

সম্পাদিত জারানো আরগিল্যান্ডার উত্তর:

আপনার প্রস্থ এবং উচ্চতার সাথে চিত্র কীভাবে ফিট করতে হবে:

1) চিত্রভিউ আরম্ভ করুন এবং চিত্র সেট করুন:

iv = (ImageView) findViewById(R.id.iv_image);
iv.setImageBitmap(image);

2) এখন আকার:

scaleImage(iv);

সম্পাদিত scaleImageপদ্ধতি: ( আপনি এক্সপেক্টেড সীমানা মানগুলি প্রতিস্থাপন করতে পারেন )

private void scaleImage(ImageView view) {
    Drawable drawing = view.getDrawable();
    if (drawing == null) {
        return;
    }
    Bitmap bitmap = ((BitmapDrawable) drawing).getBitmap();

    int width = bitmap.getWidth();
    int height = bitmap.getHeight();
    int xBounding = ((View) view.getParent()).getWidth();//EXPECTED WIDTH
    int yBounding = ((View) view.getParent()).getHeight();//EXPECTED HEIGHT

    float xScale = ((float) xBounding) / width;
    float yScale = ((float) yBounding) / height;

    Matrix matrix = new Matrix();
    matrix.postScale(xScale, yScale);

    Bitmap scaledBitmap = Bitmap.createBitmap(bitmap, 0, 0, width, height, matrix, true);
    width = scaledBitmap.getWidth();
    height = scaledBitmap.getHeight();
    BitmapDrawable result = new BitmapDrawable(context.getResources(), scaledBitmap);

    view.setImageDrawable(result);

    LinearLayout.LayoutParams params = (LinearLayout.LayoutParams) view.getLayoutParams(); 
    params.width = width;
    params.height = height;
    view.setLayoutParams(params);
}

এবং .xML:

<ImageView
    android:id="@+id/iv_image"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_gravity="center_horizontal" />

আমি মনে করি এই castালাই: লিনিয়ারলআউট.লায়আউটপ্যারামস প্যারামস = (লিনিয়ারলআউট.লায়আউটপ্যারামস) ভিউ.গেটলয়আউটপ্যারামস (); মার্জিনআলআউটপ্যারামগুলি ভিউগ্রুপ থেকে প্রাপ্ত হওয়ায় অন্যভাবে যেতে হবে ay লেআউটপ্যারামগুলি।
জে জ্যাকবস

3

এটি আমার মামলার জন্য এটি করেছে।

             <ImageView
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:layout_centerHorizontal="true"
                android:scaleType="centerCrop"
                android:adjustViewBounds="true"
                />

2

যদি এটি আপনার পক্ষে কাজ করে না তবে অ্যান্ড্রয়েড: এসআরসিডি সহ পটভূমি: প্রতিস্থাপন করুন

android: src প্রধান কৌশলটি খেলবে

    <ImageView
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:adjustViewBounds="true"
    android:scaleType="fitCenter"
    android:src="@drawable/bg_hc" />

এটি একটি মোহন মত কাজ করে

এখানে চিত্র বর্ণনা লিখুন


1

আমার কাছে একটি চিত্রভিউ এবং একটি বিটম্যাপ থাকা দরকার, তাই বিটম্যাপটি চিত্র-ভিউ আকারে ছোট করা যায়, এবং চিত্রমাপের আকারটি বিভক্ত বিটম্যাপের সমান :)।

আমি কীভাবে এটি করতে পারি তার জন্য এই পোস্টটি সন্ধান করছিলাম এবং অবশেষে আমি যা চাই তা করেছি, যদিও এখানে বর্ণিত উপায় নেই।

<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/acpt_frag_root"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@color/imageBackground"
android:orientation="vertical">

<ImageView
    android:id="@+id/acpt_image"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_gravity="center"
    android:adjustViewBounds="true"
    android:layout_margin="@dimen/document_editor_image_margin"
    android:background="@color/imageBackground"
    android:elevation="@dimen/document_image_elevation" />

এবং তারপরে অনক্রিটভিউ পদ্ধতিতে

@Nullable
@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {

    View view = inflater.inflate(R.layout.fragment_scanner_acpt, null);

    progress = view.findViewById(R.id.progress);

    imageView = view.findViewById(R.id.acpt_image);
    imageView.setImageBitmap( bitmap );

    imageView.getViewTreeObserver().addOnGlobalLayoutListener(()->
        layoutImageView()
    );

    return view;
}

এবং তারপরে লেআউটআইজেজভিউ () কোডটি

private void layoutImageView(){

    float[] matrixv = new float[ 9 ];

    imageView.getImageMatrix().getValues(matrixv);

    int w = (int) ( matrixv[Matrix.MSCALE_X] * bitmap.getWidth() );
    int h = (int) ( matrixv[Matrix.MSCALE_Y] * bitmap.getHeight() );

    imageView.setMaxHeight(h);
    imageView.setMaxWidth(w);

}

এবং ফলাফলটি হল যে চিত্রটি নিখুঁতভাবে ভিতরে ফিট করে, অনুপাতের অনুপাত রেখে, এবং বিটম্যাপের অভ্যন্তরে ইমেজভিউ থেকে অতিরিক্ত বাম পিক্সেল নেই।

ফলাফল

সঠিকভাবে র‌্যাপ_কন্টেন্ট এবং অ্যাডজাস্ট ভিউবাউন্ডগুলি রাখা গুরুত্বপূর্ণ চিত্রভিউর গুরুত্বপূর্ণ, তারপরে সেটম্যাক্সউইথ এবং সেটম্যাক্সহাইট কাজ করবে, এটি ইমেজভিউয়ের উত্স কোডে লেখা হয়েছে,

/*An optional argument to supply a maximum height for this view. Only valid if
 * {@link #setAdjustViewBounds(boolean)} has been set to true. To set an image to be a
 * maximum of 100 x 100 while preserving the original aspect ratio, do the following: 1) set
 * adjustViewBounds to true 2) set maxWidth and maxHeight to 100 3) set the height and width
 * layout params to WRAP_CONTENT. */

0

আমার এটি পিকাসোর সাথে সীমাবদ্ধ বিন্যাসে করার দরকার ছিল, তাই আমি উপরের কয়েকটি উত্তর একসাথে ছুঁড়ে ফেলেছি এবং এই সমাধানটি নিয়ে এসেছি (আমি ইতিমধ্যে জানি যে চিত্রটি আমি লোড করছি সেটির অনুপাতের অনুপাতটি জানি, যাতে সহায়তা করে):

সেটঅন্টিভিউ (...) এর পরে কোথাও আমার ক্রিয়াকলাপে কল করা হয়েছে

protected void setBoxshotBackgroundImage() {
    ImageView backgroundImageView = (ImageView) findViewById(R.id.background_image_view);

    if(backgroundImageView != null) {
        DisplayMetrics displayMetrics = new DisplayMetrics();
        getWindowManager().getDefaultDisplay().getMetrics(displayMetrics);
        int width = displayMetrics.widthPixels;
        int height = (int) Math.round(width * ImageLoader.BOXART_HEIGHT_ASPECT_RATIO);

        // we adjust the height of this element, as the width is already pinned to the parent in xml
        backgroundImageView.getLayoutParams().height = height;

        // implement your Picasso loading code here
    } else {
        // fallback if no element in layout...
    }
}

আমার এক্সএমএলে

<?xml version="1.0" encoding="utf-8"?>

<android.support.constraint.ConstraintLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:layout_editor_absoluteY="0dp"
tools:layout_editor_absoluteX="0dp">

    <ImageView
        android:id="@+id/background_image_view"
        android:layout_width="0dp"
        android:layout_height="0dp"
        android:scaleType="fitStart"
        app:srcCompat="@color/background"
        android:adjustViewBounds="true"
        tools:layout_editor_absoluteY="0dp"
        android:layout_marginTop="0dp"
        android:layout_marginBottom="0dp"
        android:layout_marginRight="0dp"
        android:layout_marginLeft="0dp"
        app:layout_constraintRight_toRightOf="parent"
        app:layout_constraintLeft_toLeftOf="parent"
        app:layout_constraintTop_toTopOf="parent"/>

    <!-- other elements of this layout here... -->

</android.support.constraint.ConstraintLayout>

নীচের অংশে বাটম_ টো বোতামঅফ বৈশিষ্ট্যের অভাব নোট করুন। চিত্র লোডারটি ইমেজ লোডিং ব্যবহারের পদ্ধতি এবং ধ্রুবকগুলির জন্য আমার নিজস্ব স্ট্যাটিক বর্গ।


0

আমি একটি খুব সহজ সমাধান ব্যবহার করছি। এখানে আমার কোড:

imageView.setLayoutParams(new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT,LinearLayout.LayoutParams.MATCH_PARENT));
imageView.setScaleType(ImageView.ScaleType.FIT_XY);
imageView.getLayoutParams().height = imageView.getLayoutParams().width;
imageView.setMinimumHeight(imageView.getLayoutParams().width);

আমার ছবিগুলি গ্রিডভিউতে গতিশীলভাবে যুক্ত হয়েছে। আপনি যখন চিত্রটি এই সেটিংগুলি করেন, তখন ছবিটি স্বয়ংক্রিয়ভাবে 1: 1 অনুপাতে প্রদর্শিত হতে পারে।


0

চিত্রটির আকার পরিবর্তন করতে সরল গণিত ব্যবহার করুন। হয় আপনি আকার পরিবর্তন করতে পারেন ImageViewবা আপনি সেটযোগ্য চিত্রের তুলনায় আকার পরিবর্তন করতে পারেন ImageView। আপনার বিটম্যাপের প্রস্থ এবং উচ্চতা সন্ধান করুন যা আপনি সেট করতে চান ImageViewএবং পছন্দসই পদ্ধতিটি কল করতে চান । ধরা যাক আপনার প্রস্থ 500 কল কল পদ্ধতির চেয়ে উচ্চতার চেয়ে বেশি

//250 is the width you want after resize bitmap
Bitmat bmp = BitmapScaler.scaleToFitWidth(bitmap, 250) ;
ImageView image = (ImageView) findViewById(R.id.picture);
image.setImageBitmap(bmp);

আপনি এই শ্রেণিটি পুনরায় আকার বিটম্যাপের জন্য ব্যবহার করেন।

public class BitmapScaler{
// Scale and maintain aspect ratio given a desired width
// BitmapScaler.scaleToFitWidth(bitmap, 100);
 public static Bitmap scaleToFitWidth(Bitmap b, int width)
  {
    float factor = width / (float) b.getWidth();
    return Bitmap.createScaledBitmap(b, width, (int) (b.getHeight() * factor), true);
  }


  // Scale and maintain aspect ratio given a desired height
  // BitmapScaler.scaleToFitHeight(bitmap, 100);
  public static Bitmap scaleToFitHeight(Bitmap b, int height)
  {
    float factor = height / (float) b.getHeight();
    return Bitmap.createScaledBitmap(b, (int) (b.getWidth() * factor), height, true);
   }
 }

এক্সএমএল কোড হয়

<ImageView
android:id="@+id/picture"
android:layout_width="250dp"
android:layout_height="250dp"
android:layout_gravity="center_horizontal"
android:layout_marginTop="20dp"
android:adjustViewBounds="true"
android:scaleType="fitcenter" />

0

দ্রুত উত্তর:

<ImageView
        android:id="@+id/imageView"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:scaleType="center"
        android:src="@drawable/yourImage"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent" />
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.