3
有沒有在指定的矩形中繪製文本的方法? 我使用如何在android中的指定矩形中繪製文本?
canvas.drawText(text,x,y,paint)
直接繪製在畫布(ImageView的),但是,這吸引了單一行的所有文本。我想用指定的(x,y),(x1,y1)限制來包裝文本。我不想使用textviews或任何其他視圖。
我只是想在圖像上繪製文字。
有沒有辦法做到這一點?
在此先感謝
有沒有在指定的矩形中繪製文本的方法? 我使用如何在android中的指定矩形中繪製文本?
canvas.drawText(text,x,y,paint)
直接繪製在畫布(ImageView的),但是,這吸引了單一行的所有文本。我想用指定的(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);
}
}
請給我看一個例子嗎? –
我不想使用任何views.I只是想在圖像上繪製文本。是否有像drawText(..)這樣的方法? –
沒有這樣的方法。使用新的Canvas(位圖位圖)製作畫布,並在位圖中繪製文本。 – faylon