कैनवस (Android) पर खींची जाने वाली पाठ की चौड़ाई को मापना


129

क्या कोई ऐसी विधि है जो ड्रा करने के लिए उपयोग किए गए पेंट के अनुसार ड्राटेक्स्ट () विधि का उपयोग करके एंड्रॉइड कैनवास पर खींचे जाने वाले पाठ की चौड़ाई (पिक्सेल में) लौटाती है?

जवाबों:


224

20
धन्यवाद यह है! मुझे नहीं पता कि मैंने इसे क्यों छोड़ दिया। उद्देश्य केवल स्क्रीन के केंद्र में एक पाठ को आकर्षित करना था। वैसे भी मुझे एहसास हुआ कि मैं भी सिर्फ text को आकर्षित करने के लिए इस्तेमाल किए गए पेंट पर setTextAlign (Align.CENTER) का इस्तेमाल कर सकता था, यह निर्दिष्ट मूल को खींचे गए पाठ के केंद्र में स्थानांतरित करता है। धन्यवाद।
NioX5199

2
महान, धन्यवाद, पेंट पर संरेखित करना! किसने सोचा होगा ...?
संजय मनोहर

या आप केंद्र के लिए
टेक्स्टव्यू

32
Paint paint = new Paint();
Rect bounds = new Rect();

int text_height = 0;
int text_width = 0;

paint.setTypeface(Typeface.DEFAULT);// your preference here
paint.setTextSize(25);// have this the same as your text size

String text = "Some random text";

paint.getTextBounds(text, 0, text.length(), bounds);

text_height =  bounds.height();
text_width =  bounds.width();

12

पूरक उत्तर

वहाँ चौड़ाई द्वारा लौटाए में कुछ अंतर है Paint.measureTextऔर Paint.getTextBoundsmeasureTextएक ऐसी चौड़ाई देता है जिसमें स्ट्रिंग के आरंभ और अंत में ग्लाइफ की एडवांसएक्स वैल्यू शामिल होती है। Rectचौड़ाई द्वारा दिया getTextBoundsक्योंकि सीमा है इस गद्दी नहीं है Rectकि कसकर पाठ गिर्द घूमती है।

स्रोत


2

पाठ को मापने के वास्तव में तीन अलग-अलग तरीके हैं।

GetTextBounds:

val paint = Paint()
paint.typeface = ResourcesCompat.getFont(context, R.font.kaushanscript)
paint.textSize = 500f
paint.color = Color.argb(255, 3, 221, 252)
val contents = "g"
val rect = Rect()
paint.getTextBounds(contents, 0, 1, rect)
val width = rect.width()

MeasureTextWidth:

val paint = Paint()
paint.typeface = ResourcesCompat.getFont(context, R.font.kaushanscript)
paint.textSize = 500f
paint.color = Color.argb(255, 3, 221, 252)
val contents = "g"
val width = paint.measureText(contents, 0, 1)

और getTextWidths:

val paint = Paint()
paint.typeface = ResourcesCompat.getFont(context, R.font.kaushanscript)
paint.textSize = 500f
paint.color = Color.argb(255, 3, 221, 252)
val contents = "g"
val rect = Rect()
val arry = FloatArray(contents.length)
paint.getTextBounds(contents, 0, contents.length, rect)
paint.getTextWidths(contents, 0, contents.length, arry)
val width = ary.sum()

ध्यान दें कि getTextWidths उपयोगी हो सकता है यदि आप यह निर्धारित करने की कोशिश कर रहे हैं कि अगली पंक्ति में पाठ को कब लपेटना है।

मापक टेक्स्टविद और गेटटीडविथ बराबर हैं और उन्नत चौड़ाई है जो मापते हैं कि दूसरों ने इसके बारे में पोस्ट किया है। कुछ इस स्थान को अत्यधिक मानते हैं। हालांकि, यह बहुत व्यक्तिपरक है और फ़ॉन्ट पर निर्भर है।

उदाहरण के लिए माप की सीमा से चौड़ाई वास्तव में बहुत छोटी लग सकती है:

उपाय पाठ सीमाएं छोटी लगती हैं

हालाँकि एक अतिरिक्त पाठ जोड़ने पर एक अक्षर के लिए सीमा सामान्य लगती है: माप पाठ सीमाएं स्ट्रिंग के लिए सामान्य दिखती हैं

कस्टम डेवलपर्स कैनवस ड्रॉइंग के लिए एंड्रॉइड डेवलपर्स गाइड से ली गई छवियां


1

वैसे मैंने अलग तरीके से किया है:

String finalVal ="Hiren Patel";

Paint paint = new Paint();
paint.setTextSize(40);
Typeface typeface = Typeface.createFromAsset(getAssets(), "Helvetica.ttf");
paint.setTypeface(typeface);
paint.setColor(Color.BLACK);
paint.setStyle(Paint.Style.FILL);

Rect result = new Rect();
paint.getTextBounds(finalVal, 0, finalVal.length(), result);

Log.i("Text dimensions", "Width: "+result.width()+"-Height: "+result.height());

आशा है कि यह आपकी मदद करेगा।


0

मैं तरीकों measureText () और getTextPath () + computeBounds () का इस्तेमाल किया और सभी पाठ विशेषताओं तय आकार फ़ॉन्ट के नीचे पाया जा सकता है कि के लिए के साथ एक एक्सेल का निर्माण https://github.com/ArminJo/android-blue-display/blob /master/TextWidth.xlsx । वहां आपको अन्य पाठ विशेषताओं जैसे आरोही आदि के लिए सरल सूत्र भी मिलेंगे।

एप्लिकेशन के साथ ही समारोह drawFontTest () एक्सेल में प्रयुक्त कच्चे मूल्यों पैदा करने के लिए इस रेपो में भी उपलब्ध हैं।


0

टेक्स्ट की चौड़ाई प्राप्त करने के लिए आप "textPaint.getTextSize ()" का उपयोग कर सकते हैं

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.