2012-05-15 9 views
25

मैं कुछ पृष्ठभूमि और कुछ पाठ के साथ एक ड्रायबल बनाने के लिए कैनवास का उपयोग कर रहा हूं। ड्रॉबल को एडिटटेक्स्ट के अंदर एक यौगिक ड्रॉबल के रूप में उपयोग किया जाता है।एंड्रॉइड कैनवास ड्राटेक्स्ट टेक्स्ट की वाई-स्थिति

टेक्स्ट कैनवास पर drawText() के माध्यम से खींचा जाता है, लेकिन मुझे कुछ मामलों में खींचे गए पाठ की वाई-स्थिति के साथ कोई समस्या है। उन मामलों में कुछ पात्रों के कुछ हिस्सों को काटा जाता है (छवि लिंक देखें)।

पोजीशनिंग मुद्दे के बिना वर्ण:

http://i50.tinypic.com/zkpu1l.jpg

पोजीशनिंग मुद्दे के साथ वर्ण, पाठ 'जी', 'जे', 'क्यू', आदि .:

http://i45.tinypic.com/vrqxja.jpg

शामिल

आप नीचे दिए गए मुद्दे को पुन: पेश करने के लिए कोड स्निपेट पा सकते हैं।

क्या कोई विशेषज्ञ जानता है कि y स्थिति के लिए उचित ऑफ़सेट कैसे निर्धारित किया जाए?

public void writeTestBitmap(String text, String fileName) { 
    // font size 
    float fontSize = new EditText(this.getContext()).getTextSize(); 
    fontSize+=fontSize*0.2f; 
    // paint to write text with 
    Paint paint = new Paint(); 
    paint.setStyle(Style.FILL); 
    paint.setColor(Color.DKGRAY); 
    paint.setAntiAlias(true); 
    paint.setTypeface(Typeface.SERIF); 
    paint.setTextSize((int)fontSize); 
    // min. rect of text 
    Rect textBounds = new Rect(); 
    paint.getTextBounds(text, 0, text.length(), textBounds); 
    // create bitmap for text 
    Bitmap bm = Bitmap.createBitmap(textBounds.width(), textBounds.height(), Bitmap.Config.ARGB_8888); 
    // canvas 
    Canvas canvas = new Canvas(bm); 
    canvas.drawARGB(255, 0, 255, 0);// for visualization 
    // y = ? 
    canvas.drawText(text, 0, textBounds.height(), paint); 

    try { 
     FileOutputStream out = new FileOutputStream(fileName); 
     bm.compress(Bitmap.CompressFormat.JPEG, 100, out); 
    } catch (Exception e) { 
     e.printStackTrace(); 
    } 
} 

उत्तर

25

मुझे लगता है कि यह शायद एक गलती है माना कि textBounds.bottom = 0. उन उतरते पात्रों के लिए, उन अक्षरों के नीचे हिस्से हैं 0 शायद नीचे (जो textBounds.bottom मतलब है> 0)। आप शायद की तरह कुछ हैं:

canvas.drawText(text, 0, textBounds.top, paint); //instead of textBounds.height()

अपने textBounds 5 से -5 रहा है, और आप y = ऊंचाई (10) पर पाठ आकर्षित, तो आप केवल पाठ के ऊपरी आधे देखेंगे ।

+13

सही दिशा में मुझे इंगित करने के लिए धन्यवाद। canvas.drawText (पाठ, 0, textBounds.height() - textBounds.bottom, पेंट); समाधान था – darksaga

10

मुझे विश्वास है कि आप इस करना चाहिए अगर आप ऊपरी बाएँ कोने के पास पाठ आकर्षित करने के लिए करना चाहते हैं:

canvas.drawText(text, -textBounds.left, -textBounds.top, paint); 

और तुम दो निर्देशांक के विस्थापन की इच्छित मात्रा संक्षेप द्वारा पाठ के चारों ओर स्थानांतरित कर सकते हैं:

canvas.drawText(text, -textBounds.left + yourX, -textBounds.top + yourY, paint); 

कारण यह काम करता है (कम से कम मेरे लिए) यह है कि getTextBounds() आपको बताता है कि drawText() x = 0 और y = 0 की स्थिति में टेक्स्ट को आकर्षित करेगा। तो आपको एंड्रॉइड में टेक्स्ट को संभालने के तरीके से पेश विस्थापन (textBounds.left और leftBounds.top) को घटाकर इस व्यवहार का सामना करना पड़ता है।

this answer में मैं इस विषय पर थोड़ा और विस्तार करता हूं।

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