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