我可以在 iPhone 上的 Objective-C 中做到这一点,但现在我正在寻找等效的 Android Java 代码。我也可以用纯 Java 来做,但我不知道 Android 特定的类是什么。我想动态生成一个PNG图像,其中一些文本位于图像中心。
public void createImage(String word, String outputFilePath){
/* what do I do here? */
}
相关线程:
我可以在 iPhone 上的 Objective-C 中做到这一点,但现在我正在寻找等效的 Android Java 代码。我也可以用纯 Java 来做,但我不知道 Android 特定的类是什么。我想动态生成一个PNG图像,其中一些文本位于图像中心。
public void createImage(String word, String outputFilePath){
/* what do I do here? */
}
相关线程:
怎么样的东西:
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);
您不需要使用图形。
一种更简单的方法是FrameLayout
使用两个元素创建一个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
,它可以是另一个图像,或者另一个包含你喜欢的任意元素的布局。
我认为这也是一个很好的解决方案,可以解决您的问题。或者下载源码demo
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;
}
上面的函数从文本中绘制位图图像或者下载源码demo看看它是如何工作的
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)