2011-05-18 15 views
15

मैंने एक छवि दृश्य के OnTouchListener को सेट किया है और onTouch विधि लागू किया है, लेकिन यदि छवि मैट्रिक्स का उपयोग करके स्केल की गई है, तो मैं स्पर्श के स्थान की गणना कैसे करूं?एंड्रॉइड: छवि दृश्य पर स्पर्श स्थान का पता लगाने के लिए कैसे करें यदि छवि दृश्य मैट्रिक्स द्वारा स्केल किया गया है?

या getX() और getY() लौटने पर गति घटना स्वचालित रूप से ध्यान में रखती है?

उत्तर

39

getX और getY छवि दृश्य के समन्वय प्रणाली में स्पर्श स्थान लौटाएगा। यदि आप छवि के समन्वय प्रणाली के भीतर बिंदु की तलाश में हैं, तो आप ImageView द्वारा उपयोग किए गए मैट्रिक्स के व्यस्त मैट्रिक्स का उपयोग कर सकते हैं। मैं निम्नलिखित की तरह कुछ किया है:

// calculate inverse matrix 
Matrix inverse = new Matrix(); 
imageView.getImageMatrix().invert(inverse); 

// map touch point from ImageView to image 
float[] touchPoint = new float[] {event.getX(), event.getY()}; 
inverse.mapPoints(touchPoint); 
// touchPoint now contains x and y in image's coordinate system 
0

getRawX() और getRawY() का उपयोग करने का प्रयास करें। ध्यान दें कि यह दृश्य के आकार के लिए समायोजित नहीं है, इसलिए यदि ऐप पूर्णस्क्रीन नहीं है तो आपको ऑफसेट करना पड़ सकता है।

6

Zorgbargle जवाब सही है लेकिन वहाँ एक और विचार है जब संसाधन फ़ोल्डर से अपनी लोड हो रहा है छवियों और उस डिवाइस का घनत्व है।

डिवाइस घनत्व पर Android पैमाने छवियों आधार ताकि आप अगर आप केवल mdpi फ़ोल्डर में छवि है, तो आप भी अंक घनत्व से विभाजित करना होगा छवि पर वास्तविक बिंदु को खोजने के लिए:

float[] point = new float[] {event.getX(), event.getY()}; 

Matrix inverse = new Matrix(); 
imageView.getImageMatrix().invert(inverse); 
inverse.mapPoints(point); 

float density = getResources().getDisplayMetrics().density; 
point[0] /= density; 
point[1] /= density;