2011-02-03 17 views
8

मैं कैनवास से वर्तमान अनुवाद स्थिति कैसे प्राप्त करूं? मैं सामान खींचने की कोशिश कर रहा हूं जहां मेरे निर्देशांक रिश्तेदार (एक दूसरे के लिए) और पूर्ण (कैनवास) के मिश्रण हैं।कैनवास में वर्तमान अनुवाद स्थिति कैसे खोजें?

चलें कहते हैं कि मैं

canvas.translate(x1, y1); 
canvas.drawSomething(0, 0); // will show up at (x1, y1), all good 
// now i want to draw a point at x2,y2 
canvas.translate(x2, y2); 
canvas.drawSomething(0, 0); // will show up at (x1+x2, y1+y2) 
// i could do 
canvas.drawSomething(-x1, -y1); 
// but i don't always know those coords 

क्या करना चाहते हैं यह काम करता है लेकिन गंदा है:

private static Point getCurrentTranslate(Canvas canvas) { 
    float [] pos = new float [2]; 
    canvas.getMatrix().mapPoints(pos); 
    return new Point((int)pos[0], (int)pos[1]); 
} 
... 
Point p = getCurrentTranslate(canvas); 
canvas.drawSomething(-p.x, -p.y); 

कैनवास एक getMatrix विधि है, यह एक setTranslate लेकिन कोई getTranslate है। मैं canvas.save() और canvas.restore() का उपयोग नहीं करना चाहता क्योंकि जिस तरह से मैं चीजों को चित्रित कर रहा हूं, यह थोड़ा मुश्किल है (और शायद गन्दा ...)

क्या इन मौजूदा निर्देशांक प्राप्त करने का कोई क्लीनर तरीका है?

उत्तर

0

आपको पहले रूपांतरण मैट्रिक्स को रीसेट करने की आवश्यकता है। मैं एंड्रॉइड डेवलपर नहीं हूं, android canvas docs पर देख रहा हूं, कोई रीसेट मैट्रिक्स नहीं है, लेकिन एक सेटमैट्रिक्स (android.graphics.Matrix) है। यह कहता है कि यदि दिया गया मैट्रिक्स शून्य है तो यह वर्तमान मैट्रिक्स को पहचान मैट्रिक्स पर सेट करेगा, जो आप चाहते हैं। तो मुझे लगता है आप के साथ अपनी स्थिति को रीसेट (और बड़े पैमाने और तिरछा) कर सकते हैं:

canvas.setMatrix(null); 

यह भी getMatrix के माध्यम से वर्तमान अनुवाद पाने के लिए संभव हो जाएगा। एक नक्शा वेक्टर() विधि है जिसका उपयोग आप matrices के लिए कर सकते हैं यह देखने के लिए कि बिंदु [0,0] मैप किया जाएगा, यह आपका अनुवाद होगा। लेकिन आपके मामले में मुझे लगता है कि मैट्रिक्स को रीसेट करना सबसे अच्छा है।

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