在android下缩放可以实现onDraw下的画笔画的内容变小,这里以文本为例进行讲解。
在cale提供了两个方法
public void scale(float sx, float sy)
public final void scale(float sx, float sy, float px, float py)
这是一个以0,0为基准的缩放,它会以父布局的坐标(0,0)到(float sx, float sy)做为
一个矩形框, 如果是缩放,会移动所画的文字的位置 下面的代码onDraw()画
的缩放0.5的布局
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
canvas.drawColor(Color.GREEN);
canvas.drawText("base", 0, 400, paintOuterText);
canvas.scale(1.0F, 0.5F);
canvas.drawText("base-0.5" , 0, 400, paintOuterText);
canvas.scale(1.0F, 0.5F);
canvas.drawText("base-0.5*0.5" , 0, 400, paintOuterText);
}
效果图如下,可以看出来第一次文字的缩放显示的位置是400的一半,而第二次
显示是200的一半
如果我们想要每次都画在400的一半上,那可以这么处理,引入save()和restore()机制,
在第一次缩放画,保存画布的状态,第一次画完时,还原画布的状态
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
canvas.drawColor(Color.GREEN);
canvas.drawText("base", 0, 400, paintOuterText);
canvas.save();
canvas.scale(1.0F, 0.5F);
canvas.drawText(" base-0.5" , 0, 400, paintOuterText);
canvas.restore();
canvas.scale(1.0F, 0.5F);
canvas.drawText("base-0.5*0.5" , 0, 400, paintOuterText);
}
效果图如下
这是一个定义一个以某个坐标为基准的缩放,他可以实现以某一个坐标的缩放,这个是我们
需要的效果
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
canvas.drawColor(Color.GREEN);
canvas.drawText("base", 0, 400, paintOuterText);
canvas.scale(1.0F, 0.5F,0,400);
canvas.drawText(" base-0.5", 0, 400, paintOuterText);
canvas.scale(1.0F, 0.5F,0,400);
canvas.drawText("base-0.5*0.5", 0, 400, paintOuterText);
}