3

画像が1つあり、その上に上下のテキストを書き込む必要があります。静的レイアウトを使用して書き込みます。以下はそのコードです

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行を超える場合は、フォントサイズを小さくして、2行のみに調整できるようにします。

4

1 に答える 1

0

このファイルをダウンロード

@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 に答える