Joa*_*oan 7 android canvas drawtext
我无法在Canvas中实现平滑非常慢的文本动画,因为Canvas.drawText不想在"像素之间"绘制.例如,给定4个连续帧,其中我绘制Y偏移为0,0.5,1,1.5的文本,画布实际上将分别在偏移0,0,1,1处绘制它,这导致动画"生涩".有一个标志Paint.SUBPIXEL_TEXT_FLAG,它应该保持浮动精度.
我发现了一个相关的线程,其中Romain Guy说Android中目前不支持这个标志:Android 中一些Paint常量的含义.
我的问题是:有任何现有的解决方法吗?
注意:在另一个位图中绘制一次文本,然后使用浮动偏移绘制此位图而不是绘制文本似乎也不起作用.
您可以通过并排绘制两个文本来模拟这种效果,并在两个元素之间进行 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);
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3172 次 |
| 最近记录: |