在android下缩放可以实现onDraw下的画笔画的内容变小,这里以文本为例进行讲解。
scale提供的方法
在cale提供了两个方法
public void scale(float sx, float sy)
public final void scale(float sx, float sy, float px, float py)
scale(float sx, float sy)
这是一个以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);
}
效果图如下
scale(float sx, float sy, float px, float py)
这是一个定义一个以某个座标为基准的缩放,他可以实现以某一个座标的缩放,这个是我们
需要的效果
@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);
}
效果图如下