反转 canvas' drawText()
Invert the canvas' drawText()
当我在 canvas
对象上绘制文本时,一直在寻找一种反转文本的方法。我在这里找不到任何相关的问题。 (也许我使用了错误的关键字。)这就是我想用 drawText()
:
实现的
此功能在 android.graphics
包中可用吗?
否,android.graphics
中没有任何类似功能。
但是您的用例类似于夜间模式功能。有一些方法可以实现这一点,例如:
- 为您的
TextView
使用不同的样式
- 创建自定义
TextView
以反转背景和文本颜色。
这段代码解决了我的问题。
String textToWrite = "Hello World";
int padding = 5;
int paddingTop = padding;
int paddingBottom = padding;
int paddingLeft = padding;
int paddingRight = padding;
Rect bounds = new Rect();
mPaint.getTextBounds(textToWrite, 0, textToWrite.length(), bounds);
mPaint.setColor(Color.WHITE);
Bitmap bitmap = Bitmap.createBitmap(
bounds.width() + paddingLeft + paddingRight,
bounds.height() + paddingTop + paddingBottom,
Bitmap.Config.ARGB_8888);
Canvas canvas = new Canvas(bitmap);
canvas.drawColor(Color.BLACK);
int y = (bitmap.getHeight() + bounds.height() - padding)/2 ;
canvas.drawText(textToWrite, paddingLeft, y, mPaint);
如果您想将此反转文本添加到您的 canvas 的其余部分,只需将 bitmap
绘制到您的全局 canvas,如下所示:
mOriginalCanvas.drawBitmap(bitmap, mCurrentX, mCurrentY, mOriginalPaint);
当我在 canvas
对象上绘制文本时,一直在寻找一种反转文本的方法。我在这里找不到任何相关的问题。 (也许我使用了错误的关键字。)这就是我想用 drawText()
:
此功能在 android.graphics
包中可用吗?
否,android.graphics
中没有任何类似功能。
但是您的用例类似于夜间模式功能。有一些方法可以实现这一点,例如:
- 为您的
TextView
使用不同的样式
- 创建自定义
TextView
以反转背景和文本颜色。
这段代码解决了我的问题。
String textToWrite = "Hello World";
int padding = 5;
int paddingTop = padding;
int paddingBottom = padding;
int paddingLeft = padding;
int paddingRight = padding;
Rect bounds = new Rect();
mPaint.getTextBounds(textToWrite, 0, textToWrite.length(), bounds);
mPaint.setColor(Color.WHITE);
Bitmap bitmap = Bitmap.createBitmap(
bounds.width() + paddingLeft + paddingRight,
bounds.height() + paddingTop + paddingBottom,
Bitmap.Config.ARGB_8888);
Canvas canvas = new Canvas(bitmap);
canvas.drawColor(Color.BLACK);
int y = (bitmap.getHeight() + bounds.height() - padding)/2 ;
canvas.drawText(textToWrite, paddingLeft, y, mPaint);
如果您想将此反转文本添加到您的 canvas 的其余部分,只需将 bitmap
绘制到您的全局 canvas,如下所示:
mOriginalCanvas.drawBitmap(bitmap, mCurrentX, mCurrentY, mOriginalPaint);