标签: drawtext

使用画布垂直和水平居中文本

我正在尝试水平和垂直对齐位图中的文本,我读了几篇文章,但我找不到解决方案.位图是一个简单的圆形图像.我发布了当前的代码.它或多或少都有效,但是文本没有完全居中,它看起来有点在左边,有点在顶部,我的意思是我似乎必须添加一个偏移来将它移动到右边和底部.

public static float convertDpToPixel(float dp, Context context) {
     Resources resources = context.getResources();
     DisplayMetrics metrics = resources.getDisplayMetrics();
     float px = dp * (metrics.densityDpi / 160f);
     return px;
}    

v = (ImageView) findViewById(R.id.imageView1);
Bitmap b = BitmapFactory.decodeResource(getResources(),
               R.drawable.marker).copy(Bitmap.Config.ARGB_8888, true);
Canvas canvas = new Canvas(b);
Paint textPaint = new Paint(Paint.ANTI_ALIAS_FLAG);
textPaint.setARGB(255, 0, 0, 0);
textPaint.setTextAlign(Align.CENTER);
textPaint.setTypeface(Typeface.DEFAULT_BOLD);
textPaint.setTextSize(convertDpToPixel(9, this));

String text = "30";
int xPos = (canvas.getWidth() / 2);
int yPos = (int) ((canvas.getHeight() / 2) - ((textPaint.descent() +
               textPaint.ascent()) / 2)) ; …
Run Code Online (Sandbox Code Playgroud)

android drawtext android-canvas

9
推荐指数
2
解决办法
2万
查看次数

为什么我的Canvas.drawText()调用不起作用

大家好:我正在编写一个继承自TextView的类,并覆盖其onDraw()方法,但在该方法中,我的调用canvas.drawText()似乎不起作用,代码如下所示:

protected void onDraw(Canvas canvas) {
    // super.onDraw(canvas);
    Paint paint = new Paint();
    paint.setColor(android.graphics.Color.WHITE);
    paint.setTextSize(20);

    String text = "hello";
    canvas.drawText(text, 0, 0, paint);
}
Run Code Online (Sandbox Code Playgroud)

android textview drawtext ondraw android-canvas

8
推荐指数
1
解决办法
3783
查看次数

如何在 Jetpack compose 中在另一个对象的中心绘制文本?

我正在尝试在 Jetpack Compose 中的圆圈内绘制文本。

我画了一个圆,中心是画布的中心。

现在我想精确地在圆的中心绘制文本。

drawTextJetpack compose中的函数具有canvas参数topLeft,该参数需要Offset包含文本的矩形的左上角。我知道我不能通过圆心作为偏移量topLeft,如果我这样做,结果将如下所示,这不是我想要的。

尝试在圆心绘制文本

我希望文本恰好绘制在圆的中心。

这是代码:

