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

无

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

效果图如下
sdf

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章