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

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Android中的Canvas.scale()方法用于按照指定的比例对画布进行缩放。 这个方法有两个重载版本: 1. `scale(float sx, float sy)`:按照给定的比例sx和sy进行缩放,其中sx和sy表示水平和垂直方向上的缩放比例。例如,`canvas.scale(2.0f, 2.0f)`会使得画布在水平和垂直方向上都放大两倍。 2. `scale(float sx, float sy, float px, float py)`:按照给定的比例sx和sy进行缩放,并且以(px, py)为中心点进行缩放。这个版本的方法可以实现以指定点为中心进行缩放的效果。 需要注意的是,Canvas.scale()方法默认是在画布的原点(0, 0)进行缩放操作。如果需要在其他位置进行缩放,可以通过调整画布的平移操作来实现。 例如,以下代码片段展示了如何使用Canvas.scale()方法对画布进行缩放操作: ```java @Override protected void onDraw(Canvas canvas) { super.onDraw(canvas); // 在画布上绘制一个圆形 Paint paint = new Paint(); paint.setColor(Color.RED); canvas.drawCircle(100, 100, 50, paint); // 缩放画布 canvas.scale(2.0f, 2.0f); // 在缩放后的画布上绘制一个圆形 paint.setColor(Color.BLUE); canvas.drawCircle(100, 100, 50, paint); } ``` 在这个例子中,首先在原始大小的画布上绘制了一个红色的圆形,然后通过调用`canvas.scale(2.0f, 2.0f)`将画布放大了两倍,并在缩放后的画布上绘制了一个蓝色的圆形。 希望这个解答对你有帮助!如果你有任何其他问题,请随时问我。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值