gpt4 book ai didi

android - Android Canvas 中的平滑非常慢的文本动画,SUBPIXEL_TEXT_FLAG 不起作用

转载 作者:塔克拉玛干 更新时间:2023-11-02 20:06:13 24 4
gpt4 key购买 nike

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

我发现了一个相关的线程,其中 Romain Guy 说这个标志目前在 Android 中不受支持:Meaning of some Paint constants in Android .

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

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

最佳答案

您可以通过并排绘制两个文本并在两个元素之间使用 alpha 平衡(介于 127 和 255 之间)来模拟这种效果。

假设您的文字从上到下移动,当前垂直位置为 10.28。您只需在位置 10 处绘制一个文本,其 alpha 值接近 127,在位置 11 处绘制另一个文本,其 alpha 值接近 255。

这是一个小的(丑陋的 :D)例子:

private void doDraw(Canvas canvas) {
Paint paint = new Paint(Paint.ANTI_ALIAS_FLAG);
paint.setColor(Color.BLACK);
paint.setTextSize(20);
canvas.drawRect(0, 0, getWidth(), getHeight(), paint);

mY += 0.05f;
paint.setColor(Color.RED);

if (Math.floor(mY) == mY) {
canvas.drawText("test", mX, mY, paint);
} else {
float mY1 = (float) Math.floor(mY);
float mY2 = mY1 + 1;
float delta = mY - mY1;

paint.setAlpha((int) ((1 - delta) * 127) + 127);
canvas.drawText("test", mX, mY1, paint);

paint.setAlpha((int) ((delta) * 127) + 127);
canvas.drawText("test", mX, mY2, paint);
}
}

关于android - Android Canvas 中的平滑非常慢的文本动画,SUBPIXEL_TEXT_FLAG 不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12420679/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com