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

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