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つのパラメーターがあり、私が想定するポイントの座標であることを理解しています...しかし、フロートsx、フロートsyをまだ理解できません...

sx=-1 および sy=1... スケーリングします、合意しました...しかし、より良い方法はありませんか?

4

1 に答える 1

2

係数 +1 でスケーリングすると、軸に沿って恒等変換が行われ、係数 -1 でスケーリングすると、軸を横切る反射が行われます。現在の例では、各軸にわたって反射/非反射の 4 つの可能な組み合わせのそれぞれがあります。両方の座標を +1 でスケーリングするのが恒等変換です。x 座標を -1 で、y 座標を +1 でスケーリングすると、垂直線を横切る反射、つまり左右の反射が得られます。x を +1 で y を -1 でスケーリングする場合はその逆で、これは上下の反射です。両方の座標を -1 でスケーリングすると、180 度の回転と同じ二重反射が得られます。

Canvas クラスには反射の個別の呼び出しがないため、代わりにスケーリングが使用されます。

于 2012-11-04T17:02:45.143 に答える