android-canvas(一) scale(缩放)的使用

在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的一半

android-canvas(一) scale(缩放)的使用_第1张图片

	如果我们想要每次都画在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);
    }
  效果图如下

android-canvas(一) scale(缩放)的使用_第2张图片

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);
    }

效果图如下
android-canvas(一) scale(缩放)的使用_第3张图片

你可能感兴趣的:(Android,自定义控件)