我知道这是一个愚蠢的问题,但是我正在阅读一个教程,我似乎并不理解下面的代码行......让我的头发理解了这背后的几何算法,但...... 。哦!!!这很简单,但我似乎没有得到它。请帮忙......我是初学者......
private void drawPict(Canvas canvas, int x, int y, int w, int h,
float sx, float sy) {
canvas.save();
canvas.translate(x, y);
canvas.clipRect(0, 0, w, h);
canvas.scale(0.5f, 0.5f);
canvas.scale(sx, sy, w, h);
canvas.drawPicture(mPicture);
canvas.restore();
}
@SuppressWarnings("unused")
@Override
protected void dispatchDraw(Canvas canvas) {
super.dispatchDraw(mPicture.beginRecording(getWidth(), getHeight()));
mPicture.endRecording();
int x = getWidth()/2;
int y = getHeight()/2;
if (false) {
canvas.drawPicture(mPicture);
} else {
drawPict(canvas, 0, 0, x, y, 1, 1);
drawPict(canvas, x, 0, x, y, -1, 1);
drawPict(canvas, 0, y, x, y, 1, -1);
drawPict(canvas, x, y, x, y, -1, -1);
}
}
我再次研究过这个...并且理解canvas.scale有4个参数,是我假设的点的坐标......但是我还是不能理解浮点sx,浮点系统... < / p>
sx = -1和sy = 1 ......它会扩展,同意......但是不是更好的方法吗?
答案 0 :(得分:2)
按系数+1进行缩放会给出沿轴的一致性变换,并且按系数-1进行缩放会在轴上产生反射。在本示例中,您可以在每个轴上具有四种可能的反射/无反射组合。将两个坐标缩放+1是身份转换。将x坐标缩放-1并将y坐标缩放+1会在垂直线上产生反射,即左右反射。反之亦然,将x缩放+1,将y缩放-1,这是一个向上反射。将两个坐标缩放-1会产生双重反射,这与旋转180度相同。
Canvas类没有单独的反射调用,因此使用缩放。