canvas concat matrix

1441 단어
canvas.concat의 역할은 matrix의 변환이 canvas에 적용되는 모든 대상으로 이해할 수 있습니다.다음 코드를 보세요.
public class ConcatMatrixActivity extends Activity { @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); requestWindowFeature(Window.FEATURE_NO_TITLE); getWindow().setFlags( WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN); setContentView(new ConcatMatrixView(this)); } } public class ConcatMatrixView extends View { private Matrix matrix = new Matrix(); private Paint bgPaint = new Paint();
public ConcatMatrixView(Context context) {
    super(context);
    matrix.setScale(2f, 2f);
}

@Override
protected void onDraw(Canvas canvas) {
    super.onDraw(canvas);
    bgPaint.setColor(Color.RED);
    canvas.drawRect(0, 0, 100, 100, bgPaint);

    canvas.save();
    canvas.concat(matrix);
    canvas.drawRect(100, 100, 200, 200, bgPaint);
    canvas.restore();

    canvas.drawRect(400, 400, 500, 500, bgPaint);
}

} 상기 코드는 matrix의 x와 y 좌표를 두 배로 늘렸다.변경 효과는 다음과 같습니다.
concat 없이 canvas.drawRect(100, 100, 200, 200, bgPaint);(100,100),(200,200)의 구역 아래에 직사각형을 그립니다.마릭스를 실행했으니까.setScale(2f, 2f) 그래서 matrix의 x와 y 좌표가 두 배로 늘어났다.이때 concat의 작용으로 canvas.drawRect(100,100,200,200,bgPaint)는 (200,200),(400,400)의 구역에 직사각형을 그렸다.같은 이치로 마릭스에 대한 변환을 마릭스로 바꾸면setScale(2f, 2f)을 matrix로 변경합니다.setTranslate(100f, 100f)의 효과는 다음과 같습니다.
x축과 y축 좌표는 모두 100개의 픽셀을 이동했다.

좋은 웹페이지 즐겨찾기