2012-12-20 27 views
10

Canvas और drawText() विधि का उपयोग करते समय मुझे एंड्रॉइड 4.2.1 पर एक अलग प्रतिपादन दिखाई देता है।एंड्रॉइड 4.2.1 गलत चरित्र कर्नाईंग (स्पेसिंग)

4.2 नीचे:

enter image description here

एंड्रॉयड 4.2.1 (Nexux 7) के लिए मैं मिलता है:

enter image description here

आप देख सकते हैं पाठ खपत बहुत तंग है। लगता है कि 4.2.1 में पेश की जाने वाली एक कर्नाई समस्या है।

titlePaint = new Paint(); 
titlePaint.setAntiAlias(true); 
titlePaint.setColor(0xffffffff); 
titlePaint.setTextSize(0.125f); 
titlePaint.setTypeface(Typeface.defaultFromStyle(Typeface.BOLD)); 
titlePaint.setTextAlign(Align.CENTER); 
titlePaint.setLinearText(true); 

अगर मैं का उपयोग नहीं करते titlePaint.setLinearText(true) मैं 4.2.1 पर एक अजीब परिणाम प्राप्त के रूप में आप वहाँ देख सकते हैं: पाठ आकर्षित करने के लिए इस्तेमाल किया पेंट कुछ खास नहीं है

Android 4.2 on Nexus 7: canvas.drawText() not working correctly

संपादित करें :

एंड्रॉइड टीम को यह अजीब व्यवहार रिपोर्ट किया गया है: http://code.google.com/p/android/issues/detail?id=39755 लेकिन यह अभी भी "आधिकारिक" मुद्दा नहीं है।

संपादित करें (2):

कुछ अफवाहें का दावा है कि समस्या एक textSize < 1.0f है ...

+0

आपका प्रश्न वास्तव में क्या है? – THelper

+0

एंड्रॉइड 4.2.1 पर ग्रंथों को इस तरह क्यों प्रदान किया जाता है? इस अनचाहे व्यवहार को ठीक करने के लिए मैं क्या कर सकता हूं? –

उत्तर

13

वर्कअराउंड, कि मैं वर्तमान में उपयोग कर रहा हूँ:

scalePaint.setTextSize(1.5f); 

तो, OnDraw विधि में:

canvas.save(); 
canvas.scale(0.01f, 0.01f); 
canvas.drawText(""+i, 0.5f*100, 0.8f*100, scalePaint);     
canvas.restore(); 

आप देख सकते हैं, मैं पाठ की स्थिति को वापस rescaling कर रहा हूँ, जहां यह माना जाता है तो यह है।

+0

मैं आपके लिए वोट देता हूं प्रतिक्रिया क्योंकि आप पहली बार इस अविश्वसनीय मुद्दे के लिए एक समाधान का सुझाव दे रहे हैं। धन्यवाद (और सवाल के लिए वोट दें, शायद कोई और इसे देखेगा और हमारी मदद करेगा!)। –

+2

ईमानदार होने के लिए, मैं पहले नहीं हूं, मैंने इसे कहीं और पाया है, मैं जल्द से जल्द इसे लिंक पोस्ट करूंगा। चूंकि यह एंड्रॉइड बग है, मुझे यकीन नहीं है कि बेवकूफ कामकाज की बजाय समस्या का वास्तविक समाधान होगा। – scana

+0

मैं अभी भी Google से प्रतिक्रिया का इंतजार कर रहा हूं जैसा कि आप यहां देख सकते हैं: http://gc.codehum.com/p/android/issues/detail?id=39755। मुझे लगता है कि आप यहां StackOverflow पर सबसे पहले हैं। यदि यह सच नहीं है तो कृपया उस लिंक को दें जहां आपको वह समाधान मिला! :) और हाँ, तुम ईमानदार हो! –

0

यह Android में एक बग है और यह पहले से ही बग ट्रैकर आप को प्रस्तुत कर रहा है, जबकि इसमें +1 करने के लिए कुछ ध्यान आकर्षित करने की चाह सकते हैं: Issue 39755

+0

हां, मैं वर्तमान में रिपोर्टिंग में भाग ले रहा हूं। मुझसे एंड्रॉइड टीम से संपर्क किया गया है, लेकिन इसे अभी भी "असली" मुद्दा के रूप में चिह्नित नहीं किया गया है। वे अभी भी जांच कर रहे हैं ... Google पेज के सही लिंक की रिपोर्ट करने के लिए धन्यवाद। क्या आपकी भी यही समस्या है? –

+0

यह मेरा अन्य प्रश्न है: http://stackoverflow.com/questions/13941270/android-4-2-on-nexus-7-canvas-drawtext-not-working-correctly/13971632#13971632 –

9

मैं अपने विशिष्ट मुद्दे के लिए एक समाधान का प्रस्ताव देने वाली एकमात्र प्रतिक्रिया स्वीकार करने के बाद अपने स्वयं के प्रश्न का उत्तर देता हूं। यह एक "अच्छा" और "निश्चित" समाधान हो सकता है:

public static void drawTextOnCanvasWithMagnifier(Canvas canvas, String text, float x, float y, Paint paint) { 
     if (android.os.Build.VERSION.SDK_INT <= 15) { 
      //draw normally 
      canvas.drawText(text, x, y, paint); 
     } 
     else { 
      //workaround 
      float originalTextSize = paint.getTextSize(); 
      final float magnifier = 1000f; 
      canvas.save(); 
      canvas.scale(1f/magnifier, 1f/magnifier); 
      paint.setTextSize(originalTextSize * magnifier); 
      canvas.drawText(text, x * magnifier, y * magnifier, paint); 
      canvas.restore(); 
      paint.setTextSize(originalTextSize); 
     } 
    } 
+0

मुझे आपका जवाब बहुत पसंद है और मैं मदद नहीं कर सका लेकिन 1000 से 1024 को आवर्धक के लिए प्रतिस्थापित कर सकता हूं (उम्मीद है कि यह कहीं और गहराई से अनुकूलित होगा ...) – Couitchy