2011-09-27 14 views
5

मुझे पता है कि वास्तव में चुटकी ज़ूम लागू करने पर बहुत सारे थ्रेड हैं - लेकिन मुझे यह पहले से ही मिल गया है।एंड्रॉइड में ज़ूमिंग - छवि को देखें

मैं पिंचिंग को संभालने के लिए SimpleScaleGestureListener का उपयोग कर रहा हूं। मैंने यह सुनिश्चित करने में कामयाब रहा है कि आप छवि की ऊंचाई को स्क्रीन आकार के समान रखने के बजाय आगे ज़ूम आउट नहीं कर सकते हैं (इसलिए आप छवि ऊंचाई हमेशा कम से कम उपलब्ध स्क्रीन आकार की ऊंचाई होगी)।

हालांकि, मैं इन सीमाओं के बाहर छवि को पॅन किया जा रहा है या नहीं, मैं स्वचालित रूप से यह पता लगाने का एक तरीका ढूंढ रहा हूं। छवि को प्रदर्शित करने के मानक एंड्रॉइड तरीके की तरह। इसलिए यदि मैं ज़ूम इन करता हूं, और छवि को पैन करता हूं, और फिर ज़ूम आउट करता हूं, तो मैं यह जानना चाहता हूं कि छवि के नीचे स्क्रीन के नीचे पहुंचने पर, और फिर ज़ूमिंग के 'पिवट' तदनुसार समायोजित करता है, इस प्रकार कभी " व्हाइटस्पेस "छवि के ऊपर या नीचे ही। क्या कोई मेरी मदद कर सकता है?

public boolean onScale(ScaleGestureDetector detector){ 
    float minScale = (float) ((float) SCREEN_SIZE.y/(float) DRAWABLE_SIZE.y); 
    mScaleFactor *= detector.getScaleFactor(); 
    mScaleFactor = Math.max(minScale, Math.min(mScaleFactor, 5.0f)); 
    invalidate(); 
    return true; 
} 

protected void onDraw(Canvas canvas) { 
    canvas.save(); 
    canvas.drawColor(Color.DKGRAY); 
    canvas.translate(mPosX, mPosY); 
    canvas.scale(mScaleFactor, mScaleFactor, getDrawable().getIntrinsicWidth()/2, 
    getDrawable().getIntrinsicHeight()/2); 

    this.getDrawable().draw(canvas); 
    canvas.restore(); 
} 

उत्तर

3

आप तैयार बिटमैप को बदलने के लिए android.graphics.Matrix उपयोग कर सकते हैं का उपयोग करने के लिए है:

संदर्भ के लिए, मेरी onScale और OnDraw तरीकों है । मैट्रिक्स में पैमाने और अनुवाद दोनों हैं।

आप बस कैनवास के लिए मैट्रिक्स लागू होगा: canvas.setMatrix

आप आसानी से गणना कर सकता है फिट करने के लिए स्क्रीन वांछित आयत के लिए:

Matrix.setRectToRect 

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

फिर आप अपना कार्य भी हल कर सकते हैं - यह जानने के लिए कि आपकी छवि की सीमाएं कहाँ खींची जाएंगी। Matrix.mapRect गणना करेगा कि आपके बिटमैप के आयताकार (जैसा कि पहले चर्चा की गई है) स्क्रीन के निर्देशांक में स्क्रीन पर दिखाई देगी। फिर आप बस छवि के बाईं तरफ स्क्रीन के बाएं तरफ के सापेक्ष खींचे जाते हैं, जो ऊपर/दाएं/नीचे के लिए समान होता है।

मैं आपको कोड देने वाला नहीं हूं, बस संकेत देता हूं कि किस तरह से जाना है। मैंने हाल ही में चुटकी-ज़ूम, फिट-टू-स्क्रीन, एनिमेटेड संक्रमण आदि के साथ छवि दर्शक को कोड किया है, और सभी मैट्रिक्स और मैनिप्लेशंस का उपयोग करके किया गया था।

+0

धन्यवाद! मैं मैट्रिक्स में देख लूंगा। मैं सराहना करता हूं कि आप कोड साझा नहीं करना चाहते हैं, लेकिन क्या आपके पास मैट्रिक्स पर अच्छे संसाधनों का लिंक हो सकता है और मेरी विशिष्ट समस्या को कैसे दूर किया जाए? शायद एक अच्छा ट्यूटोरियल? मैं निश्चित रूप से खुद को Google कर दूंगा, लेकिन अगर आपके पास कोई 'टॉप-पायच' सुझाव था, तो मुझे बहुत बाध्य होना होगा :) – Dynde

+0

विशेष लिंक के बारे में पता नहीं है। हालांकि, 2 डी रूपांतरण, मैट्रिक्स गणित आदि को देखने का प्रयास करें। यह बहुत मुश्किल नहीं है, और ग्राफिक्स में मैट्रिक्स बहुत शक्तिशाली है। एंड्रॉइड के कैनवास पर यह सिर्फ 2 डी मैट्रिक्स है। –

+0

@ माइस हाय, क्या आप मुझे मैट्रिक्स के साथ इस विशेष समस्या का कोड भेज सकते हैं। मैं कैनवास में ज़ूमिंग और पैनिंग का उपयोग करना चाहता हूं।लेकिन मैं पैनिंग करने में सक्षम नहीं हूं .. मैंने Google किया लेकिन मैट्रिक्स का उपयोग करके मुझे कुछ भी नहीं मिला। अग्रिम में धन्यवाद। – anddev

2

एक सरल समाधान इस विजेट

http://blog.sephiroth.it/2011/04/04/imageview-zoom-and-scroll/

+2

सरल समाधान बहुत अच्छे हो सकते हैं :) हालांकि, मुझे इस समस्या से निपटने के लिए सीखने में अधिक दिलचस्पी है, फिर बस अन्य कोड का उपयोग करना - हालांकि यह प्रेरणा के रूप में उपयोगी साबित हो सकता है :) – Dynde

+0

कोड डिफ़ॉल्ट गैलरी ऐप से निकाला गया है और यह एक लंबा समय है जब मैंने इस पर काम किया था, मुझे सबसे याद है कि इसमें छवि के लिए डिफ़ॉल्ट मैट्रिक्स है, फिर ज़ूम आउट/मैपिंग में मैट्रिक्स – ingsaurabh

+0

पूर्ण लिंक कोड के साथ अच्छा लिंक शामिल है। –

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