有没有一种方法可以在指定的矩形中绘制文本?
我正在使用直接绘制到画布(ImageVIEw)
canvas.drawText(text,x,y,paint)
但这将整个文本放在一行中.我想用指定的(x,y),(x1,y1)限制包装文本.我不想使用textvIEws或任何其他视图.
我只想在图像上绘制文本.
有什么方法可以做到这一点?
提前致谢
解决方法:
首先,您必须确定文本大小.每个字符的宽度可以通过getTextWIDths()获得,高度与文本大小相同.尝试估计初始文本大小,然后使用文本的高度和宽度调整最终值.
其次,您需要换行. Paint.getTextWIDths()或Paint.breakText()都可以实现此目标.
编辑:添加代码示例.
public static class RectTextVIEw extends VIEw { private int mWIDth = 200; private int mHeight = 100; private String mText = "Hello world. Don't you kNow why, why you and I."; private Paint mPaint; private List<Integer> mTextBreakPoints; public RectTextVIEw(Context context) { this(context, null); } public RectTextVIEw(Context context, AttributeSet attrs) { super(context, attrs); mPaint = new Paint(); mPaint.setcolor(color.WHITE); mPaint.setAntiAlias(true); setSuitableTextSize(); } @OverrIDe protected voID onMeasure(int wIDthMeasureSpec, int heightmeasureSpec) { setMeasuredDimension(mWIDth, mHeight); } @OverrIDe protected voID onDraw(Canvas canvas) { int start = 0; int x = 0; int y = 0; for (int point : mTextBreakPoints) { y += mPaint.getTextSize(); canvas.drawText(mText, start, point, x, y, mPaint); start = point; } } private voID setSuitableTextSize() { int textSize = getEstimateTextSize(); for (; textSize > 0; textSize--) { if (isTextSizeSuitable(textSize)) return; } } private boolean isTextSizeSuitable(int size) { mTextBreakPoints = new ArrayList<Integer>(); mPaint.setTextSize(size); int start = 0; int end = mText.length(); while (start < end) { int len = mPaint.breakText(mText, start, end, true, mWIDth, null); start += len; mTextBreakPoints.add(start); } return mTextBreakPoints.size() * size < mHeight; } private int getEstimateTextSize() { return (int) Math.sqrt(mWIDth * mHeight / mText.length() * 2); }}
总结 以上是内存溢出为你收集整理的如何在android中的指定矩形中绘制文本?全部内容,希望文章能够帮你解决如何在android中的指定矩形中绘制文本?所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)