Janusz के मूल प्रश्न के उत्तर में, इसे प्राप्त करने के कई तरीके हैं, जिनमें से सभी उनके कठिनाई स्तर में भिन्न हैं और नीचे बताए गए हैं। वेब दृश्य का उपयोग करना अच्छा है, लेकिन यह देखने और महसूस करने और नियंत्रणीयता के मामले में बहुत सीमित है। यदि आप एक कैनवास से बिटमैप को आकर्षित कर रहे हैं, तो सबसे बहुमुखी समाधान जो प्रस्तावित किया गया है वह माइकऑर्टिज़, रॉबर्ट फॉस और / या जैकब नॉर्डफॉक ने सुझाया है। पॉलबोर्के द्वारा एंड्रॉइड-मल्टीटच-कंट्रोलर को शामिल करने के लिए एक शानदार उदाहरण है , और कस्टम विचारों के बहु-स्पर्श समर्थन और alltypes होने के लिए बहुत अच्छा है।
व्यक्तिगत रूप से, यदि आप किसी कैनवास को बिटमैप में चित्रित कर रहे हैं और फिर उसे अंदर और छवि दृश्य में प्रदर्शित कर रहे हैं और मल्टी टच का उपयोग कर ज़ूम इन करना चाहते हैं और घूमना चाहते हैं, तो मुझे माइकआर्टिज़ का समाधान सबसे आसान लगता है। हालाँकि, मेरे उद्देश्यों के लिए, उनके द्वारा प्रदान किए गए Git के कोड को केवल तभी काम करना प्रतीत होता है जब उनका TouchImageView कस्टम ImageView वर्ग एकमात्र बच्चा हो या लेआउट परमस के रूप में प्रदान करें:
android:layout_height="match_parent"
android:layout_height="match_parent"
दुर्भाग्य से मेरे लेआउट डिज़ाइन के कारण, मुझे "layout_height" के लिए "wra_content" की आवश्यकता थी। जब मैंने इसे इस पर बदल दिया तो नीचे की तरफ इमेज क्रॉप हो गई और मैं क्रॉप्ड रीजन को स्क्रॉल या जूम नहीं कर सका। इसलिए मैंने ImageView के लिए स्रोत पर एक नज़र डाली, बस यह देखने के लिए कि एंड्रॉइड ने "ऑनम्यूअर" कैसे लागू किया और माइकऑर्टिज़ को सूट में बदल दिया।
@Override
protected void onMeasure (int widthMeasureSpec, int heightMeasureSpec)
{
super.onMeasure(widthMeasureSpec, heightMeasureSpec);
//**** ADDED THIS ********/////
int w = (int) bmWidth;
int h = (int) bmHeight;
width = resolveSize(w, widthMeasureSpec);
height = resolveSize(h, heightMeasureSpec);
//**** END ********///
// width = MeasureSpec.getSize(widthMeasureSpec); // REMOVED
// height = MeasureSpec.getSize(heightMeasureSpec); // REMOVED
//Fit to screen.
float scale;
float scaleX = (float)width / (float)bmWidth;
float scaleY = (float)height / (float)bmHeight;
scale = Math.min(scaleX, scaleY);
matrix.setScale(scale, scale);
setImageMatrix(matrix);
saveScale = 1f;
// Center the image
redundantYSpace = (float)height - (scale * (float)bmHeight) ;
redundantXSpace = (float)width - (scale * (float)bmWidth);
redundantYSpace /= (float)2;
redundantXSpace /= (float)2;
matrix.postTranslate(redundantXSpace, redundantYSpace);
origWidth = width - 2 * redundantXSpace;
origHeight = height - 2 * redundantYSpace;
// origHeight = bmHeight;
right = width * saveScale - width - (2 * redundantXSpace * saveScale);
bottom = height * saveScale - height - (2 * redundantYSpace * saveScale);
setImageMatrix(matrix);
}
यहाँ पर समाधान करें (int, int) एक "उपयोगिता है जो एक वांछित आकार के साथ सामंजस्य स्थापित करने के लिए है।
पैरामीटर:
- size How big the view wants to be
- MeasureSpec Constraints imposed by the parent
यह दिखाता है:
- The size this view should be."
इसलिए मूल रूप से छवि को लोड होने पर मूल ImageView वर्ग के समान व्यवहार प्रदान करता है। कुछ अधिक परिवर्तन स्क्रीन का समर्थन करने के लिए किए जा सकते हैं जो पहलू अनुपात को संशोधित करते हैं। लेकिन अभी के लिए मुझे आशा है कि यह मदद करता है। अपने मूल कोड, महान काम के लिए माइकऑर्टिज़ को धन्यवाद।