我有一个图像,我必须在上面写顶部和底部的文本,我使用静态布局在上面写。下面是它的代码
TextPaint mTextPaintTop= new TextPaint();
mTextPaintTop.setColor(Color.RED);
StaticLayout layoutTop = new StaticLayout(top_text, mTextPaintTop,
width,Layout.Alignment.ALIGN_CENTER, 1.3f, 0, false);
canvas.translate(0, 20); //position the text
layoutTop.draw(canvas);
我想把文本限制在两行以内。如果用户键入长文本,并且超过2行,则减小字体大小,使其只能调整为2行。
下载此文件ElliptizingTextView
@Override
public void draw(Canvas canvas) {
// TODO Auto-generated method stub
Paint mpaint = new Paint(Paint.ANTI_ALIAS_FLAG);
mpaint.setColor(Color.RED);
mpaint.setTextSize(13);
mpaint.setTextAlign(Align.CENTER);
drawTextOnCanvas(canvas, "text you want 2 line bigger", 0, 20, mpaint);
}
}
private void drawTextOnCanvas(Canvas canvas, String text, int x, int y, Paint mPaint) {
// Setup a textview like you normally would with your activity context
EllipsizingTextView tv = new EllipsizingTextView(mContext);
tv.setGravity(Gravity.CENTER_HORIZONTAL);
tv.setEllipsize(TruncateAt.END);
tv.setMaxLines(2);
// setup text
tv.setText(text);
// maybe set textcolor
tv.setTextColor(Color.WHITE);
// you have to enable setDrawingCacheEnabled, or the getDrawingCache will return null
tv.setDrawingCacheEnabled(true);
// we need to setup how big the view should be..which is exactly as big as the canvas
tv.measure(MeasureSpec.makeMeasureSpec(canvas.getWidth(), MeasureSpec.EXACTLY), MeasureSpec.makeMeasureSpec(canvas.getHeight(), MeasureSpec.EXACTLY));
// assign the layout values to the textview
tv.layout(0, 0, tv.getMeasuredWidth(), tv.getMeasuredHeight());
// draw the bitmap from the drawingcache to the canvas
canvas.drawBitmap(tv.getDrawingCache(), x, y, mPaint);
// disable drawing cache
tv.setDrawingCacheEnabled(false);
}