android vanvas scale translate 的理解

来源:互联网 发布:知乎 张居正 编辑:程序博客网 时间:2024/05/16 05:36

package com.example.canvasdemo;

import android.app.Activity;

import android.os.Bundle;

import android.content.Context;

import android.graphics.Canvas;

import android.graphics.Color;

import android.graphics.Paint;

import android.graphics.drawable.ColorDrawable;

import android.graphics.drawable.Drawable;

import android.view.View;

import java.util.Random;

import android.util.Log;

public class CanvasDemoActivity extends Activity{

private static final String TAG = "CanvasDemoActivity";

Drawable d;

@Override

public void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

d = new ColorDrawable(Color.RED);

t = " + canvas.getHeight()); canvas

setContentView(new CanvasView(this));

}

class CanvasView extends View {

Random random = new Random();

public CanvasView(Context context) {

super(context);

}

@Override

protected void onDraw(Canvas canvas) {

//canvas.drawRGB(random.nextInt(256), random.nextInt(256), random.nextInt(256));

//canvas.drawRGB(1, 1, 1);

Log.d(TAG,"onDraw canvas.width = " + canvas.getWidth() + " canvas.height = " + canvas.getHeight());

canvas.save(); 

canvas.translate(500,500);

canvas.scale(0.1f, 0.1f);

//canvas.translate(500, 500);

Paint paint = new Paint();

paint.setColor(Color.GREEN);

canvas.drawCircle(0, 0, 500, paint);

//d.draw(canvas);

canvas.restore();

//canvas.drawColor(Color.BLUE);

}

}

}

1、原图:没有scale translate

1、canvas.scale(0.1f,0.1f);

canvas.translate(500,500);

canvas先压缩为原来的0.1倍,然后原点平移500个px,但是此时的500 在屏幕上显示只有 500 * 0.1 = 50px,也及时其平移是相对于canvas 本身的,其原点位置相对于屏幕为50px 见图1

2、canvas.translate(500,500);

canvas.scale(0.1f,0.1f);

canvas原点先平移到(500,500),然后再压缩为原来的0.1倍,其原点位置相对于屏幕为(500,500)  见图2