如何使用“可旋转绘制”?
2022-09-03 08:14:52
谁能告诉我他们是如何工作的,无论是从代码还是XML,还是两者兼而有之?关于绘制绘图片动画的文档非常差,动画似乎只适用于图像。我希望能够对所有可绘制对象进行动画处理。当我试图从XML获取一个只是导致异常。从 XML 查找的正确函数是什么?RotateDrawable
RotateDrawble
RotateDrawable
谁能告诉我他们是如何工作的,无论是从代码还是XML,还是两者兼而有之?关于绘制绘图片动画的文档非常差,动画似乎只适用于图像。我希望能够对所有可绘制对象进行动画处理。当我试图从XML获取一个只是导致异常。从 XML 查找的正确函数是什么?RotateDrawable
RotateDrawble
RotateDrawable
这是一个很好的解决方案,用于为图像放置旋转的可绘制对象View:
Drawable getRotateDrawable(final Bitmap b, final float angle) {
final BitmapDrawable drawable = new BitmapDrawable(getResources(), b) {
@Override
public void draw(final Canvas canvas) {
canvas.save();
canvas.rotate(angle, b.getWidth() / 2, b.getHeight() / 2);
super.draw(canvas);
canvas.restore();
}
};
return drawable;
}
用法:
Bitmap b=...
float angle=...
final Drawable rotatedDrawable = getRotateDrawable(b,angle);
root.setImageDrawable(rotatedDrawable);
另一种选择:
private Drawable getRotateDrawable(final Drawable d, final float angle) {
final Drawable[] arD = { d };
return new LayerDrawable(arD) {
@Override
public void draw(final Canvas canvas) {
canvas.save();
canvas.rotate(angle, d.getBounds().width() / 2, d.getBounds().height() / 2);
super.draw(canvas);
canvas.restore();
}
};
}
另外,如果您希望旋转位图,但又害怕OOM,则可以使用我在这里制作的NDK解决方案
您必须对“level”属性进行动画处理,其中 0 是起始值,10000 是结束值。
下面的示例从头到尾进行动画处理,您可以使用此方法轻松反转动画。
final RotateDrawable rotateDrawable = ...
ObjectAnimator.ofInt(rotateDrawable, "level", 0, 10000).start();