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




android-imageview image-scaling (14)

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

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

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


  1. हां, डिफ़ॉल्ट रूप से एंड्रॉइड पहलू अनुपात को बनाए रखने, ImageView फिट करने के लिए आपकी छवि को स्केल करेगा। हालांकि, सुनिश्चित करें कि आप छवि को android:src="..." का उपयोग करके ImageView पर सेट कर रहे हैं android:src="..." android:background="..." बजाय android:background="..."src= यह पहलू अनुपात को बनाए रखने वाली छवि को स्केल करता है, लेकिन background= छवि को स्केल और विकृत करता है ताकि यह छवि दृश्य के आकार में ठीक हो सके। (आप एक ही समय में पृष्ठभूमि और स्रोत का उपयोग कर सकते हैं, जो कि केवल एक छवि दृश्य का उपयोग करके मुख्य छवि के चारों ओर एक फ्रेम प्रदर्शित करने जैसी चीजों के लिए उपयोगी हो सकता है।)

  2. आपको android:adjustViewBounds भी देखना चाहिए android:adjustViewBounds को rescaled छवि फिट करने के लिए खुद को आकार देने के लिए android:adjustViewBounds को android:adjustViewBounds करें। उदाहरण के लिए, यदि आपके पास एक आयताकार छवि है जो आम तौर पर स्क्वायर छविव्यू होगी, तो एडव्यूव्यूबाउंड = सच्चाई इसे इमेज व्यू को आयताकार बनाने के लिए भी आकार देगी। यह तब छवि दृश्य के चारों ओर अन्य दृश्यों को कैसे प्रभावित करता है, इस पर प्रभाव डालता है।

    फिर समूह ने लिखा था, आप android:scaleType का उपयोग कर डिफ़ॉल्ट स्केल छवियों को बदल सकते हैं android:scaleType पैरामीटर। वैसे, यह काम करने का सबसे आसान तरीका यह कैसे काम करता है बस थोड़ा सा प्रयोग करना होगा! बस एमुलेटर में लेआउट को देखना याद रखें (या एक वास्तविक फोन) क्योंकि ग्रहण में पूर्वावलोकन आमतौर पर गलत होता है।


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

imageView.setScaleType(ScaleType.FIT_XY);

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


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

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

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


इस विशेष मुद्दे वाले किसी और के लिए। आपके पास एक 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:adjustViewBounds="true"
android:scaleType="fitXY"

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

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

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

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

<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
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" />

यदि आप चाहते हैं कि आपकी छवि अधिकतम संभव स्थान पर कब्जा करे तो सबसे अच्छा विकल्प होगा

android:layout_weight="1"
android:scaleType="fitCenter"

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

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

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


android:adjustViewBounds देखें android:adjustViewBounds

इसे सही पर सेट करें यदि आप 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);
    }


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




image-scaling