android - RoundedBitmapDrawable का उपयोग कैसे करें




android-drawable android-bitmap (5)

क्या किसी ने RoundedBitmapDrawable का उपयोग करने में RoundedBitmapDrawable ? अगर मैं गलत हूं तो मुझे सुधारें, लेकिन मेरी समझ से, यह एक नियमित आयताकार छवि से एक गोलाकार छवि बनाता है।

मैंने अब तक जो कोशिश की है, वह यही है

RoundedBitmapDrawable.createRoundedBitmapDrawable(getResources(), BitmapFactory.decodeResource(getResources(), iconResource))

मैंने क्या हासिल करने की कोशिश की: किसी भी छवि को एक गोलाकार छवि में बदलना और एक छवि दृश्य का उपयोग करके दिखाना।

मामले में मैंने चीजों को मिलाया और जो कुछ मैंने कहा वह गैर-समझदारी है। क्या यह संभव है (या सरल) किसी भी नए ढांचे के साथ ऐसा करना? (Android L या नई सहायता लाइब्रेरी)


आपको कोने की त्रिज्या सेट करने की आवश्यकता है।

Resources res = getResources();
Bitmap src = BitmapFactory.decodeResource(res, iconResource);
RoundedBitmapDrawable dr =
    RoundedBitmapDrawableFactory.create(res, src);
dr.setCornerRadius(Math.max(src.getWidth(), src.getHeight()) / 2.0f);
imageView.setImageDrawable(dr);

गैर-वर्गाकार छवियों पर मौजूदा तरीके से RoundedBitmapDrawable इतना अच्छा नहीं है। यह सामग्री को खिंचाव बनाता है।

मैं इसके लिए एक विकल्प का उपयोग करने का सुझाव देता हूं, जैसा कि मैंने यहां लिखा है: एक नया बिटमैप बनाए बिना, एक गोल, केंद्र-क्रॉप किए गए छवि दृश्य कैसे करें?


मैं एक और विकल्प सुझाना चाहूंगा:

आप अपनी आवश्यकताओं के अनुसार इस पैमाने का उपयोग कर सकते हैं और इस अपवाद से बच सकते हैं:

public static Bitmap scaleBitmapAndKeepRation(Bitmap TargetBmp, int reqHeightInPixels, int reqWidthInPixels) {
        if (TargetBmp != null) {

            if (TargetBmp.getWidth() >= TargetBmp.getHeight()) {

                TargetBmp = Bitmap.createBitmap(
                        TargetBmp,
                        TargetBmp.getWidth() / 2 - TargetBmp.getHeight() / 2,
                        0,
                        TargetBmp.getHeight(),
                        TargetBmp.getHeight()
                );

            } else {

                TargetBmp = Bitmap.createBitmap(
                        TargetBmp,
                        0,
                        TargetBmp.getHeight() / 2 - TargetBmp.getWidth() / 2,
                        TargetBmp.getWidth(),
                        TargetBmp.getWidth()
                );
            }

            if (TargetBmp != null) {
                try {
                    Matrix m = new Matrix();
                    m.setRectToRect(new RectF(0, 0, TargetBmp.getWidth(), TargetBmp.getHeight()), new RectF(0, 0, reqWidthInPixels, reqHeightInPixels), Matrix.ScaleToFit.FILL);
                    Bitmap scaledBitmap = Bitmap.createBitmap(TargetBmp, 0, 0, TargetBmp.getWidth(), TargetBmp.getHeight(), m, true);
                    return scaledBitmap;
                } catch (Exception e) {
                    Log.e("Utils", e.toString());
                    return null;
                }
            }
            return null;
        } else
            return null;
    }

मैं दक्षता के लिए गोल छवि दृश्य भी पा रहा हूं, मैंने सभी तीसरे पक्ष के पुस्तकालय को खोजा है मैंने पाया है कि वे सभी नए बिटमैप बना रहे हैं जो सूची में थकाऊ काम है इसकी खपत अधिक स्मृति

रेफरी पुस्तकालय:

  1. http://ruibm.com/2009/06/16/rounded-corner-bitmaps-on-android/
  2. https://github.com/vinc3m1/RoundedImageView
  3. https://github.com/lopspower/CircularImageView

इस पुस्तकालय से मैंने उपयोग किया है

https://github.com/vinc3m1/RoundedImageView

क्योंकि एक तेज़ ImageView (और ड्रॉबल) जो कि रोयेन गाइ से मूल उदाहरण के आधार पर गोल कोनों (और अंडाकार या मंडलियों) का समर्थन करता है।

  • मूल बिटमैप की एक प्रति नहीं बनाता है
  • एक क्लिपपैथ का उपयोग नहीं करता है जो हार्डवेयर त्वरित नहीं है और एंटी-अलियास नहीं है।
  • बिटमैप को क्लिप करने और कैनवास पर दो बार आकर्षित करने के लिए सेटएक्सफेरमोड का उपयोग नहीं करता है।

यह देर से उत्तर हो सकता है लेकिन मुझे उम्मीद है कि यह दूसरों के लिए उपयोगी होगा

यदि आपकी छवि में एक ही चौड़ाई और ऊँचाई है, तो आप केवल गोल बिटमैप प्राप्त करने के लिए setCircular को सही पर सेट कर सकते हैं

RoundedBitmapDrawable drawable = RoundedBitmapDrawableFactory.create(getResources(),your_bitmap);
drawable.setCircular(true);




android-bitmap