ক্যানভাসে আঁকতে পাঠ্য প্রস্থের পরিমাপ (অ্যান্ড্রয়েড)


129

আঁকতে ব্যবহৃত পেইন্ট অনুসারে আঁকা টেক্সট () পদ্ধতিটি ব্যবহার করে অ্যান্ড্রয়েড ক্যানভাসে আঁকা কোনও পাঠ্যের প্রস্থ (পিক্সেলগুলিতে) প্রদান করার কোনও পদ্ধতি আছে কি?

উত্তর:


224

20
ধন্যবাদ এটি! আমি কেন এড়িয়ে গেল জানিনা। উদ্দেশ্যটি ছিল কেবল পর্দার কেন্দ্রে একটি পাঠ্য আঁকা। যাইহোক আমি ঠিক বুঝতে পেরেছি যে টেক্সট আঁকার জন্য ব্যবহৃত পেইন্টে আমি স্রেফ সেটটেক্সটলাইন (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

আমি টেক্সট () এবং getTextPath () + কম্পিউটবাউন্ডস () পদ্ধতিগুলি ব্যবহার করেছি এবং https://github.com/ArminJo/android-blue-display/blob এর অধীনে পাওয়া যায় এমন স্থির আকারের ফন্টের জন্য সমস্ত পাঠ্য বৈশিষ্ট্য সহ একটি এক্সেল তৈরি করেছি and /master/TextWidth.xlsx । সেখানে আপনি আরোহণের মতো অন্যান্য পাঠ্য বৈশিষ্ট্যের জন্য সাধারণ সূত্রগুলিও পাবেন will

অ্যাপ্লিকেশন সেইসাথে ফাংশন drawFontTest () সীমা অতিক্রম করা ব্যবহৃত কাঁচা মান জেনারেট করার জন্য এই রেপো তে পাওয়া যায়।


0

আপনি পাঠ্যের প্রস্থ পেতে "textPaint.getTextSize ()" ব্যবহার করতে পারেন

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.