android पहलू अनुपात को रखने के लिए ImageView में एक छवि को स्केल कैसे करें




android-imageview image-scaling (17)

एंड्रॉइड में, मैंने एक ImageView के fill_parent को fill_parent होने के लिए fill_parent (जो फोन की पूरी चौड़ाई लेता है)।

यदि छवि ImageView रखी गई ImageView से बड़ी है, तो एंड्रॉइड इसे स्केल करेगा, है ना? लेकिन ऊंचाई के बारे में क्या? जब एंड्रॉइड छवि को स्केल करता है, तो क्या यह पहलू अनुपात रखेगा?

मुझे क्या पता चला है कि ImageView के शीर्ष और निचले हिस्से में कुछ सफेद स्थान है जब एंड्रॉइड छवि छवि से बड़ा है जो एक छवि को स्केल करता है। क्या यह सच है? यदि हां, तो मैं उस सफेद जगह को कैसे खत्म कर सकता हूं?


प्रोग्रामेटिक रूप से ऐसा करते समय, सेटर्स को सही क्रम में कॉल करना सुनिश्चित करें:

imageView.setAdjustViewBounds(true)
imageView.setScaleType(ImageView.ScaleType.CENTER_CROP)

कोड के नीचे स्केल छवि के लिए पहलू अनुपात के रूप में कार्य करना:

Bitmap bitmapImage = BitmapFactory.decodeFile("Your path");
int nh = (int) ( bitmapImage.getHeight() * (512.0 / bitmapImage.getWidth()) );
Bitmap scaled = Bitmap.createScaledBitmap(bitmapImage, 512, nh, true);
your_imageview.setImageBitmap(scaled);

आप में से किसी के लिए जो छवि को उचित स्केलिंग और क्रॉपिंग उपयोग के साथ छविदृश्य सटीक फिट करना चाहता है

imageView.setScaleType(ScaleType.FIT_XY);

जहां imageView आपके ImageView का प्रतिनिधित्व करने वाला दृश्य है


Pass your imageview and based on screen height and width you can make it  


    public void setScaleImage(EventAssetValueListenerView view){
        // Get the ImageView and its bitmap
        Drawable drawing = view.getDrawable();
        Bitmap bitmap = ((BitmapDrawable)drawing).getBitmap();
        // Get current dimensions
        int width = bitmap.getWidth();
        int height = bitmap.getHeight();

        float xScale = ((float) 4) / width;
        float yScale = ((float) 4) / height;
        float scale = (xScale <= yScale) ? xScale : yScale;

        Matrix matrix = new Matrix();
        matrix.postScale(scale, scale);

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

        view.setImageDrawable(result);

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


यह मेरी समस्या हल हो गई

android:adjustViewBounds="true"
android:scaleType="fitXY"

इस विशेष मुद्दे वाले किसी और के लिए। आपके पास एक ImageView View (या अन्य View ) है कि आप fill_parent चौड़ाई और ऊंचाई को fill_parent स्केल करना चाहते हैं:

इन ImageView विशेषताओं में इन दो विशेषताओं को जोड़ें:

android:adjustViewBounds="true"
android:scaleType="centerCrop"

और ImageView चौड़ाई को fill_parent और fill_parent ऊंचाई पर wrap_content

साथ ही, अगर आप अपनी छवि को फसल नहीं करना चाहते हैं, तो इसे आजमाएं:

 android:adjustViewBounds="true"
 android:layout_centerInParent="true"

आपको किसी भी जावा कोड की आवश्यकता नहीं है। बस तुम्हें यह करना होगा :

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

चौड़ाई और ऊंचाई के लिए मिलान माता-पिता में कुंजी है


imageView.setImageBitmap(Bitmap.createScaledBitmap(bitmap, 130, 110, false));

मेरे पास स्क्रीन से छोटी छवि है। इसे अधिकतम और केंद्रित में आनुपातिक रूप से विस्तारित करने के लिए मुझे निम्नलिखित कोड का उपयोग करना पड़ा:

<ImageView
    android:id="@+id/my_image"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:layout_centerInParent="true"
    android:adjustViewBounds="true"
    android:layout_weight="1"
    android:scaleType="fitCenter" />

हालांकि, ध्यान रखें कि यदि आपके पास एक सापेक्ष लेआउट है और कुछ तत्व छवि दृश्य के ऊपर या नीचे होने के लिए सेट हैं, तो वे छवि द्वारा अधिकतर ओवरलैप किए जाएंगे।


ImageView.ScaleType पर एक नज़र डालें, आकार बदलने के तरीके को नियंत्रित करने और समझने के लिए एक ImageView दृश्य में होता है। जब छवि का आकार बदलता है (इसके पहलू अनुपात को बनाए रखते हुए) संभावना है कि छवि की ऊंचाई या चौड़ाई ImageView के आयामों से छोटी हो जाती है।


यदि आप एक ImageView दृश्य देखना चाहते हैं कि उचित पहलू अनुपात को रखते हुए दोनों स्केल ऊपर और नीचे हैं, तो इसे अपने एक्सएमएल में जोड़ें:

android:adjustViewBounds="true"
android:scaleType="fitCenter"

इसे अपने कोड में जोड़ें:

// We need to adjust the height if the width of the bitmap is
// smaller than the view width, otherwise the image will be boxed.
final double viewWidthToBitmapWidthRatio = (double)image.getWidth() / (double)bitmap.getWidth();
image.getLayoutParams().height = (int) (bitmap.getHeight() * viewWidthToBitmapWidthRatio);

यह काम करने में मुझे कुछ समय लगा, लेकिन यह उन मामलों में काम करता है जहां छवि स्क्रीन की चौड़ाई से छोटी है और स्क्रीन चौड़ाई से बड़ी है, और यह छवि को बॉक्स नहीं करती है।


मैं इसका उपयोग करता हूं:

<ImageView
android:id="@+id/logo"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:layout_centerInParent="true"
android:scaleType="centerInside"
android:src="@drawable/logo" />

पहलू अनुपात रखने के लिए ImageView में इन गुणों का उपयोग करें:

android:adjustViewBounds="true"
android:scaleType="fitXY"

<ImageView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:adjustViewBounds="true"
    android:scaleType="fitXY"
    />

मेरे पास एक बिटमैप स्केल करने के लिए एक एल्गोरिदम है जो कंटेनर आयामों को फ़िट करता है, इसके पहलू अनुपात को बनाए रखता है। कृपया मेरा समाधान here

उम्मीद है कि यह किसी को लेन के नीचे मदद करता है!


android:adjustViewBounds देखें android:adjustViewBounds

इसे सही पर सेट करें यदि आप ImageView को अपने ड्रॉइंग के पक्ष अनुपात को संरक्षित करने के लिए अपनी सीमाओं को समायोजित करना चाहते हैं।


यह मेरे लिए काम किया:

android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:maxWidth="39dip"
android:scaleType="centerCrop"
android:adjustViewBounds ="true"

myImageView.setAdjustViewBounds(true);






image-scaling