3

我有一张图片,我必须在上面写下顶部和底部的文字,我使用静态布局在上面写字。下面是它的代码

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 行。

4

1 回答 1

0

下载此文件EllipsizingTextView

@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);
    }
于 2012-03-27T17:34:31.197 回答