2012-05-26 11 views
6

पर एक विशिष्ट स्थान पर घुमाया गया है ठीक है शायद मुझे कुछ याद आ रहा है, लेकिन मैं घंटों तक फंस गया हूं। मैं एक ऐप बनाता हूं जहां उपयोगकर्ता चित्र पर एक आयाम रेखा को चित्रित करता है। अब मैं कुछ चयन बिंदु भी पेंट करना चाहता हूं जो दिखाते हैं कि रेखा का चयन किया गया है। ये बिंदु एक विशिष्ट बिटमैप हैं जो रेखा के अंत में (तीर के बाद) होना चाहिए और तीर के अनुसार घुमाया जाना चाहिए। मैं एक वर्ग DrawSelectionPoint कि देखें फैली बनाया है और मैं कुछ इस तरह के साथ बिटमैप बारी बारी से कर सकते हैं:एंड्रॉइड - पेंट घुमाए गए बिटमैप को कैनवास

selectionPoint = BitmapFactory.decodeResource(context.getResources(), 
        R.drawable.selectionpoint); 
Matrix matrix = new Matrix(); 
     matrix.postRotate((float)Math.toDegrees(angle));   
canvas.drawBitmap(selectionPoint, matrix, null); 

इस तरह से मेरी बिटमैप तरह से मैं यह चाहता हूँ घुमाया जाता है, लेकिन यह (जहां कोण लाइन के कोण है) बिंदु 0,0 (स्क्रीन के ऊपरी बाईं ओर) पर चित्रित किया गया है।

अगर मैं

canvas.save(); 

canvas.rotate(); 

canvas.drawBitmap(selectionPoint, x, y, null); 

canvas.restore(); 

की तरह कुछ का उपयोग तो मैं यह बहुत मुश्किल सटीक स्थान मैं चाहता हूँ पर बिटमैप आकर्षित करने के लिए लगता है (के बाद से मैं एक घुमाया कैनवास पर आकर्षित, जो मैं वापस बाद में बारी बारी से)। मैंने कुछ यूक्लिडियन रोटेशन ट्रांसफॉर्मेशन की कोशिश की लेकिन मुझे कोई भाग्य नहीं मिला।

क्या मैट्रिक्स रोटेशन को लागू करने का कोई तरीका है और उन बिंदुओं को भी दें जहां मुझे बिटमैप खींचा जाना चाहिए? आपका अग्रिम में ही बहुत धन्यवाद!

उत्तर

18

मान लें कि आप बिटमैप को आकर्षित करना चाहते हैं जहां बिटमैप के केंद्र (पीएक्स, पीई) कैनवास निर्देशांक होंगे।

matrix.reset(); 
matrix.postTranslate(-bitmap.getWidth()/2, -bitmap.getHeight()/2); // Centers image 
matrix.postRotate(angle); 
matrix.postTranslate(px, py); 
canvas.drawBitmap(bitmap, matrix, null); 
+0

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

Matrix matrix = new Matrix(); 

और अपने OnDraw में है! आपका बहुत बहुत धन्यवाद! – george

+0

यह मेरे लिए लाइन के साथ घूर्णन नहीं कर रहा है। –

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