前言:

rotate 方法并不会导致画布旋转,只会导致x、y坐标进行旋转。
证据之一就是,调用rotate之后,已经画出来的内容,并不会发生旋转。

代码

public class CanvasRotateView extends View {private Paint paint;private Rect rect;public CanvasRotateView(Context context) {super(context);init(context);}public CanvasRotateView(Context context, @Nullable AttributeSet attrs) {super(context, attrs);init(context);}public CanvasRotateView(Context context, @Nullable AttributeSet attrs, int defStyleAttr) {super(context, attrs, defStyleAttr);init(context);}private void init(Context context) {paint = new Paint();paint.setColor(Color.RED);paint.setStyle(Paint.Style.STROKE);paint.setStrokeWidth(2);rect = new Rect(0,0,200,200);}@Overrideprotected void onDraw(Canvas canvas) {super.onDraw(canvas);canvas.drawRect(rect,paint);canvas.drawText("test",0,30,paint);canvas.rotate(90);}
}

实际效果

我们发现rotate之后,已经画好的内容,是不会旋转的,所以,画布是没有发生旋转的。

如果我想要画一个竖方向的文字,需要怎么做?

因为旋转,只是旋转的坐标轴,我们看上面两张图,左边是正常的坐标,当我们调用canvas.rotate(90); 之后,就会变成右边的坐标,但是画布的区域是没有发生变化的。

所以如果我们想要在画布上drawText,需要调用translate 方法,移动一下当前的绘制点的坐标。

图中绿点表示旋转完之后开始的坐标,那么我们想要画text,需要往y轴负方向移动一段距离。

        canvas.translate(0,-10);canvas.drawText("test",0,0,paint);

完整代码:

public class CanvasRotateView extends View {private Paint paint;private Rect rect;public CanvasRotateView(Context context) {super(context);init(context);}public CanvasRotateView(Context context, @Nullable AttributeSet attrs) {super(context, attrs);init(context);}public CanvasRotateView(Context context, @Nullable AttributeSet attrs, int defStyleAttr) {super(context, attrs, defStyleAttr);init(context);}private void init(Context context) {paint = new Paint();paint.setColor(Color.RED);paint.setTextSize(20);paint.setStyle(Paint.Style.STROKE);paint.setStrokeWidth(2);rect = new Rect(0,0,200,200);}@Overrideprotected void onDraw(Canvas canvas) {super.onDraw(canvas);canvas.rotate(90);canvas.translate(0,-10);canvas.drawText("test",0,0,paint);}
}

参考:

http://www.jcodecraeer.com/a/anzhuokaifa/androidkaifa/2013/0304/957.html

https://blog.csdn.net/iasxk/article/details/17411381

https://www.jianshu.com/p/3737351a979f

android canves rotate 详解相关推荐

  1. Android之canvas详解

    首先说一下canvas类: Class Overview The Canvas class holds the "draw" calls. To draw something, y ...

  2. Android 属性动画 详解

    Android 属性动画 详解 Android动画类型: View Animation(即所谓的Tween Animation补间动画):View Animation相当简单,不过只能支持简单的缩放. ...

  3. Android 全局大喇叭——详解广播机制

    Android 全局大喇叭--详解广播机制 一.广播机制简介 1. 标准广播(Normal broadcasts) 2. 有序广播(Ordered broadcasts) 二.接收系统广播 1. 动态 ...

  4. 《Android游戏开发详解》——第1章,第1.6节函数(在Java中称为“方法”更好)...

    本节书摘来自异步社区<Android游戏开发详解>一书中的第1章,第1.6节函数(在Java中称为"方法"更好),作者 [美]Jonathan S. Harbour,更 ...

  5. JMessage Android 端开发详解

    JMessage Android 端开发详解 目前越来越多的应用会需要集成即时通讯功能,这里就为大家详细讲一下如何通过集成 JMessage 来为你的 App 增加即时通讯功能. 首先,一个最基础的 ...

  6. 《Java和Android开发实战详解》——2.5节良好的Java程序代码编写风格

    本节书摘来自异步社区<Java和Android开发实战详解>一书中的第2章,第2.5节良好的Java程序代码编写风格,作者 陈会安,更多章节内容可以访问云栖社区"异步社区&quo ...

  7. Android事件流程详解

    Android事件流程详解 网络上有不少博客讲述了android的事件分发机制和处理流程机制,但是看过千遍,总还是觉得有些迷迷糊糊,因此特地抽出一天事件来亲测下,向像我一样的广大入门程序员详细讲述an ...

  8. Android Studio 插件开发详解二:工具类

    转载请标明出处:http://blog.csdn.net/zhaoyanjun6/article/details/78112856 本文出自[赵彦军的博客] 在插件开发过程中,我们按照开发一个正式的项 ...

  9. 《Android游戏开发详解》一2.16 区分类和对象

    本节书摘来异步社区<Android游戏开发详解>一书中的第2章,第2.16节,作者: [美]Jonathan S. Harbour 译者: 李强 责编: 陈冀康,更多章节内容可以访问云栖社 ...

最新文章

  1. C语言入门经典——基础知识(指针 数组 多维数组)
  2. boost::hana::nothing用法的测试程序
  3. 三维球体换算到二维_AutoCAD三维入门,这些硬核干货要知道,看不懂建议备份收藏...
  4. 实现一个简单的基于码云(Gitee) 的 Storage
  5. 02 List、Tuple、Dict、Set
  6. 处理Redis里的数据
  7. fetchxml 汇总_Dynamic CRM 2013学习笔记(十七)JS读写各种类型字段方法及技巧
  8. 多线程蜂鸣器研究,友善之臂Smart210开发版
  9. 浅谈Entity Framework中的数据加载方式
  10. 快速删除大文件 多级目录 同步并删除 rsync
  11. Window10下让自己开发的自启动程序支持拉起一个图形化软件
  12. 太强了,头发丝完整保留!一个开源的 Python 实时视频抠图工具
  13. 蓝桥杯真题:杨辉三角形
  14. Java 内部类与外部类的关系
  15. 计算机网络实验二:网络基础编程实验
  16. 8086、80286、80386
  17. 中兴新支点操作系统_中兴新支点 OS 销量都过两亿套了?赶紧下载安装体验了一把...
  18. 如何去除图片水印不留痕迹_去水印工具
  19. 星宸科技嵌入式CPU-SSD222D芯片在人脸门锁应用
  20. 开源美狐美颜SDK功能代码分析

热门文章

  1. python创建学生类和教师类_创建StudentServices类
  2. C++知识点34——动态内存与智能指针
  3. C++知识点30——使用C++标准库(关联容器map及其初始化,赋值,查找,添加,删除与迭代器失效)
  4. OnInitDialog()函数
  5. c#split方法拆分为数据_Dexplot:基于pandas,比matplotlib更简单的数据可视化和数据分析工具...
  6. Netflix发布Polly.JS,一个用于HTTP交互的开源库
  7. 遍历——PowerShell三分钟(十)
  8. ECJia如何配置两个网站访问共同的数据库和附件资源
  9. 5分钟搞定开机引导界面
  10. (28)SpringBoot启动时的Banner设置【从零开始学Spring Boot】