Box(
    modifier = Modifier
        .fillMaxSize()
        .background(Color.Green.copy(alpha = 0.2f))
        .padding(36.dp),
    contentAlignment = Alignment.Center
) {
    val textMeasurer = rememberTextMeasurer()
    val textToDraw = "A"
    Canvas(modifier = Modifier.fillMaxSize()) {
        drawCircle(
            center = Offset(
                x = center.x,
                y = center.y
            ),
            radius = 350f,
            color = Color.Blue,
            style = Stroke(
                width = 8f
            )
        )

        drawText(
            textMeasurer = textMeasurer,
            text = textToDraw,
            style = TextStyle( …
Run Code Online (Sandbox Code Playgroud)

android drawtext android-canvas android-jetpack-compose android-jetpack-compose-canvas

8
推荐指数
1
解决办法
3919
查看次数

Android画布中的平滑非常慢的文本动画,SUBPIXEL_TEXT_FLAG无法正常工作

我无法在Canvas中实现平滑非常慢的文本动画,因为Canvas.drawText不想在"像素之间"绘制.例如,给定4个连续帧,其中我绘制Y偏移为0,0.5,1,1.5的文本,画布实际上将分别在偏移0,0,1,1处绘制它,这导致动画"生涩".有一个标志Paint.SUBPIXEL_TEXT_FLAG,它应该保持浮动精度.

我发现了一个相关的线程,其中Romain Guy说Android中目前不支持这个标志:Android 中一些Paint常量的含义.

我的问题是:有任何现有的解决方法吗?

注意:在另一个位图中绘制一次文本,然后使用浮动偏移绘制此位图而不是绘制文本似乎也不起作用.

android canvas drawtext

7
推荐指数
1
解决办法
3172
查看次数

Nexus 7上的Android 4.2:canvas.drawText()无法正常工作

我的应用程序面临严重问题,在Google Play上发布,并且除了> 4.0之外,显然在所有Android版本上都能正常运行.

这是我的Android 4.0 HTC手机的截图:

在此输入图像描述

这就是我在Nexus 7,Android 4.2.1(模拟器中的相同行为)上得到的结果:

在此输入图像描述

我看到每个使用的文本都有相同的行为 canvas.drawText()

用于绘制文本的Paint是:

paint = new Paint();
paint.setAntiAlias(true);
paint.setColor(color); //some color
paint.setTextSize(size); //some size
paint.setTypeface(Typeface.defaultFromStyle(Typeface.BOLD));
paint.setTextAlign(Align.CENTER);
Run Code Online (Sandbox Code Playgroud)

在logCat(4.2.1模拟器)中,我看到了很多

12-18 20:42:21.096: W/Trace(276): Unexpected value from nativeGetEnabledTags: 0
Run Code Online (Sandbox Code Playgroud)

我在清单中使用这些设置:

 <uses-sdk
        android:minSdkVersion="8"
        android:targetSdkVersion="8" />
Run Code Online (Sandbox Code Playgroud)

layout user-interface android drawtext android-4.2-jelly-bean

7
推荐指数
1
解决办法
4947
查看次数

画布绘制html文本

是否可以将Html传递给Canvas.drawtext().
我试过这个:

canvas.drawText(Html.fromHtml("This is an <u>underline</u> text demo for TextView."), 0, 20, colIndex, rowIndex, getTextPaint());
Run Code Online (Sandbox Code Playgroud)

但是这不能解析标签而不能正确显示.

提前致谢.

android canvas drawtext

7
推荐指数
1
解决办法
1429
查看次数

使用Qt在图像上绘制文本

我想在图像上绘制文本。我使用此代码,但是在图像上看不到任何文本。

void ImageSaver::save(const QString &path) const {       
   QImage image(img_);
   QPainter p(&image);
   p.setPen(QPen(Qt::red));
   p.setFont(QFont("Times", 12, QFont::Bold));
   p.drawText(image.rect(), Qt::AlignCenter, "Text");
   image.save(path);
}
Run Code Online (Sandbox Code Playgroud)

c++ qt qpainter qimage drawtext

7
推荐指数
1
解决办法
4564
查看次数

在DrawText中设置VerticalAlignment

我正在使用Visual Layer DrawText进行绘制FormattedText.现在我使用下面的代码来定义格式化的文本,我可以设置TextAlignmentCenter.但是VerticalAlignment呢?如下图所示,文本中心不在中心点,此处显示红点.

我正在定义的部分FormattedText:

var ft = new FormattedText("A",
    CultureInfo.GetCultureInfo("en-us"),
    FlowDirection.LeftToRight,
    new Typeface("Verdana"),
    36, Brushes.Yellow);

ft.TextAlignment = TextAlignment.Center;
Run Code Online (Sandbox Code Playgroud)

我正在绘制文本的部分:

var centerpoint = new Point(0,0);
dc.DrawText(ft, centerpoint);
Run Code Online (Sandbox Code Playgroud)

这是最终结果:

在此输入图像描述

我希望文本的中间位于圆圈的中心.

c# wpf vertical-alignment drawtext

6
推荐指数
1
解决办法
1412
查看次数

如何在Android中使用Canvas.drawText绘制跨区字符串

我想画SpannedString一个Canvas.

在此输入图像描述

SpannableString spannableString = new SpannableString("Hello World!");
ForegroundColorSpan foregroundSpan = new ForegroundColorSpan(Color.RED);
BackgroundColorSpan backgroundSpan = new BackgroundColorSpan(Color.YELLOW);
spannableString.setSpan(foregroundSpan, 1, 8, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
spannableString.setSpan(backgroundSpan, 3, spannableString.length() - 1, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
textView.setText(spannableString);
Run Code Online (Sandbox Code Playgroud)

上面的例子是使用a绘制的TextView,而a又使用a Layout来绘制带有跨度的文本.我知道使用a Layout向画布绘制文本的推荐方法.但是,我从头开始制作自己的文本布局,所以我需要自己实现.

做这样的事情是行不通的

canvas.drawText(spannableString, 0, spannableString.length(), 0, 0, mTextPaint);
Run Code Online (Sandbox Code Playgroud)

因为drawText只从中获取文本spannableString,而不是任何跨度.绘图颜色分别处理TextPaint.

如何使用canvas.drawText(或drawTextRun)绘制跨度信息(特别是前景和背景颜色)?

有关

计划解决方案

我打算直接做一个自我回答,但事实证明这比我想象的更难.所以我会先发帖,然后在我弄清楚的时候添加一个答案.(我当然欢迎任何人先回答.)

这是我到目前为止的作品:

android canvas paint drawtext spannable

6
推荐指数
1
解决办法
3057
查看次数

ffmpeg - 在两次之间向视频添加文本

嗨,我有一个 20 秒长的视频,我想从 00:00:10 秒到 00:00:15 秒向该视频添加一些文本,其中仅显示“夏季视频”并使用 FFMPEG 淡入淡出。

我知道我必须使用 drawtext 过滤器,但有人有任何例子吗?

谢谢你。

video ffmpeg drawtext

6
推荐指数
1
解决办法
7226
查看次数