2013-08-15 18 views
8

के अंदर एक ही वर्ण के सटीक निर्देशांक खोजें वर्तमान में मैं टेक्स्ट व्यू के पाठ की एक प्रति के माध्यम से paintObject.measureText(textCopy.substring(0,i)) का उपयोग कर रहा हूं। उदाहरण के लिए, measureText("abc".substring(0,1)) मुझे 'बी' के सापेक्ष एक्स निर्देशांक देगा। y समन्वय मुझे layout.getLineTop() से मिलता है। यह काम कर रहा है लेकिन सटीकxगैर-मोनोस्पेस्ड फोंट के लिए निर्देशांक नहीं है। मैं थोड़ा अंशांकन कर सकता हूं, लेकिन प्रत्येक डिवाइस पर यह अलग-अलग काम करता है।टेक्स्ट व्यू

सबसे अच्छा समाधान मैं सोच सकता हूं कि स्क्रीन पर टेक्स्टव्यू ड्राइंग के लिए जिम्मेदार वर्ग को ओवरराइट करना है और उम्मीद है कि स्क्रीन पर खींचे गए प्रत्येक चरित्र के निर्देशांक प्राप्त करें।

क्या कोई यह जानता है कि इसे पूरा करने के लिए मुझे किस वर्ग को ओवरराइट करने की आवश्यकता है? या शायद कुछ अन्य रचनात्मक समाधान?

+0

क्या टेक्स्ट में कोई मार्कअप होना चाहिए (जैसे कुछ HTML टैग)? यदि नहीं, तो आप टेक्स्टव्यू के "ऑनड्रा()" को ओवरराइड कर सकते हैं और कृपया टेक्स्ट को आकर्षित कर सकते हैं। –

+0

इसमें स्पैन किए गए टेक्स्ट हो सकते हैं। – Igor

+0

ठीक है कि चीजों को थोड़ा सा जटिल करता है, "ऑनड्रा()" में आपको प्रत्येक पेंट को जो भी स्पैन होता है, उसे बोल्ड या इटैलिक इत्यादि के आधार पर प्रस्तुत करना होगा, जिसे 'पेंट' को आकर्षित करने के लिए उपयोग किया जा रहा है। –

उत्तर

7

वैसे यह Paint.measureText() या अन्य गहरी कक्षा की एक बग की तरह लगता है। लेकिन मैं अंत इसके चारों ओर एक रास्ता मिल गया है:

layout.getPrimaryHorizontal(int offset) 

यह बहुत आसान है। आप बस उस पाठ की लंबाई का उपयोग करके लेआउट के माध्यम से पुनरावृत्त करते हैं जो इसका उपयोग करता है।

यह लाइन स्थिति के कैरेक्टर रेगर्डलेस के एक्स को वापस कर देगा। तो लाइनें मैं अभी भी layout.getLineTop() से प्राप्त कर रहा हूं। वैसे, यदि आप layout.getLineTop() का उपयोग कर रहे हैं, तो ध्यान दें कि कुछ अजीब व्यवहार, संभवतः एक बग है। मैंने एक बग रिपोर्ट here सबमिट की है।

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