rotation - Android: conflict between rotate & limit zooming of imageview -
घुमाए जाने पर मेरा प्रोग्राम अच्छा चल रहा है & amp; बिना ज़ूमिंग के ज़ूमिंग या ज़ूमिंग को सीमित करें यहां मेरे कोड का एक हिस्सा है:
} else अगर (मोड == ज़ूम) {float newDist = spacing (event); matrix.set (savedMatrix); यदि (नयाडिस्ट & gt; 10f) {फ्लोट पैमाने = नयादिस्ट / पुरानाडिस्ट; matrix.getValues (mValues1); फ्लोट वर्तमानःस्केल = एमवल्यूस 1 [0]; यदि (वर्तमान स्केल * पैमाने & lt; MIN_ZOOM) {scale = MIN_ZOOM / currentScale; } और अगर (वर्तमान स्केल * पैमाने & gt; MAX_ZOOM) {scale = MAX_ZOOM / currentScale; } matrix.postScale (पैमाने, पैमाने, मध्य। x, मध्य।); matrix.getValues (mValues1); लॉग। E ("ज़ूम", "स्केल" + mValues1 [0]); } / * * घुमाव को सक्षम करने के लिए असम्मेंटमेंट * ज़ूमिंग सीमा के साथ इस समारोह में संघर्ष * / if (lastEvent! = null) {newRot = rotation (event); float r = newRot - d; मैट्रिक्स.postRotate (r, mid.x, mid.y); matrix.getValues (mValues1); लॉग। E ("रोटेट", "स्केल" + mValues1 [0]); }} जैसा कि मुझे लगता है कि मैक्सट्रिक्स.postRotate निष्पादित के बाद कुछ गड़बड़ है, mValues1 [0] - पैमाने का मान बदला जा सकता है, और अगले पाशन में, currentScale भी बदल जाएगा, इसलिए ज़ूम की जांच को सीमित करें गलत हो गया मुझे कुछ विचार दो। किसी भी मदद के लिए धन्यवाद:)
मैंने बग को अन्य तरीके से तय किया है। मैं वर्तमान के लिए मैट्रिक्स मान का उपयोग नहीं कर रहा हूँ स्केल:
फ्लोट वर्तमान scale = mValues1 [0]; मैं नीचे की तरह अन्य वैश्विक चर "previsousScale" का उपयोग करता हूं:
मामला MotionEvent.ACTION_POINTER_UP: // दूसरी उंगली उठाया मोड = कोई नहीं; अंतिम ईवेंट = नल; पिछलास्केल * = tempScale; अगर (पिछले स्काले & gt; MAX_ZOOM) पिछला स्केले = MAX_ZOOM; else अगर (पिछले स्काईले & lt; MIN_ZOOM) previousScale = MIN_ZOOM; टूटना; और अगर MotionEvent.ACTION_MOVE:
} else अगर (मोड == ज़ूम) {float newDist = spacing (event); matrix.set (savedMatrix); यदि (newDist & gt; 10f) {tempScale = newDist / oldDist; अगर (पिछले स्काल्ले * tempScale & lt; MIN_ZOOM) {tempScale = MIN_ZOOM / previousScale; } और अगर (पिछले स्केले * tempScale & gt; MAX_ZOOM) {tempScale = MAX_ZOOM / previousScale; } matrix.postScale (tempScale, tempScale, mid.x, mid.y); } अगर (आखिरी ईवेट! = नल) {newRot = rotation (ईवेंट); float r = newRot - d; मैट्रिक्स.postRotate (r, mid.x, mid.y); }}
Comments
Post a Comment