2012-01-24 12 views
5

मैं आयताकार ऑब्जेक्ट प्राप्त करना चाहता हूं जो इमेज व्यू को लपेटने वाले आयत के बजाय इमेज व्यू के ड्रायबल को लपेट लेगा। मैं ड्राइंग के चारों ओर कुछ फैंसी आयत खींचने के लिए उस आयताकार का उपयोग करूंगा। मैं उस आयत को कैसे प्राप्त कर सकता हूं?Android पर ImageView के Drawable के आयत को कैसे प्राप्त करें?

उत्तर

-2

बस एक बिटमैप वस्तु में drawable कन्वर्ट:

Bitmap bmp = ((BitmapDrawable)dr).getBitmap(); 
int w = bmp.getWidth(); 
int h = bmp.getHeight(); 
+3

यह केवल ड्रायबल की चौड़ाई और ऊंचाई देता है, लेकिन मैं ड्रॉबल के चारों ओर आयताकार चाहता हूं। – ipman

+0

क्या आप कुछ बेहतर समझ सकते हैं कि आपका क्या मतलब है? क्या आप ImageView से लेआउट का मतलब है? – Andreas

+0

मेरा मतलब यह नहीं है कि कभी-कभी ImageView में अपनी सीमाओं और छवि दृश्य में ड्रायबल के बीच कुछ जगह होती है। मैं अपने आयत में इस अंतर को शामिल नहीं करना चाहता हूं। – ipman

4
Rect rect = new Rect(); 
    ImageView iV = new ImageView(); 

    rect.left = iV.getLeft(); 
    rect.top = iV.getTop(); 
    rect.bottom = iV.getBottom(); 
    rect.right = iV.getRight(); 

अब आप अपने आयत की है।

+7

यह इमेज व्यू के आस-पास आयत देता है, लेकिन मुझे इमेज व्यू में ड्रॉबल के आसपास आयताकार चाहिए। – ipman

0

मैंने यह कोशिश नहीं की है, यह आपके प्रश्न को पढ़ने के दौरान बस मेरे दिमाग में आया। इस बारे में क्या।

मान लें कि छवि दृश्य में कोई पैडिंग नहीं है और गुरुत्वाकर्षण केंद्रित है। समस्या यह है कि आप आयताकार की स्थिति की गणना करने के लिए ड्रायबल की चौड़ाई और ऊंचाई का सरल उपयोग नहीं कर सकते क्योंकि यह ImageView फिट करने के लिए आकार बदल सकता है। तो आपको ImageView के आयामों और ImageView और Drawable के अनुपात का उपयोग करना होगा।

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

जब अनुपात मेल नहीं खाते हैं और मान लें कि उदाहरण के लिए Drawable ImageView से बड़ा है तो ड्रायबल छवि दृश्य की पूरी चौड़ाई भर जाएगा लेकिन ऊंचाई को भर नहीं पाएगा। लेकिन जैसा कि ड्रायबल केंद्रित हो जाता है हम ड्रॉबल्स ऊपरी बाएं कोने के y समन्वय की गणना कर सकते हैं और इसलिए आयताकार के लिए। सबसे पहले ImageView में Drawable की वर्तमान ऊंचाई की गणना करें। इसे ड्रायबल डॉन ' टी के मूल आयामों के रूप में करने की आवश्यकता है क्योंकि इसे ImageView में फिट करने के लिए आकार दिया गया था।

y = (ImageView height - Drawable current height)/2 

तो आयत के निर्देशांक (ऊपरी बाएं कोने से वार का मुकाबला कर रहे हैं): (0/y), (के

current height Drawable = (Drawable height/Drawable width) * ImageView width 

y मूल्य ऊपरी बाएँ कोने का समन्वय चौड़ाई ImageView/y), (चौड़ाई ImageView/y + वर्तमान ऊंचाई Drawable), (0/y + वर्तमान ऊंचाई Drawable)

मुझे आशा है कि आपको यह विचार मिल जाएगा। यदि Drawable ImageView से अधिक है तो आप इसे उसी तरह की गणना कर सकते हैं लेकिन चौड़ाई और ऊंचाई मानों का आदान-प्रदान करना है।

0

यह छवि प्रकार को आकर्षित करने के लिए लागू होने वाले पैमाने के पैमाने पर निर्भर करता है, आपको छवि दृश्य दृश्य (http://grepcode.com/file/repository.grepcode.com/java/ext/com.google.android/android/4.4.2_r1/android/widget/ImageView.java#ImageView.configureBounds%28%29) के "कॉन्फ़िगरेशनबाउंड()" विधि पर व्यस्त इंजीनियरिंग करना है।

उदाहरण के लिए

मैं जब मैं एक केंद्र पैमाने प्रकार के लिए छवि की स्थिति की जरूरत है (मुझे लगता है कि यह दूसरों की तुलना में आसान है, क्योंकि छवि दृश्य छवि को स्केल नहीं करता है) मैं का प्रतिलोम कार्य करें:

(mDrawMatrix.setTranslate((int) ((vwidth - dwidth) * 0.5f + 0.5f), 
         (int) ((vheight - dheight) * 0.5f + 0.5f));) 

ImageView iv (Your ImageView); 
    Drawable dw = iv.getDrawable(); 

    int dwidth = dw.getIntrinsicWidth(); 
    int dheight = dw.getIntrinsicHeight(); 

    int vwidth = iv.getWidth() - iv.getPaddingLeft() - iv.getPaddingRight(); 
    int vheight = iv.getHeight() - iv.getPaddingTop() - iv.getPaddingBottom(); 

    int realImageWidth = (int)((vwidth - dwidth) * 0.25f); 
    // (I do not know why I had to put 0.25f instead of 0.5f, 
    // but I think this issue is a consequence of the screen density) 

    int realImageHeight = (int)((vheight - dheight) * 0.25f); 

और इस डेटा के साथ आप आयताकार बनाने में सक्षम होना चाहिए, मुझे पता है कि यह थोड़ा मुश्किल है लेकिन यह मेरे लिए काम करता है।

+0

क्या आप 0.25 एफ के हिस्से को समझते थे? आपको लगता है कि इसे घनत्व के साथ क्यों करना है, अगर यहां सब कुछ पिक्सल में है? –

संबंधित मुद्दे