我无法在Canvas中实现 smooth 非常慢的文本动画,因为Canvas.drawText
不想在“像素之间”绘制。例如,给定4个连续帧,其中我绘制Y偏移为0,0.5,1,1.5的文本,画布实际上将分别在偏移0,0,1,1处绘制它,这导致动画“生涩”。有一个名为Paint.SUBPIXEL_TEXT_FLAG
的标志,它应该保持浮动精度。
我找到了一个相关主题,其中Romain Guy表示Android目前不支持此标记:Meaning of some Paint constants in Android。
我的问题是:是否有现成的解决方法?
注意:在另一个位图中绘制一次文本,然后使用浮动偏移绘制此位图而不是绘制文本似乎也不起作用。
答案 0 :(得分:3)
您可以通过在两个元素之间并行绘制两个文本并进行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);
}
}