一起Talk Android吧(第四百零五回:画布的变换)

本文介绍了Android中画布的平移、旋转和缩放操作,通过具体的代码示例展示了如何利用这些变换绘制出不同位置、角度和大小的图形。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

各位看官们,大家好,上一回中咱们说的是"画笔常用设置"的例子,这一回中咱们介绍的例子是"画布变换"。闲话休提,言归正转,让我们一起Talk Android吧!

看官们,我们在前面章回中介绍了画笔的使用方法,本章回中将介绍画布的变换。常用的变换有平移、旋转和缩放,接下来我们分别介绍。

画布平移

画布平移使用translate方法,平移分x和y两个方向,可以通过方法的参数来设置平移的距离,详细如下,

   canvas.translate(x,y);

画布旋转

画布旋转使用rotate方法,旋转的角度的可以通过该方法的参数来设定,详细如下:

canvas.rotate(value);
canvas.rotate(value,x,y);

该方法是重载方法,参数中的x和y表示圆心的坐标,这个圆心就是旋转时的圆心,画布围绕此圆心进行旋转,如果没有指定圆心坐标,默认使用(0,0)当作圆心。

画布缩放

画布缩放使用scale方法,缩放分x和y两个方向,可以通过方法的参数来设置缩放的倍数,通常使用小于1的小数来缩小画布,大于1的小数来放大画布。详细如下:

canvas.scale(x,y);

使用示例

    private void drawHouse(Canvas canvas) {
        //画房子顶部的/
        canvas.drawLine(startX,startY,startX+houseWidth,startY-houseWidth,mHousePaint);
        //画房子顶部的\
        canvas.drawLine(startX+houseWidth,startY-houseWidth,startX+houseWidth+houseWidth,startY,mHousePaint);
        //画房子底部的部的矩形
        canvas.drawRect(startX,startY,3*houseWidth,startY+houseHeight,mHousePaint);

        //让画布沿x方向和y方向分别平移100和400.然后再画房子,效果是画出两个位置不同但是样子相同的房子       
//        canvas.translate(100,400);
        //以坐原点(0,0)进行旋转,然后再画房子,效果是画出一个正常的房子,一个倾斜的房子。
//        canvas.rotate(30);
        //以自定义坐标点(x,y)进行旋转,下面的代码会使房子出现倒影效果,因为我们计算好了旋转的圆心
//        canvas.rotate(180,(startX+3*houseWidth)/2,startY+houseHeight);
        //缩放画布,x坐标和y坐标都进行缩放,缩放倍数由参数指定,比如下面的代码表示缩小0.5倍,
        //下面的代码会出现一个大房子,一个小房子
        canvas.scale(0.5f,0.5f);
        //画房子顶部的/
        canvas.drawLine(startX,startY,startX+houseWidth,startY-houseWidth,mHousePaint);
        //画房子顶部的\
        canvas.drawLine(startX+houseWidth,startY-houseWidth,startX+houseWidth+houseWidth,startY,mHousePaint);
        //画房子底部的部的矩形
        canvas.drawRect(startX,startY,3*houseWidth,startY+houseHeight,mHousePaint);
    }

上面的代码复用了前面博客中画房子的代码,只需要把此代码放到onDraw()方法就可以正常运行。我们在代码中添加了详细的注释,大家可以自己动手实践。实践时分平移、旋转、缩放三次来运行程序,不用的内容转移注释起来就行。

  • 通过平移可以创建多个房子,有点类似复制;
  • 通过旋转可以让房子呈现不同的倾斜角度,类似比萨斜塔的样子;还可能创建出倒影效果;
  • 通过缩放,可以创建小一号或者大一号的房子;

看官们,关于Android中"画布的变换"的例子咱们就介绍到这里,欲知后面还有什么例子,且听下回分解!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

talk_8

真诚赞赏,手有余香

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值