7

これはiPhoneのObjective-Cで実行できますが、同等のAndroidJavaコードを探しています。プレーンJavaでも実行できますが、Android固有のクラスが何であるかわかりません。画像の中央にテキストが含まれるPNG画像をその場で生成したいと思います。

public void createImage(String word, String outputFilePath){ 
    /* what do I do here? */ 
}

関連するスレッド:

4

4 に答える 4

22

次のようなものはどうですか?

Bitmap bitmap = ... // Load your bitmap here
Canvas canvas = new Canvas(bitmap);
Paint paint = new Paint(); 
paint.setColor(Color.BLACK); 
paint.setTextSize(10); 
canvas.drawText("Some Text here", x, y, paint);
于 2012-07-03T19:59:30.843 に答える
7

グラフィックを使用する必要はありません。

より簡単なアプローチはFrameLayout、2つの要素を使用してを作成するImageViewことです。画像用と、上に描画したいもの用の別のビューです。

<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <ImageView
        android:id="@+id/imageView1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:src="@drawable/ic_launcher" />

    <TextView
        android:id="@+id/textView1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Large Text"
        android:textAppearance="?android:attr/textAppearanceLarge" />

</FrameLayout>

もちろん、画像の上にあるものは単純TextViewである必要はありません。別の画像、または任意の要素を含む別のレイアウトにすることができます。

于 2012-07-03T20:06:45.060 に答える
1

これもあなたの問題を解決できる良い解決策だと思います。または、ソースコードのデモをダウンロードします

public Bitmap drawText(String text, int textWidth, int color) {

        // Get text dimensions
        TextPaint textPaint = new TextPaint(Paint.ANTI_ALIAS_FLAG | Paint.LINEAR_TEXT_FLAG);
        textPaint.setStyle(Paint.Style.FILL);
        textPaint.setColor(Color.parseColor("#ff00ff"));
        textPaint.setTextSize(30);

        StaticLayout mTextLayout = new StaticLayout(text, textPaint, textWidth, Layout.Alignment.ALIGN_CENTER, 1.0f, 0.0f, false);

        // Create bitmap and canvas to draw to
        Bitmap b = Bitmap.createBitmap(textWidth, mTextLayout.getHeight(), Bitmap.Config.ARGB_4444);
        Canvas c = new Canvas(b);

        // Draw background
        Paint paint = new Paint(Paint.ANTI_ALIAS_FLAG | Paint.LINEAR_TEXT_FLAG);
        paint.setStyle(Paint.Style.FILL);
        paint.setColor(color);
        c.drawPaint(paint);

        // Draw text
        c.save();
        c.translate(0, 0);
        mTextLayout.draw(c);
        c.restore();

        return b;
    }

上記の関数は、テキストからビットマップイメージを描画するか、ソースコードのデモをダウンロードして、その動作を確認します。

于 2017-05-26T10:02:49.900 に答える
0

GETahの答えがうまくいかなかったので、少し調整しました。これがKotlinバージョンで、次を使用して機能しTextPaintます。

val canvas = Canvas(bm)
val textPaint = TextPaint(Paint.ANTI_ALIAS_FLAG or Paint.LINEAR_TEXT_FLAG)
textPaint.style = Paint.Style.FILL
textPaint.color = Color.BLACK
textPaint.textSize = 30f
canvas.drawText("Hello", 50f, 50f, textPaint)
于 2020-01-14T12:01:22.473 に答える