首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Android画布上平滑的非常慢的文本动画,SUBPIXEL_TEXT_FLAG不能工作。

在Android画布上平滑的非常慢的文本动画,SUBPIXEL_TEXT_FLAG不能工作。
EN

Stack Overflow用户
提问于 2012-09-14 08:25:01
回答 1查看 3.8K关注 0票数 7

我无法在画布上实现平滑、非常慢的文本动画,因为Canvas.drawText不想“在像素之间”绘制。例如,如果连续4帧绘制Y偏移量为0、0.5、1、1.5的文本,画布将分别在偏移量0、0、1、1处绘制,这将导致动画“抓拍”。有一个名为Paint.SUBPIXEL_TEXT_FLAG的标志,用来保持浮动精度。

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

我的问题是:有什么解决办法吗?

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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-09-14 09:28:26

您可以模拟这一效果,绘制两个文本并排与两个元素之间的阿尔法平衡( 127和255)。

假设您的文本从上到下移动,并且当前的垂直位置为10.28。你只需在第10位置画一个文字,阿尔法接近127,在11位置画另一个文本,阿尔法接近255。

下面是一个(丑陋的:D)示例:

代码语言:javascript
复制
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);
    }
}
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12420679

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档