Android30
Canvas.scale方法
1)方法1
将x轴、y轴进行缩放
public void scale(float sx, float sy) {
if (sx == 1.0f && sy == 1.0f) return;
nScale(mNativeCanvasWrapper, sx, sy);
}
2)方法2
以(px,py)点为基准点,进行缩放,而不是坐标原点(0,0)
public final void scale(float sx, float sy, float px, float py) {
if (sx == 1.0f && sy == 1.0f) return;
translate(px, py);
scale(sx, sy);
translate(-px, -py);
}
演示
import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.util.AttributeSet;
import android.view.View;
import androidx.annotation.Nullable;
public class MyScaleView extends View {
public MyScaleView(Context context) {
super(context);
}
public MyScaleView(Context context, @Nullable AttributeSet attrs) {
super(context, attrs);
}
public MyScaleView(Context context, @Nullable AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
}
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
canvas.save();
Paint mPaint = new Paint();
mPaint.setColor(Color.BLUE);
canvas.drawRect(0, 0, 300, 300, mPaint); // 绘制300 * 300的矩形
canvas.scale(0.5f, 0.5f); // 进行缩小一般
mPaint.setColor(Color.GRAY);
canvas.drawRect(0, 0, 300, 300, mPaint); // 缩放后,绘制150 * 150的矩形
canvas.restore();
canvas.scale(0.5f, 0.5f, 300, 300); // 以坐标(300, 300)为基准缩小一半
mPaint.setColor(Color.RED);
canvas.drawRect(0, 0, 300, 300, mPaint); // 缩放后,绘制150 * 150的矩形
}
}
代码
代码:地址
参考文档
Android Developers 中描述的 Canvas.scale 方法,参考文档:地址