1

我知道这是一个愚蠢的问题,但我正在阅读一个教程,我似乎不理解下面的代码行......已经理解了这背后的几何算法,但是......哦! !!这很简单,但我似乎不明白。请帮助....我是初学者...

  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个参数,它们是我假设的点的坐标...但我仍然无法理解float sx,float sy ...

sx=-1 和 sy=1...它会扩展,同意...但是没有更好的方法吗?

4

1 回答 1

2

缩放系数 +1 会沿轴进行恒等变换,缩放系数 -1 会产生跨轴的反射。在本示例中,您在每个轴上都有反射/无反射的四种可能组合中的每一种。通过 +1 缩放两个坐标是恒等变换。将 x 坐标缩放 -1 并将 y 坐标缩放 +1 会在垂直线上产生反射,即左右反射。反之亦然,将 x 缩放 +1 并将 y 缩放 -1,这是一种上下反射。将两个坐标缩放 -1 会产生双重反射,这与旋转 180 度相同。

Canvas 类没有单独调用反射,因此使用了缩放。

于 2012-11-04T17:02:45.143 回答